自動(dòng)避障小車(chē)設(shè)計(jì)Word版_第1頁(yè)
自動(dòng)避障小車(chē)設(shè)計(jì)Word版_第2頁(yè)
自動(dòng)避障小車(chē)設(shè)計(jì)Word版_第3頁(yè)
自動(dòng)避障小車(chē)設(shè)計(jì)Word版_第4頁(yè)
自動(dòng)避障小車(chē)設(shè)計(jì)Word版_第5頁(yè)
已閱讀5頁(yè),還剩42頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、自動(dòng)避障小車(chē)技術(shù)報(bào)告前言設(shè)計(jì)背景:在科學(xué)探索和緊急搶險(xiǎn)中經(jīng)常會(huì)遇到對(duì)與一些危險(xiǎn)或人類不能直接到達(dá)的地域的探測(cè),這些就需要用機(jī)器人來(lái)完成。而在機(jī)器人在復(fù)雜地形中行進(jìn)時(shí)自動(dòng)避障是一項(xiàng)必不可少也是最基本的功能。因此,自動(dòng)避障系統(tǒng)的研發(fā)就應(yīng)運(yùn)而生。我們的自動(dòng)避障小車(chē)就是基于這一系統(tǒng)開(kāi)發(fā)而成的。隨著科技的發(fā)展,對(duì)于未知空間和人類所不能直接到達(dá)的地域的探索逐步成為熱門(mén),這就使機(jī)器人的自動(dòng)避障有了重大的意義。我們的自動(dòng)避障小車(chē)就是自動(dòng)避障機(jī)器人中的一類。自動(dòng)避障小車(chē)可以作為地域探索機(jī)器人和緊急搶險(xiǎn)機(jī)器人的運(yùn)動(dòng)系統(tǒng),讓機(jī)器人在行進(jìn)中自動(dòng)避過(guò)障礙物。目錄一、 設(shè)計(jì)目標(biāo):3二、 方案設(shè)計(jì):42.1直流調(diào)速系統(tǒng)42

2、.2檢測(cè)系統(tǒng)5三 硬件設(shè)計(jì)53.1、SPCE061A單片機(jī)最小系統(tǒng)53.1.1SPCE061A時(shí)鐘電路83.1.2PLL鎖相環(huán)93.1.3看門(mén)狗Watchdog93.1.4低電壓復(fù)位(LVR)103.1.5I/O端口103.1.6時(shí)基與定時(shí)器113.1.7SPCE061A的定時(shí)器/計(jì)數(shù)器113.1.8ADC、DAC123.2、超聲波傳感器12四 軟件設(shè)計(jì)164.1軟件設(shè)計(jì)各模塊164.2速度控制174.3障礙物檢測(cè)174.4看門(mén)狗174.5基頻中斷184.6程序設(shè)計(jì)流程圖19五:測(cè)試數(shù)據(jù)、測(cè)試結(jié)果分析及結(jié)論19程序附錄211主程序:212中斷程序243、測(cè)距程序28一、 設(shè)計(jì)目標(biāo):1. 小車(chē)從

3、無(wú)障礙地區(qū)啟動(dòng)前進(jìn),感應(yīng)前進(jìn)路線上的障礙物后,能自動(dòng)避開(kāi)障礙物。2. 根據(jù)障礙物的位置選擇下一步行進(jìn)方向,選擇左拐還是右拐,若障礙物在左邊則自動(dòng)右拐,若障礙物在右邊則左拐,若障礙物在正前方可任意選擇左拐或者是右拐,以達(dá)到避開(kāi)障礙物的目的。3. 通過(guò)利用單片機(jī)內(nèi)時(shí)鐘源的控制設(shè)定左拐和右拐的時(shí)間,從而能持續(xù)前進(jìn)。4. 為達(dá)到速度的可控性,需設(shè)置兩個(gè)獨(dú)立按鍵對(duì)小車(chē)進(jìn)行控速。二、 方案設(shè)計(jì):根據(jù)設(shè)計(jì)要求,確定如下方案:在現(xiàn)有玩具電動(dòng)車(chē)的基礎(chǔ)上,加裝超聲波傳感器,實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的運(yùn)行狀況的實(shí)時(shí)測(cè)量,并將測(cè)量數(shù)據(jù)傳送至單片機(jī)進(jìn)行處理,然后由單片機(jī)根據(jù)所檢測(cè)的各種數(shù)據(jù)實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的智能控制。這種方案能實(shí)現(xiàn)對(duì)電

4、動(dòng)車(chē)的運(yùn)動(dòng)狀態(tài)進(jìn)行實(shí)時(shí)控制,控制靈活、可靠,精度高,可滿足對(duì)系統(tǒng)的各項(xiàng)要求。2.1直流調(diào)速系統(tǒng)采用脈寬調(diào)速系統(tǒng)脈寬調(diào)速系統(tǒng)的主電路采用脈寬調(diào)制式變換器,簡(jiǎn)稱PWM變換器。脈寬調(diào)速也可通過(guò)單片機(jī)控制繼電器的閉合來(lái)實(shí)現(xiàn),但是驅(qū)動(dòng)能力有限。為順利實(shí)現(xiàn)電動(dòng)小汽車(chē)的前行與倒車(chē),本設(shè)計(jì)采用了可逆PWM變換器??赡鍼WM變換器主電路的結(jié)構(gòu)式有H型、T型等類型。我們?cè)谠O(shè)計(jì)中采用了常用的雙極式H型變換器,它是由4個(gè)三極電力晶體管和4個(gè)續(xù)流二極管組成的橋式電路。如附錄一:2.2檢測(cè)系統(tǒng)檢測(cè)系統(tǒng)主要實(shí)現(xiàn)紅外傳感器,超聲波傳感,光電傳感器對(duì)車(chē)的運(yùn)行進(jìn)行實(shí)時(shí)測(cè)量,即利用這種傳感器對(duì)電動(dòng)車(chē)的避障、位置、行車(chē)狀態(tài)進(jìn)行測(cè)量。

5、行車(chē)開(kāi)始、結(jié)束及超聲波檢測(cè):在車(chē)的開(kāi)始和結(jié)束階段,都是用紅外式的光電傳感器,當(dāng)按下此光電開(kāi)頭,小車(chē)就開(kāi)始行駛,在完成任務(wù)后,再按下此開(kāi)關(guān),小車(chē)就停止前進(jìn)。在前進(jìn)的過(guò)程中不斷的發(fā)送超聲波,并對(duì)接到的進(jìn)行處理計(jì)算。如果處理得到的結(jié)果是發(fā)現(xiàn)前面的障礙時(shí),再行進(jìn)一次距離的處理,當(dāng)距離小是40CM時(shí),讓小車(chē)倒退一段時(shí)間,再進(jìn)行避障處理,如果距離大于40CM,就直接進(jìn)避障處理。三 硬件設(shè)計(jì)3.1、SPCE061A單片機(jī)最小系統(tǒng)我們用的是凌陽(yáng)的SPCE061A單片機(jī)最小系統(tǒng)其概述如下:SPCE061A 是繼nSP系列產(chǎn)品SPCE500A等之后凌陽(yáng)科技推出的又一款16位結(jié)構(gòu)的微控制器。與SPCE500A不同的

6、是,在存儲(chǔ)器資源方面考慮到用戶的較少資源的需求以及便于程序調(diào)試等功能,SPCE061A里只內(nèi)嵌32K字的閃存(FLASH)。較高的處理速度使nSP能夠非常容易地、快速地處理復(fù)雜的數(shù)字信號(hào)。因此,與SPCE500A相比,以nSP為核心的SPCE061A微控制器是適用于數(shù)字語(yǔ)音識(shí)別應(yīng)用領(lǐng)域產(chǎn)品的一種最經(jīng)濟(jì)的選擇。 性能 􀂋 16位nSP微處理器; 􀂋 工作電壓(CPU) VDD為2.43.6V (I/O) VDDH為2.45.5V ;􀂋 CPU時(shí)鐘:0.32MHz49.152MHz ; 內(nèi)置2K字SRAM; 􀂋 內(nèi)置32K F

7、LASH; 􀂋 可編程音頻處理; 􀂋 晶體振蕩器; 􀂋 系統(tǒng)處于備用狀態(tài)下(時(shí)鐘處于停止?fàn)顟B(tài)),耗電僅為2A3.6V; 􀂋 2個(gè)16位可編程定時(shí)器/計(jì)數(shù)器(可自動(dòng)預(yù)置初始計(jì)數(shù)值); 􀂋 2個(gè)10位DAC(數(shù)-模轉(zhuǎn)換)輸出通道; 􀂋 32位通用可編程輸入/輸出端口; 􀂋 14個(gè)中斷源可來(lái)自定時(shí)器A / B,時(shí)基,2個(gè)外部時(shí)鐘源輸入,鍵喚醒; 􀂋 具備觸鍵喚醒的功能; 􀂋 使用凌陽(yáng)音頻編碼SACM_S240方式(2.4K位/秒),能容納2

8、10秒的語(yǔ)音數(shù)據(jù); 􀂋 鎖相環(huán)PLL振蕩器提供系統(tǒng)時(shí)鐘信號(hào); 􀂋 32768Hz實(shí)時(shí)時(shí)鐘; 􀂋 7通道10位電壓模-數(shù)轉(zhuǎn)換器(ADC)和單通道聲音模-數(shù)轉(zhuǎn)換器; 􀂋 聲音模-數(shù)轉(zhuǎn)換器輸入通道內(nèi)置麥克風(fēng)放大器和自動(dòng)增益控制(AGC)功能; 􀂋 具備串行設(shè)備接口; 􀂋 具有低電壓復(fù)位(LVR)功能和低電壓監(jiān)測(cè)(LVD)功能; 內(nèi)置在線仿真電路ICE(In- Circuit Emulator)接口; 􀂋 具有保密能力; 具有WatchDog功能;16位nSP微處理器硬件結(jié)構(gòu)圖

9、3.1.1SPCE061A時(shí)鐘電路SPCE061A時(shí)鐘電路采用晶體振蕩器。下圖為SPCE061A時(shí)鐘電路的接線圖。外接晶振采用32768Hz。3.1.2PLL鎖相環(huán)PLL電路的作用是將系統(tǒng)提供的實(shí)時(shí)時(shí)鐘的基頻(32768Hz)進(jìn)行倍頻,輸出系統(tǒng)時(shí)鐘Fosc3.1.3看門(mén)狗WatchdogSPCE061A的清狗周期為0.75S;清看門(mén)狗操作寄存器:P_Watchdog_Clear(0x7012H)清狗操作:在每個(gè)0.75S的清狗周期里P_Watchdog_Clear寫(xiě)入0x0001。3.1.4低電壓復(fù)位(LVR)通過(guò)某種方式,使單片機(jī)內(nèi)存各寄存器的值變?yōu)槌跏嫉牟僮鞣Q為復(fù)位。SPCE061A的復(fù)位

10、方式為低電壓復(fù)位。3.1.5I/O端口OA口:IOA0IOA6:7路普通AD輸入端口,IOA0IOA7:觸鍵喚醒功能 IOB口:外部中斷輸入,串行接口、PWM輸出等復(fù)用端口3.1.6時(shí)基與定時(shí)器時(shí)基信號(hào)可提供常用的、現(xiàn)成的頻率信號(hào),完成部分定時(shí)器的功能3.1.7SPCE061A的定時(shí)器/計(jì)數(shù)器遞增計(jì)數(shù)方式,自動(dòng)重載定時(shí)器/計(jì)數(shù)器初始值,輸出4位可調(diào)脈寬比PWM信號(hào),溢出頻率/2的方波輸出,多種時(shí)鐘源輸入。3.1.8ADC、DACSPCE061A的特色是其強(qiáng)大靈活的語(yǔ)音功能;而單片機(jī)對(duì)語(yǔ)音處理的支持,除了其處理能力外,還有片內(nèi)集成的ADC、DAC;特別是集成有AGC電路的MIC通道。ADC轉(zhuǎn)換過(guò)

11、程:3.2、超聲波傳感器1基本特性與參數(shù)指標(biāo) 超聲波傳感器諧振頻率:40KHz; 模組傳感器工作電壓:4.5V9V 模組接口電壓:4.5V5.5V2主要功能三種測(cè)距模式選擇跳線J1(短距、中距、可調(diào)距): 短距:20cm100cm左右(根據(jù)被測(cè)物表面材料決定),精度1cm; 中距:70cm400cm左右(根據(jù)被測(cè)物表面材料決定); 可調(diào):范圍由可調(diào)節(jié)參數(shù)確定,當(dāng)調(diào)節(jié)在合適的值時(shí),最遠(yuǎn)測(cè)距700cm左右;3結(jié)構(gòu)示意圖 一般應(yīng)用時(shí),只需要用兩條10PIN排線把J5與SPCE061A的IOB口低八位連接,J4與IOB口高八位連接,同時(shí)設(shè)置好J1、J2跳線就完成硬件的連接了。不同測(cè)距模式的選擇只需改變

12、測(cè)距模式跳線J1的連接方法即可。模組工作的性能與被測(cè)物表面材料有很大關(guān)系,如毛料、布料對(duì)超聲波的反射率很小,會(huì)嚴(yán)重影響測(cè)量結(jié)果實(shí)物圖:J1為選擇工作模式,J2選擇電源接口4電路原理圖介紹:超聲波諧振頻率調(diào)理電路由單片機(jī)產(chǎn)生40KHz的方波,并通過(guò)模組接口(J4)送到模組的CD4049,而后面的CD4049則對(duì)40KHz頻率信號(hào)進(jìn)行調(diào)理,以使超聲波傳感器產(chǎn)生諧振。超聲波回波接收處理電路超聲波接收處理部分電路前級(jí)采用NE5532構(gòu)成10000倍放大器,對(duì)接收信號(hào)進(jìn)行放大;后級(jí)采用LM311比較器對(duì)接收信號(hào)進(jìn)行調(diào)整,比較電壓為L(zhǎng)M311的3管腳的輸入,可由J1跳線選擇不同的比較電壓以選擇不同的測(cè)距模

13、式。測(cè)距程序流程圖超聲波測(cè)距的功能函數(shù)流程圖如圖。用戶只需進(jìn)行六次測(cè)距操作,這六次的測(cè)量結(jié)果需要經(jīng)過(guò)處理后才可得到最終的測(cè)距返回值,然后將返回值化成距離。四 軟件設(shè)計(jì)4.1軟件設(shè)計(jì)各模塊void RunTime2Hz(void);設(shè)置2HZ基頻中斷向量函數(shù)。void OffTime2Hz(void);清2HZ基頻中斷向量函數(shù)。void Clear_WatchDog(void);清看門(mén)狗函數(shù)unsigned int SP_GetCh(void);取鍵值函數(shù)void delay2s(int timer)可調(diào)的延遲函數(shù)4.2速度控制速度控制用TIMERA的PWM輸出控制,當(dāng)它前進(jìn)時(shí)設(shè)PWM為12/1

14、6,當(dāng)它轉(zhuǎn)彎時(shí)設(shè)為8/16。其代碼為:*P_TimerA_Ctrl=0x0333;*P_TimerA_Data=0xff9f; 4.3障礙物檢測(cè)用TIMERB的TONT輸出給超聲波提供出射頻率,并給它延遲一段時(shí)間,發(fā)射完時(shí),清TIMERB,讓它工作在計(jì)時(shí)方式,當(dāng)計(jì)到10000時(shí)!沒(méi)有收到回波,則說(shuō)明前在無(wú)障礙。如果有收到回波則說(shuō)明有障礙。4.4看門(mén)狗看門(mén)狗只要一定時(shí)間給其喂狗,就可以保證程序不會(huì)跑飛,跑飛就會(huì)自動(dòng)復(fù)位。其代碼就只有一句:*P_Watchdog_Clear = 0x0001;4.5基頻中斷采用2HZ的基頻中斷,實(shí)現(xiàn)實(shí)時(shí)控制;一次中斷, 中斷時(shí)間為0。5S,其代碼如下: P_INT

15、_Ctrl = r1; INT IRQ; /開(kāi)中斷4.6程序設(shè)計(jì)流程圖五:測(cè)試數(shù)據(jù)、測(cè)試結(jié)果分析及結(jié)論測(cè)試方法與儀器:1.測(cè)試儀器 測(cè)試儀器包括數(shù)字萬(wàn)用表、信號(hào)發(fā)生器、示波器、直流穩(wěn)壓電源等。2.測(cè)試方法 數(shù)字萬(wàn)用表主要用來(lái)測(cè)試各個(gè)IO口的狀態(tài);信號(hào)發(fā)生器與示波器用于測(cè)試超聲波傳感器信號(hào)的接收與傳輸;試驗(yàn)測(cè)試能不能完成固定避障。結(jié)論:經(jīng)過(guò)了我們的努力,我們基本上能完上避障的功能!當(dāng)然我們之后還有很長(zhǎng)的路要走,在之后我們會(huì)自己做一個(gè)最小系統(tǒng),此次我們更側(cè)重于軟件方面的設(shè)計(jì)。同時(shí)我們還要設(shè)計(jì)更多的外圍電路,實(shí)現(xiàn)更多的功能。其中包括:紅外光電檢測(cè)用來(lái)檢測(cè)旁邊的物體;還有紅外遙控器,用來(lái)控制小車(chē)的運(yùn)行

16、與停止;再加一個(gè)顯示器,用來(lái)顯示路程和時(shí)間等等。附錄一: 程序附錄:程序設(shè)計(jì)中包括:主程序,測(cè)距程序,中斷程序組成;1主程序:#include "SPCE061A.h"#include "ceju.h"unsigned char INTflag; /定時(shí)標(biāo)識(shí)unsigned int sum; /2hz 計(jì)數(shù)器 1次為0。5秒void RunTime2Hz(void);void OffTime2Hz(void);void Clear_WatchDog(void);void delay2s(int timer) /設(shè)置基頻為2HZ的中斷,就是一次定時(shí)0。5S

17、 sum=timer; RunTime2Hz(); /運(yùn)行中斷 while(!INTflag) Clear_WatchDog();/清看門(mén)狗 INTflag = 0; OffTime2Hz(); /結(jié)束中斷void delay2s(int timer);int main(void)unsigned int Back_data; /裝距離*P_IOB_Dir=0x1f00;/初始化IOB,IOB812同向輸出*P_IOB_Attrib=0x1f00;*P_IOB_Data=0x0000;INTflag = 0;Clear_WatchDog(); /清看門(mén)狗while(1) *P_TimerA_C

18、trl=0x0373; *P_TimerA_Data=0xff9f; /設(shè)前進(jìn)PWM這14/16Back_data = measure_Times(0);/測(cè)距if(Back_data=0) /判斷是否為0,為0則為前進(jìn) *P_TimerA_Ctrl=0x0373; *P_TimerA_Data=0xff9f;else if(Back_data<=40) /判斷是否小于40CM,小于則進(jìn)行倒車(chē)*P_TimerA_Ctrl=0x006; *P_IOB_Data=0x1000; /倒車(chē)delay2s(0);*P_IOB_Data=0x0100; /前進(jìn)delay2s(3);else if(B

19、ack_data<=100) /判斷是否小于1M,小于則進(jìn)行避障 *P_TimerA_Ctrl=0x0333; *P_IOB_Data=0x0400; /左轉(zhuǎn) delay2s(1); *P_IOB_Data=0x0800; /右轉(zhuǎn) delay2s(1); *P_IOB_Data=0x0400; /左轉(zhuǎn) delay2s(1); *P_TimerA_Ctrl=0x006; /停止PWM運(yùn)行 *P_IOB_Data=0x0000;/停車(chē) while(1) ; else Clear_WatchDog(); 2中斷程序:#include "SPCE061A.h"#include

20、 "ceju.h"void IRQ3(void)_attribute_(ISR); /IRQ中斷服務(wù)程序void IRQ3(void)*P_INT_Clear = 0x0100;/EXT1_IRQ_ult();/調(diào)用超聲波測(cè)距的外部中斷服務(wù)程序.TEXT.include SPCE061A.inc;.external _sum;.external _INTflag;.public _IRQ5;_IRQ5: /定時(shí)3秒的中斷程序push r1,r4 to sp;r1 =0x0008; test r1,P_INT_Ctrl;jnzL_4Hz; / Timer A FIQ entr

21、ence r1 = 0x0004; P_INT_Clear = r1; /清中斷 r1 = _sum /取時(shí)基信號(hào)量 r1 += 1; cmp r1,4; je loop0; _sum=r1 /保存時(shí)基信號(hào)量 pop r1,r4 from sp; reti; loop0: r1 = 0x0001; _INTflag = r1; /設(shè)置中斷標(biāo)識(shí) r1 = 0 _sum = r1pop r1,r4 from sp; reti; L_4Hz: r1 = 0x0008; P_INT_Clear = r1; /清中斷 pop r1,r4 from sp;reti;.external _sum;.incl

22、ude SPCE061A.inc;.CODE.public _Clear_WatchDog;_Clear_WatchDog: .PROCR1=0x0001; P_Watchdog_Clear=R1; /清看門(mén)狗retf;.ENDP.public _RunTime2Hz; /初始化中斷為2HZ定時(shí)中斷源_RunTime2Hz: .procr1 = 0x0004; P_INT_Ctrl = r1; INT IRQ; /開(kāi)中斷 retf .endp;.public _OffTime2Hz;_OffTime2Hz: .proc r1 = P_INT_Ctrl r1 &= 0xfffb; P_I

23、NT_Ctrl = r1; r1 = 0x0000 _sum = r1; retf; .endp;3、測(cè)距程序#include "SPCE061A.h"#define LONG_SEND_TIMER1000/中距測(cè)距時(shí)的40KHz信號(hào)發(fā)射時(shí)長(zhǎng)#define LONG_SEND_TIMER23000/中距測(cè)距的補(bǔ)充測(cè)距時(shí)的40KHz信號(hào)發(fā)射時(shí)長(zhǎng)#define LONG_WAIT_DELAY600/中距測(cè)距的防余波干擾延時(shí)時(shí)長(zhǎng)#define LONG_WAIT_DELAY21500/中距測(cè)距的補(bǔ)充測(cè)距時(shí)的防余波干擾延時(shí)時(shí)長(zhǎng)#define LONG_RES_ADD0x00B0/中

24、距測(cè)距的結(jié)果補(bǔ)償值#define LONG_RES_ADD20x0220/中距測(cè)距的補(bǔ)充測(cè)距時(shí)的結(jié)果補(bǔ)償值#define LOW_SEND_TIMER250/短距測(cè)距時(shí)的40KHz信號(hào)發(fā)射時(shí)長(zhǎng)#define LOW_SEND_TIMER21000/短距測(cè)距的補(bǔ)充測(cè)距時(shí)的40KHz信號(hào)發(fā)射時(shí)長(zhǎng)#define LOW_WAIT_DELAY180/短距測(cè)距的防余波干擾延時(shí)時(shí)長(zhǎng)#define LOW_WAIT_DELAY2400/短距測(cè)距的補(bǔ)充測(cè)距時(shí)的防余波干擾延時(shí)時(shí)長(zhǎng)#define LOW_RES_ADD0x0034/短距測(cè)距的結(jié)果補(bǔ)償值#define LOW_RES_ADD20x00B0/短距測(cè)距

25、的補(bǔ)充測(cè)距時(shí)的結(jié)果補(bǔ)償值unsigned int Counter_buf;/超聲波測(cè)距當(dāng)中,用于保存TimerB計(jì)數(shù)的變量,相當(dāng)于時(shí)長(zhǎng)unsigned int EXT1_IRQ_flag=0;/外部中斷標(biāo)志變量,用于EXT1的IRQ中斷程序和測(cè)距程序同步void Delay_ult(unsigned int timers)unsigned int i;for(i=0;i<timers;i+)_asm("nop");unsigned int Resoult_ult(unsigned int Counter) /計(jì)算距離unsigned int uiTemp;unsign

26、ed long ulTemp;ulTemp = (unsigned long)Counter*33500; /*以聲音的速度,以厘米為單位ulTemp = ulTemp/196608; ulTemp = ulTemp>>1;/除二uiTemp = (unsigned int)ulTemp;return uiTemp;unsigned int measure2_ult(unsigned int type);unsigned int measure_ult(unsigned int type) / 超聲波測(cè)距模組的測(cè)距程序,完成一次測(cè)距unsigned int Exit_flag =

27、1;unsigned int uiTemp;unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;unsigned int uiSystem_Clock;uiSystem_Clock = *P_SystemClock;/將當(dāng)前的系統(tǒng)時(shí)鐘設(shè)置暫時(shí)保存起來(lái)*P_SystemClock = 0x0088;/將系統(tǒng)時(shí)鐘設(shè)置為49MHz,分頻比為1,強(qiáng)振模式if(type)/根據(jù)type即測(cè)距類型,選擇不同的測(cè)距參數(shù)uiSend_Timer = LONG_SEND_TIMER;uiWait_Timer = LONG

28、_WAIT_DELAY;uiRes_Add = LONG_RES_ADD;elseuiSend_Timer = LOW_SEND_TIMER;uiWait_Timer = LOW_WAIT_DELAY;uiRes_Add = LOW_RES_ADD;*P_TimerB_Data = 0xfed2;*P_TimerB_Ctrl = 0x03c0;/發(fā)40KHz的信號(hào)觸發(fā)超聲波傳感器Delay_ult(uiSend_Timer);/等待發(fā)送*P_TimerB_Ctrl = 0x0006;/關(guān)定時(shí)器B*P_TimerB_Data = 0x0000;*P_TimerB_Ctrl = 0x0001;/T

29、rB 工作在192KHz頻率while(*P_TimerB_Data<uiWait_Timer)/等待一定時(shí)間后再打開(kāi)TimerA的計(jì)數(shù)(來(lái)源于EXT1)/以避開(kāi)余波的干擾*P_Watchdog_Clear = 0x0001;*P_INT_Clear = 0x0100;/開(kāi)中斷前先清中斷*P_INT_Ctrl = *P_INT_Ctrl_New|0x0100;*P_INT_Clear = 0xffff;/清除中斷發(fā)生標(biāo)志_asm("IRQ ON");/打開(kāi)總中斷使能EXT1_IRQ_flag = 0;/TimerA的溢出中斷的標(biāo)志變量置0while(Exit_flag

30、)if(EXT1_IRQ_flag=1)/當(dāng)該變量在timerA的FIQ中斷中被置1時(shí)表示接收到了回波Exit_flag = 0;/退出標(biāo)示Counter_buf = Counter_buf+uiRes_Add;/計(jì)數(shù)值加上一定的調(diào)整數(shù)據(jù)uiResoult = Resoult_ult(Counter_buf);/對(duì)計(jì)數(shù)值進(jìn)行處理,得出距離值if(*P_TimerB_Data>10000)/如計(jì)數(shù)值大于10000,表示超時(shí)Exit_flag = 0;uiResoult = measure2_ult(type);/再進(jìn)行一次補(bǔ)充的測(cè)距,將會(huì)加長(zhǎng)40KHz信號(hào)發(fā)射的量*P_TimerB_Ctr

31、l = 0x0006;/停止定時(shí)器BuiTemp = *P_TimerB_Data;*P_Watchdog_Clear = 0x0001;*P_INT_Ctrl = *P_INT_Ctrl_New&(0x0100);/關(guān)掉外部中斷_asm("IRQ OFF");/關(guān)掉總中斷*P_SystemClock = uiSystem_Clock;/恢復(fù)系統(tǒng)時(shí)鐘的設(shè)置return uiResoult;void EXT1_IRQ_ult(void) /超聲波測(cè)距模組的測(cè)距程序的EXT1中斷服務(wù)程序Counter_buf = *P_TimerB_Data;*P_TimerB_Ctr

32、l = 0x0006;*P_INT_Ctrl = *P_INT_Ctrl_New&(0x0100);/關(guān)掉外部中斷*P_INT_Clear = 0xffff;/清除中斷發(fā)生標(biāo)志EXT1_IRQ_flag = 1;/通知測(cè)距程序,外部中斷已發(fā)生unsigned int measure2_ult(unsigned int type) /補(bǔ)充進(jìn)行一次遠(yuǎn)距的測(cè)量,以保證能夠獲取測(cè)量結(jié)果unsigned int Exit_flag = 1;unsigned int uiResoult;unsigned int uiSend_Timer,uiWait_Timer,uiRes_Add;*P_Time

33、rB_Ctrl = 0x0006;*P_INT_Ctrl = *P_INT_Ctrl_New&(0x0100);/關(guān)掉外部中斷_asm("IRQ OFF");/關(guān)掉總中斷*P_INT_Clear = 0xffff;/清除掉中斷發(fā)生標(biāo)志if(type)/根據(jù)type即測(cè)距類型,選擇不同的測(cè)距參數(shù)uiSend_Timer = LONG_SEND_TIMER2;uiWait_Timer = LONG_WAIT_DELAY2;uiRes_Add = LONG_RES_ADD2;elseuiSend_Timer = LOW_SEND_TIMER2;uiWait_Timer =

34、 LOW_WAIT_DELAY2;uiRes_Add = LOW_RES_ADD2;*P_TimerB_Data = 0xfed2;*P_TimerB_Ctrl = 0x03c0;Delay_ult(uiSend_Timer);*P_TimerB_Ctrl = 0x0006;*P_TimerB_Data = 0x0000;*P_TimerB_Ctrl = 0x0001;while(*P_TimerB_Data<uiWait_Timer)/等待一定時(shí)間,以避開(kāi)余波的干擾*P_Watchdog_Clear = 0x0001;*P_INT_Ctrl = *P_INT_Ctrl_New|0x01

35、00;/打開(kāi)外部中斷*P_INT_Clear = 0xffff;/清除中斷發(fā)生標(biāo)志_asm("IRQ ON");/打開(kāi)總中斷使能EXT1_IRQ_flag = 0;/TimerA的溢出中斷的標(biāo)志變量置0while(Exit_flag)if(EXT1_IRQ_flag=1)/當(dāng)該變量在timerA的FIQ中斷中被置1時(shí)表示接收到了回波Exit_flag = 0;/exitCounter_buf = Counter_buf+uiRes_Add;/計(jì)數(shù)值加上一定的調(diào)整數(shù)據(jù)uiResoult = Resoult_ult(Counter_buf);/對(duì)計(jì)數(shù)值進(jìn)行處理,得出距離值if(*P_TimerB_Data>10000)/如計(jì)數(shù)值大于1

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論