近距定位系統(tǒng)_第1頁
近距定位系統(tǒng)_第2頁
近距定位系統(tǒng)_第3頁
近距定位系統(tǒng)_第4頁
近距定位系統(tǒng)_第5頁
已閱讀5頁,還剩14頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、中南民族大學(xué)計(jì)算機(jī)科學(xué)學(xué)院設(shè)計(jì)報(bào)告題目:PID算法恒速控制電機(jī)姓名: 汪 立 富、陳一福、董國發(fā)學(xué)號(hào):201321095146、201321095149、指導(dǎo)老師:張志俊 2015年 5 月5日一、總體方案 采用4個(gè)收發(fā)一體的超聲波對(duì)目標(biāo)物體分別分時(shí)測距,將測量的數(shù)據(jù)進(jìn)行一系列計(jì)算后對(duì)目標(biāo)物體進(jìn)行定位,二、方案選擇與論證設(shè)計(jì)主要有以下幾個(gè)模塊組成:電源模塊控制處理模塊:驅(qū)動(dòng)直流電機(jī)模塊:顯示模塊速度測量模塊。2.1處理器根據(jù)設(shè)計(jì)要求,控制器主要用于產(chǎn)生占空比受數(shù)字PID算法控制的PWM脈沖,并對(duì)電機(jī)當(dāng)前速度進(jìn)行采集處理,根據(jù)算法得出當(dāng)前所需輸出的占空比脈沖。對(duì)于控制器的選擇有以下兩種方案。 方

2、案一:采用ARM作為系統(tǒng)的控制器ARM可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能,模塊大,密度高,它將所有器件集成在一塊芯片上,減少了體積,提高了穩(wěn)定性,并且可應(yīng)用軟件在線仿真、調(diào)試,易于進(jìn)行功能控制。ARM采用并行的輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)模實(shí)時(shí)系統(tǒng)的控制核心。通過輸入模塊將參數(shù)輸入給ARM,ARM通過程序設(shè)計(jì)控制PWM脈沖的占空比,但是由于本次設(shè)計(jì)對(duì)數(shù)據(jù)處理的時(shí)間要求不高,ARM的高速處理的優(yōu)勢(shì)得不到充分體現(xiàn),并且由于其集成度高,使其成本偏高,同時(shí)由于芯片的引腳較多,實(shí)物硬件電路板布線復(fù)雜,加重了電路設(shè)計(jì)和實(shí)際焊接的工作。 方案二:采用傳統(tǒng)的STC89C52單片機(jī)作為運(yùn)動(dòng)物體的控制

3、中心。具有軟件編程靈活、體積小、成本低,使用簡單等特點(diǎn),在各個(gè)領(lǐng)域中應(yīng)用廣泛。 綜合上兩種方案比較,采用ASTC89C52作為控制器處理輸入的數(shù)據(jù)并控制電機(jī)運(yùn)動(dòng)較為簡單,可以滿足設(shè)計(jì)要求,還可以減少外圍電路的復(fù)雜度,價(jià)格廉價(jià),因此在本次設(shè)計(jì)選用方案二。程序部分2. 2 測距傳感器2.3 顯示模塊3、 原理分析3.1最小系統(tǒng)3.2 超聲波測距原理3.3電源部分3.4溫差補(bǔ)償4、 軟件部分 4.1軟件總體流程 在本軟件系統(tǒng)中,首先對(duì)對(duì)定時(shí)器、液晶屏的各個(gè)參數(shù)進(jìn)行初始化,再進(jìn)入while循環(huán)語句進(jìn)行重復(fù)性的測量并且更新目標(biāo)物體的數(shù)據(jù),四個(gè)超聲波的測距流程圖在圖已經(jīng)給出,這里不加論述,當(dāng)四個(gè)距離都測出

4、后,進(jìn)入計(jì)算子程序calculator()計(jì)算各個(gè)參數(shù)進(jìn)行定位,最后再調(diào)用子程序顯示函數(shù),把計(jì)算出的參數(shù)數(shù)據(jù)經(jīng)過液晶屏顯示出來,為使顯示的數(shù)據(jù)直觀觀察,需要延時(shí)1s,在本軟件設(shè)計(jì)中,循環(huán)一次的時(shí)間大約為1.2s。 開始 初始化定時(shí)器2調(diào)用測距程序調(diào)用定位計(jì)算子程序 調(diào)用顯示函數(shù)更新顯示輸出延時(shí)1ms 圖4.1 總體流程4.2測距算法原理 4.2.1 單個(gè)測距原理本系統(tǒng)采用的是超聲波傳感器測距,超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計(jì)時(shí)。超聲波在空氣中的傳播速度為340m/s,而外界的溫度的大小

5、會(huì)影響的傳播速度,在本系統(tǒng)的設(shè)計(jì)中,在前面已經(jīng)論述過,這里不加論證,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離(s),這就是所謂的時(shí)間差測距法。距離計(jì)算公式 L=(t*340)/2 (0) 發(fā)送大于40KHz的脈沖方波,在本次的驗(yàn)證試驗(yàn)中,f為58Hz最為準(zhǔn)確,當(dāng)超聲波發(fā)射的同時(shí),定時(shí)器2開始定時(shí)使能,當(dāng)接收到反射波時(shí),定時(shí)器失能,定時(shí)器2停止計(jì)時(shí),時(shí)間記為t,由(0)公式即可計(jì)算出距離長度。發(fā)射58Hz的脈沖波是否接收到回波? N4.2.2 四個(gè)超聲波測距 一個(gè)超聲波只能測距,要定位一個(gè)目標(biāo)物體,則最少需要3個(gè)超聲波測量不同的距離,在本系統(tǒng)中,為了方便計(jì)算,增加系統(tǒng)的可靠性,本

6、次設(shè)計(jì)采用4個(gè)收發(fā)一天的超聲波分別測距,距離分別記為X1,X2,X3,X4如圖所示,記1,3號(hào)超聲波探頭的連線方向?yàn)檎狈较?,于是就可以定位目?biāo)物體的具體位置了。 測量X1的距離 Y X1的距離是否過大? Y N 測量X2的距離 X2的距離是否過大? Y 測量X3的距離 N X3的距離是否過大? 測量X4的距離 N Y X4的距離是否過大?4.3定位算法原理分析 在本系統(tǒng)中,定位算法占主要作用,在整個(gè)的測距過程中, 圖4.3.1四個(gè)探頭的分布 如圖所示,在測距過程中,可等效為一個(gè)底面長為40cm的四棱錐,測量的距離分別記為,探頭1到被測物的距離記為X1,2號(hào)測距探頭測得的距離記為X2,3號(hào)測距

7、探頭測得的距離記為X3,4號(hào)測距探頭測得的距離記為X4,探頭1和探頭3的連線方向?yàn)檎狈较颍鐖D所示,底面為邊長為30Cm的正方形,中點(diǎn)O為定位參考點(diǎn),當(dāng)X1,X2,X3和X4的距離求出后,四棱錐為一個(gè)固定圖像,被測物相對(duì)于O點(diǎn)的位置就可以確定, 圖4.3.2 等效圖1 圖4.3.3等效四棱錐圖2 計(jì)算算法,在計(jì)算被測物的位置時(shí),可以運(yùn)用兩種方法計(jì)算,分別為直接計(jì)算距離法和向量法,由于在本次直接計(jì)算法難度較大,而向量法計(jì)算簡單,因此,利用向量求圖法計(jì)算,設(shè)O點(diǎn)的坐標(biāo)為(0,0,0),被測物的坐標(biāo)為(x,y,z),1點(diǎn)的坐標(biāo)為(-a,a,0),2點(diǎn)的坐標(biāo)為(a,a,0),3點(diǎn)的坐標(biāo)為(-a,-a

8、,0),4點(diǎn)的坐標(biāo)為(a,-a,0),在線段1Q中,向量1Q的長度可以表示為坐標(biāo)1減去坐標(biāo)Q,再開方,則X1的長度計(jì)算公式為: X1=sqrt(x+a)*(x+a)+(y-a)*(y-a)+z*z); (1) 同理便可算出X2,X3和X4的長度: X2=sqrt(x-a)*(x-a)+(y-a)*(y-a)+z*z); (2) X3=sqrt(x+a)*(x+a)+(y+a)*(y+a)+z*z); (3) X4=sqrt(x-a)*(x-a)+(y+a)*(y+a)+z*z); (4) 其中,a為常量,sqrt()函數(shù)表示對(duì)括號(hào)里面的數(shù)進(jìn)行開方,設(shè)x1和y1,x2和y2分別為三棱錐Q123計(jì)

9、算出的Q點(diǎn)的坐標(biāo)和三棱錐Q234計(jì)算出的Q點(diǎn)坐標(biāo),在則結(jié)合(1)(2)(3)(4)可以得出x1,y1,x2和y2,計(jì)算公式為: x1=(X 32*X3-X4*X4)/(4*a); (5) y1=(X4*X4-X2*X2)/(4*a); (6) x2=(X1*X1-X2*X2)/(4*a); (7) y2=(X3*X3-X1*X1)/(4*a); (8) z1=sqrt(X1*X1-(x+a)*(x+a)-(y-a)*(y-a); (9) z2=sqrt(X2*X2-(x-a)*(x-a)-(y-a)*(y-a); (10) z3=sqrt(X3*X3-(x+a)*(x+a)-(y+a)*(y+

10、a); (11) z4=sqrt(X4*X4-(x-a)*(x-a)-(y+a)*(y+a); (12) 為了提高精度, 對(duì)各個(gè)方向上的值求平均值,由(5)(6)(7)(8)(9)(10)(11)(12) 可以算出得出平均值,最后記的平均值坐標(biāo)為(coordinate_x,coordinate_y, coordinate_z),則可以對(duì)各個(gè)方向坐標(biāo)求平均值,則計(jì)算公式為: coordinate_x=(x1+x2)/2; coordinate_y=(y1+y2)/2; coordinate_z=(z1+z2+z3+z4)/4; 已知Q點(diǎn)相對(duì)于O點(diǎn)的坐標(biāo)后,便可以求QO的距離長度了,記OQ得長度為

11、L,Q點(diǎn)對(duì)地的的距離記為d,計(jì)算公式為:d=sqrt(coordinate_x*coordinate_x+coordinate_y*coordinate_y);L=sqrt(coordinate_x*coordinate_x+coordinate_y*coordinate_y+coordinate_z*coordinate_z); 記coordinate_y/d為角度A的余弦值,d/L的值記為角度B的余弦值,其中計(jì)算公式如下:cosA=(coordinate_y/d);cosB=(d/L);調(diào)用acos()余弦計(jì)算函數(shù),將角度A和B計(jì)算出來:pi_angle=acos(cosA); / /an

12、gle=pi_angle*180/3.14159;/pi_angle1=acos(cosB);/?angle1=pi_angle1*180/3.14159;/?在角度數(shù)據(jù)的讀取中,往往角度在90度以內(nèi),因此必須進(jìn)過一下?lián)Q算:if(angle>90) angle=180-angle;if(angle1>90) angle1=180-angle1; 最后,所有參數(shù)計(jì)算完畢。五、測試結(jié)果及其誤分析總結(jié)7、 附件7.1 完整電路圖7.2全部程序清單#include "stm32f10x.h"#include "stm32f10x_fsmc.h"#in

13、clude "bsp_ili9341_lcd.h"#include "bsp_sdfs_app.h"#include "math.h"#include "stm32f10x_tim.h"/#include "usart1.h"#include "bsp_usart1.h"#include "TIM2.h"#include "UltrasonicWave.h"#include "math.h" void DelayTi

14、me_ms(int Time) /1us延時(shí)函數(shù) unsigned int i; for ( ; Time>0; Time-) for ( i = 0; i <720; i+ ); void LCD_SHOW(void)LCD_DispEnCh(25, 15, (uint8_t *)"作者:wang",RED); LCD_DispEnCh(25, 35, (uint8_t *)"單位:中南民族大學(xué)", RED); LCD_DispEnCh(90, 80, (uint8_t *)"室內(nèi)定位系統(tǒng)", RED); LCD_Dis

15、pEnCh(5, 120, (uint8_t *)"被稱測物離基站距離為: cm", RED);LCD_DispEnCh(5, 150, (uint8_t *)"被測物離地距離為: cm", RED);LCD_DispEnCh(2, 180, (uint8_t *)"被測物具體坐標(biāo)為( , , )", RED);LCD_DispEnCh(5, 210, (uint8_t *)"基站觀察的仰角為: 度", RED);LCD_DispEnCh(5, 270, (uint8_t *)"被測物對(duì)地離基站距離為:

16、cm", RED);int main(void)/USART1_Config();LCD_Init();LCD_Clear(0, 0, 240, 320, BACKGROUND);/初始化sd卡文件系統(tǒng),因?yàn)闈h字的字庫放在了sd卡里面 Sd_fs_init(); SystemInit();NVIC_Configuration();TIM2_Configuration();UltrasonicWave_Configuration(); LCD_SHOW(); while(1) UltrasonicWave_StartMeasure(); DelayTime_ms(10000);LCD_

17、Clear(0, 0, 240, 320, BACKGROUND);#include "UltrasonicWave.h"#include "bsp_usart1.h"#include "TIM2.h"#include "stm32f10x_tim.h"#include "bsp_ili9341_lcd.h"#include "bsp_sdfs_app.h"#include "math.h"#defineTRIG_PORT GPIOC/TRIG #defi

18、neECHO_PORT GPIOC/ECHO #defineTRIG_PIN GPIO_Pin_8 /TRIG #defineECHO_PIN GPIO_Pin_9/ECHO#defineTRIG_PORT1 GPIOA/TRIG #defineECHO_PORT1 GPIOA/ECHO #defineTRIG_PIN1 GPIO_Pin_1 /TRIG #defineECHO_PIN2 GPIO_Pin_2/ECHO #defineTRIG_PIN3 GPIO_Pin_3 /TRIG #defineECHO_PIN4 GPIO_Pin_4/ECHO #defineTRIG_PIN5 GPIO

19、_Pin_5 /TRIG #defineECHO_PIN6 GPIO_Pin_6/ECHO #defineTRIG_PIN7 GPIO_Pin_7 /TRIG #defineECHO_PIN8 GPIO_Pin_8/ECHO /unsigned short intint UltrasonicWave_Distance; /計(jì)算出的距離 int UltrasonicWave_Distance1; /計(jì)算出的距離 int UltrasonicWave_Distance2; /計(jì)算出的距離 int UltrasonicWave_Distance3; /計(jì)算出的距離 int UltrasonicWav

20、e_Distance4; /計(jì)算出的距離 /* * 函數(shù)名:DelayTime_us * 描述 :1us延時(shí)函數(shù) * 輸入 :Time 延時(shí)的時(shí)間 US * 輸出 :無 */ float angle, pi_angle, angle1, pi_angle1, cosA, cosB, d,a=40;float X1,X2,X3,X4;float L, x,y,z, coordinate_x,coordinate_y,coordinate_z, y1,x1,z1, y2,x2,z2, z3,z4;void calculator (void) / /算法計(jì)算函數(shù)/*X1=sqrt(x+a)*(x+a

21、)+(y-a)*(y-a)+z*z);X2=sqrt(x-a)*(x-a)+(y-a)*(y-a)+z*z); X3=sqrt(x+a)*(x+a)+(y+a)*(y+a)+z*z); X4=sqrt(x-a)*(x-a)+(y+a)*(y+a)+z*z);*/x1=(X3*X3-X4*X4)/(4*a);y1=(X4*X4-X2*X2)/(4*a);x2=(X1*X1-X2*X2)/(4*a);y2=(X3*X3-X1*X1)/(4*a); coordinate_x=(x1+x2)/2; coordinate_y=(y1+y2)/2;z1=sqrt(X1*X1-(x+a)*(x+a)-(y-

22、a)*(y-a); z2=sqrt(X2*X2-(x-a)*(x-a)-(y-a)*(y-a);z3=sqrt(X3*X3-(x+a)*(x+a)-(y+a)*(y+a);z4=sqrt(X4*X4-(x-a)*(x-a)-(y+a)*(y+a); coordinate_z=(z1+z2+z3+z4)/4; /取平均值d=sqrt(coordinate_x*coordinate_x+coordinate_y*coordinate_y);L=sqrt(coordinate_x*coordinate_x+coordinate_y*coordinate_y+coordinate_z*coordina

23、te_z);cosA=(coordinate_y/d);cosB=(d/L); LCD_DisNum(1, 232, x1, WHITE);LCD_DisNum(15, 232, x2, WHITE);LCD_DisNum(37, 232, y1, WHITE);LCD_DisNum(57, 232, y2, WHITE);LCD_DisNum(67, 232, x, WHITE);LCD_DisNum(87, 232, y, WHITE);LCD_DisNum(107, 232, z, WHITE);LCD_DisNum(127, 232, z1, WHITE);LCD_DisNum(157

24、, 232, z2, WHITE);*/pi_angle=acos(cosA);/?angle=pi_angle*180/3.14159;/?pi_angle1=acos(cosB);/?angle1=pi_angle1*180/3.14159;/?if(angle>90) angle=180-angle;if(angle1>90) angle1=180-angle1;LCD_DisNum(159, 122, L, WHITE);LCD_DisNum(148, 152, coordinate_z, WHITE);LCD_DisNum(139, 182, coordinate_x,

25、WHITE);LCD_DisNum(165, 182, coordinate_y, WHITE); LCD_DisNum(197, 182, coordinate_z, WHITE);LCD_DisNum(149, 212, angle1, WHITE);LCD_DisNum(192, 272, d, WHITE);if(coordinate_x>0&coordinate_y>0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站的北偏東 度", RED); LCD_DisNum(186, 242, angle, WHITE

26、);if(coordinate_x=0&coordinate_y=0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站的正上方 度", RED); LCD_DisNum(186, 242, angle, WHITE);if(coordinate_x<0&coordinate_y>0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站的北偏西 度", RED); LCD_DisNum(186, 242, angle, WHITE);if(coordinate_x<

27、;0&coordinate_y<0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站的南偏西 度", RED); LCD_DisNum(186, 242, angle, WHITE);if(coordinate_x>0&coordinate_y<0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站的南偏東 度", RED); LCD_DisNum(186, 242, angle, WHITE);if(coordinate_x=0&coordinate

28、_y>0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站正北方向", RED); LCD_DisNum(186,242, angle, WHITE);if(coordinate_x=0&coordinate_y<0)LCD_DispEnCh(5, 240, (uint8_t *)"被測物位于基站正南方向", RED); LCD_DisNum(186, 242, angle, WHITE);if(coordinate_x>0&coordinate_y=0)LCD_DispEnCh(5, 2

29、40, (uint8_t *)"被測物位于基站正東方向", RED); LCD_DisNum(186, 242, angle, WHITE);if(coordinate_x<0&coordinate_y=0)LCD_DispEnCh(50, 240, (uint8_t *)"被測物位于基站正西方向", RED); LCD_DisNum(186,242, angle, WHITE);void DelayTime_us(int Time) unsigned char i; for ( ; Time>0; Time-) for ( i =

30、0; i < 72; i+ );/* * 函數(shù)名:UltrasonicWave_Configuration * 描述 :超聲波模塊的初始化 * 輸入 :無 * 輸出 :無 */void UltrasonicWave_Configuration(void) GPIO_InitTypeDef GPIO_InitStructure; / RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /*GPIO_InitStructure.G

31、PIO_Pin = TRIG_PIN; /PC8接TRIG GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /設(shè)為推挽輸出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT, &GPIO_InitStructure);/初始化外設(shè)GPIO */ GPIO_InitStructure.GPIO_Pin = TRIG_PIN1; /PA1接TRIG GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /

32、設(shè)為推挽輸出模式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT1, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = TRIG_PIN3; /PA3接TRIG GPIO_Init(TRIG_PORT1, &GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin = TRIG_PIN5; /PA5接TRIG GPIO_Init(TRIG_PORT1, &GPIO_InitStructure

33、);GPIO_InitStructure.GPIO_Pin = TRIG_PIN7; /PA7接TRIG GPIO_Init(TRIG_PORT1, &GPIO_InitStructure); /*GPIO_InitStructure.GPIO_Pin = ECHO_PIN; /PC9接ECH0 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; /設(shè)為輸入 GPIO_Init(ECHO_PORT1,&GPIO_InitStructure); /初始化GPIOA*/GPIO_InitStructure.GPIO_Pin =

34、 ECHO_PIN2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;/PC9接ECH0 GPIO_Init(ECHO_PORT1,&GPIO_InitStructure); /初始化GPIOAGPIO_InitStructure.GPIO_Pin = ECHO_PIN4; /PC9接ECH0 GPIO_Init(ECHO_PORT1,&GPIO_InitStructure); /初始化GPIOAGPIO_InitStructure.GPIO_Pin = ECHO_PIN6; /PC9接ECH0 GPIO_Init(E

35、CHO_PORT1,&GPIO_InitStructure); /初始化GPIOAGPIO_InitStructure.GPIO_Pin = ECHO_PIN8; /PC9接ECH0 GPIO_Init(ECHO_PORT1,&GPIO_InitStructure); /初始化GPIOAGPIO_InitStructure.GPIO_Pin = ECHO_PIN; /PC9接ECH0 GPIO_Init(ECHO_PORT1,&GPIO_InitStructure); /初始化GPIOA/* * 函數(shù)名:UltrasonicWave_CalculateTime * 描述

36、 :計(jì)算距離 * 輸入 :無 * 輸出 :無void UltrasonicWave_CalculateTime(void) UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000UltrasonicWave_Distance1=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000UltrasonicWave_Distance1=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000Ultrason

37、icWave_Distance1=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000UltrasonicWave_Distance1=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000 * 函數(shù)名:UltrasonicWave_StartMeasure * 描述 :開始測距,發(fā)送一個(gè)>10us的脈沖,然后測量返回的高電平時(shí)間 * 輸入 :無 * 輸出 :無 */void UltrasonicWave_StartMeasure(void) /* GPIO_SetBits(TRIG_P

38、ORT,TRIG_PIN); /送>10US的高電平 DelayTime_us(20); /延時(shí)20US GPIO_ResetBits(TRIG_PORT,TRIG_PIN); while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN); /等待高電平 TIM_Cmd(TIM2, ENABLE); /開啟時(shí)鐘 while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN); /等待低電平 TIM_Cmd(TIM2, DISABLE); /定時(shí)器2失能 /UltrasonicWave_CalculateTime(); /

39、計(jì)算距離 TIM_SetCounter(TIM2,0);/printf("rndistance:%d%d cmrn",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256); LCD_DisNum(157,122,UltrasonicWave_Distance,WHITE);*/ GPIO_SetBits(TRIG_PORT1,TRIG_PIN1); /送>10US的高電平 DelayTime_us(25); /延時(shí)20US GPIO_ResetBits(TRIG_PORT1,TRIG_PIN1); while

40、(!GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN2); /等待高電平 TIM_Cmd(TIM2, ENABLE); /開啟時(shí)鐘 while(GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN2); /等待低電平 TIM_Cmd(TIM2, DISABLE); /定時(shí)器2失能UltrasonicWave_Distance1=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000 /計(jì)算距離 UltrasonicWave_Distance1=UltrasonicWave_Dist

41、ance1; X1=UltrasonicWave_Distance1; TIM_SetCounter(TIM2,0);GPIO_SetBits(TRIG_PORT,TRIG_PIN3); /送>10US的高電平 DelayTime_us(25); /延時(shí)20US GPIO_ResetBits(TRIG_PORT,TRIG_PIN3); while(!GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN4); /等待高電平 TIM_Cmd(TIM2, ENABLE); /開啟時(shí)鐘 while(GPIO_ReadInputDataBit(ECHO_PORT1,E

42、CHO_PIN4); /等待低電平 TIM_Cmd(TIM2, DISABLE); /定時(shí)器2失能 UltrasonicWave_Distance2=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000 /計(jì)算距離 X2=UltrasonicWave_Distance2; / X2=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000 TIM_SetCounter(TIM2,0);/printf("rndistance:%d%d cmrn",UltrasonicWave_

43、Distance/256,UltrasonicWave_Distance%256); / LCD_DisNum(157,122,UltrasonicWave_Distance,WHITE); GPIO_SetBits(TRIG_PORT1,TRIG_PIN5); /送>10US的高電平 DelayTime_us(25); /延時(shí)20US GPIO_ResetBits(TRIG_PORT1,TRIG_PIN5); while(!GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN6); /等待高電平 TIM_Cmd(TIM2, ENABLE); /開啟時(shí)鐘 w

44、hile(GPIO_ReadInputDataBit(ECHO_PORT1,ECHO_PIN6); /等待低電平 TIM_Cmd(TIM2, DISABLE); /定時(shí)器2失能 UltrasonicWave_Distance3=TIM_GetCounter(TIM2)*5*34/2000; /0.05*340*100/200000 /計(jì)算距離 X3=UltrasonicWave_Distance3; TIM_SetCounter(TIM2,0);/printf("rndistance:%d%d cmrn",UltrasonicWave_Distance/256,UltrasonicWave_Distance%256); /

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論