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

下載本文檔

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

文檔簡(jiǎn)介

自動(dòng)避障小車(chē)

技術(shù)報(bào)告

前百

設(shè)計(jì)背景:在科學(xué)摸索和緊急搶險(xiǎn)中經(jīng)常會(huì)遇到對(duì)與某些危

險(xiǎn)或人類(lèi)不能直接到達(dá)地區(qū)探測(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ì)于未知空間和人類(lèi)所不能直接到達(dá)地區(qū)摸索逐漸成為

熱門(mén),這就使機(jī)器人自動(dòng)避障有了重大意義。咱們自動(dòng)避障

小車(chē)就是自動(dòng)避障機(jī)器人中一類(lèi)。自動(dòng)避障小車(chē)可以作為地

區(qū)摸索機(jī)器人和緊急搶險(xiǎn)機(jī)器人運(yùn)動(dòng)系統(tǒng),讓機(jī)器人在行進(jìn)

中自動(dòng)避過(guò)障礙物。

目錄

一、設(shè)計(jì)目的:.................................3

二、方案設(shè)計(jì):....................................................4

2.1直流調(diào)速系統(tǒng).................................錯(cuò)誤!未定義書(shū)簽。

2.2檢測(cè)系統(tǒng).....................................錯(cuò)誤!未定義書(shū)簽。

三硬件設(shè)計(jì)..............................................錯(cuò)誤!未定義書(shū)簽。

3.1.SPCE061A單片機(jī)最小系統(tǒng).............................................5

3.1.1.SPCE061A時(shí)鐘電路.................................................8

3.1.2.PLL鎖相環(huán).........................................................9

3.1.3.看門(mén)狗Watchdog.........................................................................................................9

3.1.4.低電壓復(fù)位(LVR)................................................................................................10

3.1.5.I/O端口...........................................................10

3.1.6.時(shí)基與定期器......................................................11

3.1.7.SPCE061A定期器/計(jì)數(shù)器...........................................II

3.1.8.ADC.DAC......................................................................................................................12

3.2.超聲波傳感器........................................................12

四軟件設(shè)計(jì).............................................錯(cuò)誤!未定義書(shū)簽。

4.1軟件設(shè)計(jì)各模塊...............................錯(cuò)誤!未定義書(shū)簽。

4.2速度控制.....................................錯(cuò)誤!未定義書(shū)簽。

4.3障礙物檢測(cè)...................................錯(cuò)誤!未定義書(shū)簽。

4.4看門(mén)狗.......................................錯(cuò)誤!未定義書(shū)簽。

4.5基頻中斷.....................................錯(cuò)誤!未定義書(shū)簽。

4.6程序設(shè)計(jì)流程圖...............................錯(cuò)誤!未定義書(shū)簽。

五:測(cè)試數(shù)據(jù)、測(cè)試成果分析及結(jié)論........................................19

程序附錄.................................................錯(cuò)誤!未定義書(shū)簽。

1.主程序:.....................................................21

2.中斷程序.....................................................24

3.測(cè)距程序28

1.一、設(shè)計(jì)目的:

2.小車(chē)從無(wú)障礙地區(qū)啟動(dòng)邁進(jìn),感應(yīng)邁進(jìn)路線(xiàn)上障礙物后,

能自動(dòng)避開(kāi)障礙物。

3.依照障礙物位置選取下一步行進(jìn)方向,選取左拐還是右拐,

若障礙物在左邊則自動(dòng)右拐,若障礙物在右邊則左拐,若

障礙物在正前方可任意選取左拐或者是右拐,以達(dá)到避開(kāi)

障礙物目。

通過(guò)運(yùn)用單片機(jī)內(nèi)時(shí)鐘源控制設(shè)定左拐和右拐時(shí)間,從而能

持續(xù)邁進(jìn)。

為達(dá)到速度可控性,需設(shè)立兩個(gè)獨(dú)立按鍵對(duì)小車(chē)進(jìn)行控速。

二、方案設(shè)計(jì):

依照設(shè)計(jì)規(guī)定,擬定如下方案:在既有玩具電動(dòng)車(chē)基本上,

加裝超聲波傳感器,實(shí)現(xiàn)對(duì)電動(dòng)車(chē)運(yùn)營(yíng)狀況實(shí)時(shí)測(cè)量,并將

測(cè)量數(shù)據(jù)傳送至單片機(jī)進(jìn)行解決,然后由單片機(jī)依照所檢測(cè)

各種數(shù)據(jù)實(shí)現(xiàn)對(duì)電動(dòng)車(chē)智能控制。

這種方案能實(shí)現(xiàn)對(duì)電動(dòng)車(chē)運(yùn)動(dòng)狀態(tài)進(jìn)行實(shí)時(shí)控制,控制靈

活、可靠,精度高,可滿(mǎn)足對(duì)系統(tǒng)各項(xiàng)規(guī)定。

2.1直流調(diào)速系統(tǒng)

采用脈寬調(diào)速系統(tǒng)

脈寬調(diào)速系統(tǒng)主電路采用脈寬調(diào)制式變換器,簡(jiǎn)稱(chēng)

PWM變換器。

脈寬調(diào)速也可通過(guò)單片機(jī)控制繼電器閉合來(lái)實(shí)現(xiàn),但是驅(qū)動(dòng)

能力有限。為順利實(shí)現(xiàn)電動(dòng)小汽車(chē)前行與倒車(chē),本設(shè)計(jì)采用

了可逆PWM變換器??赡鍼WM變換器主電路構(gòu)造式有H

型、T型等類(lèi)型。咱們?cè)谠O(shè)計(jì)中采用了慣用雙極式H型變換

器,它是由4個(gè)三極電力晶體管和4個(gè)續(xù)流二極管構(gòu)成橋式

電路。如附錄一:

2.2檢測(cè)系統(tǒng)

檢測(cè)系統(tǒng)重要實(shí)現(xiàn)紅外傳感器,超聲波傳感,光電傳感器

對(duì)車(chē)運(yùn)營(yíng)進(jìn)行實(shí)時(shí)測(cè)量,即運(yùn)用這種傳感器對(duì)電動(dòng)車(chē)避障、

位置、行車(chē)狀態(tài)進(jìn)行測(cè)量。

行車(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ì)算。如果解決得到成果是發(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位構(gòu)造微控制器。與SPCE500A不同是,在存儲(chǔ)

器資源方面考慮到顧客較少資源需求以及便于程序調(diào)試等

功能,SPCE061A里只內(nèi)嵌32K字閃存(FLASH)。較高解決速

度使nSi,可以非常容易地、迅速地解決復(fù)雜數(shù)字信號(hào)。

因而,與SPCE500A相比,以u(píng)'nSPTM為核心SPCE061A微控制

器是合用于數(shù)字語(yǔ)音辨認(rèn)應(yīng)用領(lǐng)域產(chǎn)品一種最經(jīng)濟(jì)選取。

性能

□16位u'nSi微解決器;

□工作電壓(CPU)VDD為2.4~3.6V(I/O)VDDH為2.4~5.5V;

□CPU時(shí)鐘:0.32MHz~49.152MHz;

內(nèi)置2K字SRAM;

□內(nèi)置32KFLASH;

□可編程音頻解決;

□晶體振蕩器;

□系統(tǒng)處在備用狀態(tài)下(時(shí)鐘處在停止?fàn)顟B(tài)),耗電僅為2

u;

□2個(gè)16位可編程定期器/計(jì)數(shù)器(可自動(dòng)預(yù)置初始計(jì)數(shù)值);

□2個(gè)10位DAC(數(shù)-模轉(zhuǎn)換)輸出通道;

□32位通用可編程輸入/輸出端口;

□14個(gè)中斷源可來(lái)自定期器A/B,時(shí)基,2個(gè)外部時(shí)鐘源

輸入,鍵喚醒;

□具備觸鍵喚醒功能;

□使用凌陽(yáng)音頻編碼SACM_S240方式(2.4K位/秒),能容納

210秒語(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)置在線(xiàn)仿真電路ICE(In-CircuitEmulator)接口;

具備保密能力;

具備WatchDog功能;

16位u'nSFM微解決器硬件構(gòu)造圖

3.1.1.SPCE06IA時(shí)鐘電路

SPCE061A時(shí)鐘電路采用晶體振蕩器。下圖為SPCE061A時(shí)

鐘電路接線(xiàn)圖。外接晶振采用32768Hz。

3.1.2.PLL鎖相環(huán)

PLL電路作用是將系統(tǒng)提供實(shí)時(shí)時(shí)鐘基頻(32768Hz)進(jìn)行倍

頻,輸出系統(tǒng)時(shí)鐘Fosc

鎖相環(huán)(PLL)Fosc

32768Hz晶振系統(tǒng)時(shí)鐘發(fā)生器(默認(rèn)值24.576MHz)

頻率:20.48M,24.576M,

32.768M,40.96M,49.152M

1""X"Z1

b7b6b5

系統(tǒng)M鐘選頻P_SystemClock單元的第7,6,5位

3.1.3.看門(mén)狗Walchdog

SPCE061A清狗周期為0.75S;清看門(mén)狗操作寄存器:

P_Watchdog_Clear(0x7012H)

清狗操作:在每個(gè)0.75S清狗周期里P_Watchdog_Clear寫(xiě)入

0x0001o

3.14低電壓復(fù)位(LVR)

通過(guò)某種方式,使單片機(jī)內(nèi)存各寄存器值變?yōu)槌跏疾僮鞣Q(chēng)為

復(fù)位。SPCE061A復(fù)位方式為低電壓復(fù)位。

3.1.5.I/O端口

OA口:

IOAO-IOA6:7路普通AD輸入端口,IOAO-IOA7:觸鍵

喚醒功能

IOB口:

外部中斷輸入,串行接口、PWM輸出等復(fù)用端口

3.1.6.時(shí)基與定期器

時(shí)基信號(hào)可提供慣用、現(xiàn)成頻率信號(hào),完畢某些定期器功能

3.1.7.SPCE061A定期器/計(jì)數(shù)器

遞增計(jì)數(shù)方式,自動(dòng)重載定期器/計(jì)數(shù)器初始值,輸出4位可

調(diào)脈寬比PWM信號(hào),溢出頻率/2方波輸出,各種時(shí)鐘源輸

入。

3.1.8.ADC.DAC

SPCE061A特色是其強(qiáng)大靈活語(yǔ)音功能;而單片機(jī)對(duì)語(yǔ)音解

決支持,除了其解決能力外,尚有片內(nèi)集成ADC、DAC;特

別是集成有AGC電路MIC通道。

ADC轉(zhuǎn)換過(guò)程:

―啟動(dòng)自動(dòng)方式RDY=OI

SAR=1000000000B

DAC0輸山VdacO

與Vin逐次比較

比較結(jié)束,RI)Y=1

結(jié)果存入結(jié)果寄存器

等待讀取結(jié)果寄存器

3.2.超聲波傳感器

1.基本特性與參數(shù)指標(biāo)

超聲波傳感器諧振頻率:40KHz;

模組傳感器工作電壓:4.5V~9V

模組接口電壓:4.5V~5.5V

2.重要功能

三種測(cè)距模式選取跳線(xiàn)J1(短距、中距、可調(diào)距):

短距:20cnT100cm左右(依照被測(cè)物表面材料決定),精度

1cm;

中距:70cnT400cm左右(依照被測(cè)物表面材料決定);

可調(diào):范疇由可調(diào)節(jié)參數(shù)擬定,當(dāng)調(diào)節(jié)在適當(dāng)值時(shí),最遠(yuǎn)

測(cè)距700cm左右;

3.構(gòu)造示意圖

超聲波諧振載波調(diào)節(jié)電路

發(fā)射探頭

數(shù)蛆

接口

超聲波回波接受處理電路接收探頭

普通應(yīng)用時(shí),只需要用兩條10PIN排線(xiàn)把J5與SPCE061AI0B

口低八位連接,J4與IOB口高八位連接,同步設(shè)立好JLJ2跳

線(xiàn)就完畢硬件連接了。不同測(cè)距模式選取只需變化測(cè)距模式

跳線(xiàn)J1連接辦法即可。模組工作性能與被測(cè)物表面材料有很

大關(guān)系,如毛料、布料對(duì)超聲波反射率很小,會(huì)嚴(yán)重影響測(cè)

量成果

實(shí)物圖:

J1為選取工作模式,J2選取電源接口

4.電路原理圖簡(jiǎn)介:

超聲波諧振頻率調(diào)理電路

由單片機(jī)產(chǎn)生40KHz方波,并通過(guò)模組接口(J4)送到模組

CD4049,而背面CD4049則對(duì)40KHz頻率信號(hào)進(jìn)行調(diào)理,以

使超聲波傳感器產(chǎn)生諧振。

超聲波回波接受解決電路

VCC.5

超聲波接受解決某些電路前級(jí)采用NE5532構(gòu)成10000倍放

大器,對(duì)接受信號(hào)進(jìn)行放大;后級(jí)采用LM311比較器對(duì)接受

信號(hào)進(jìn)行調(diào)節(jié),匕較電壓為L(zhǎng)M3113管腳輸入,可由J1跳線(xiàn)

選取不同比較電壓以選取不同測(cè)距模式。

測(cè)距程序流程圖

超聲波測(cè)距功能函數(shù)流程圖如圖。顧客只需進(jìn)行六次測(cè)距操

作,這六次測(cè)量成果需要通過(guò)解決后才可得到最后測(cè)距返回

值,然后將返回值化成距離。

軟件設(shè)計(jì)

4.1軟件設(shè)計(jì)各模塊

voidRunTime2Hz(void);

設(shè)立2HZ基頻中斷向量函數(shù)。

voidOffTime2Hz(void);

清2Hz基頻中斷向量函數(shù)。

voidClear_WatchDog(void);

清看門(mén)狗函數(shù)

unsignedintSP_GetCh(void);

取鍵值函數(shù)

voiddelay2s(inttimer)

可調(diào)延遲函數(shù)

4.2速度控制

速度控制用TIMERAPWM輸出控制,當(dāng)它邁進(jìn)時(shí)設(shè)PWM為

12/16,當(dāng)它轉(zhuǎn)彎時(shí)設(shè)為8/16o其代碼為:

*P_TimerA_Ctrl=0x0333;

*P_TimerA_Data=0xff9f;

4.3障礙物檢測(cè)

用TIMERBTONT輸出給超聲波提供出射頻率,并給它延遲

一段時(shí)間,發(fā)射完時(shí),清TIMERB,讓它工作在計(jì)時(shí)方式,當(dāng)

計(jì)到10000時(shí)!沒(méi)有收到回波,則闡明前在無(wú)障礙。如果有

收到同波則闡明有障礙。

4.4看門(mén)狗

看門(mén)狗只要一定期間給其喂狗,就可以保證程序不會(huì)跑飛,

跑飛就會(huì)自動(dòng)復(fù)位。其代碼就只有一句:

*PWatchdogClear=0x0001;

4.5基頻中斷

采用2Hz基頻中斷,實(shí)現(xiàn)實(shí)時(shí)控制;一次中斷,中斷時(shí)間為

0o5S,其代碼如卜:

[P_INT_Ctrl]=rl;

INTIRQ;〃開(kāi)中斷

4.6程序設(shè)計(jì)流程圖

五:測(cè)試數(shù)據(jù)、測(cè)試成果分析及結(jié)論

測(cè)試辦法與儀器:

1.測(cè)試儀器

測(cè)試儀器涉及數(shù)字萬(wàn)用表、信號(hào)發(fā)生器、示波器、直流

穩(wěn)壓電源等。

2.測(cè)試辦法

數(shù)字萬(wàn)用表重要用來(lái)測(cè)試各個(gè)10口狀態(tài);

信號(hào)發(fā)生器與示波器用于測(cè)試超聲波傳感器信號(hào)接受

與傳播;

實(shí)驗(yàn)測(cè)試能不能完畢固定避障。

結(jié)論:

通過(guò)了咱們努力,咱們基本上能完上避障功能!固然咱們之

后尚有很長(zhǎng)路要走,

在之后咱們會(huì)自己做一種最小系統(tǒng),本次咱們更側(cè)重于軟件

方面設(shè)計(jì)。同步咱們還要設(shè)計(jì)更多外圍電路,實(shí)現(xiàn)更多功能。

其中涉及:紅外光電檢測(cè)用來(lái)檢測(cè)旁邊物體:尚有紅外遙控

器,用來(lái)控制小車(chē)運(yùn)營(yíng)與停止;再加一種顯示屏,用來(lái)顯示

路程和時(shí)間等等。

附錄一:

程序附錄:

程序設(shè)計(jì)中涉及:主程序,測(cè)距程序,中斷程序構(gòu)成;

1.主程序:

include"SPCE06IA.hH

#include"ceju.h"

unsignedcharINTflag:〃定期標(biāo)記

unsignedintsum://2hz計(jì)數(shù)器1次為0。5秒

voidRunTime2Hz(void);

voidOffTime2Hz(void);

voidClear_WatchDog(void);

voiddelay2s(inttimer)〃設(shè)立基頻為2HZ中斷就是一次定期

0o5S

(

sum=timer;

RunTime2Hz();〃運(yùn)營(yíng)中斷

while(!INTflag)

Clear_WatchDog();〃清看門(mén)狗

INTflag=0;

OffTime2Hz();〃結(jié)束中斷

voiddelay2s(inttimer);

intmain(void)

(

unsignedintBack_data;〃裝距離

*PJOB_Dir=0xlf0();//初始化

IOBJOB8-12同向輸出

*PJOB_Attrib=OxlfOO;

*PIOBData=0x0000;

INTflag=0;

Clear_WatchDog();〃清看門(mén)狗

while(l)

*P_TimerA_Ctrl=0x0373;

*P_TimerA_Data=0xff9f;//設(shè)邁進(jìn)PWM這

14/16

Back_data=measure_Times(O);〃測(cè)距

if(Back_data==O)〃判斷與否為o,

為。則為邁進(jìn)

(

^P_TimerA_Ctrl=OxO373;

*P_TimerA_Data=0xff9f;

)

elseif(Back_data<=40)//判斷與否不大

于40CM,不大于則進(jìn)行倒車(chē)

(

^P_TimerA_Ctrl=0x006:

*PJOB_Data=0xl()00;〃倒車(chē)

delay2s(0);

*PJOB_Data=0x0100;〃邁進(jìn)

delay2s(3);

)

elseif(Back_data<=100)〃判斷與否不大于

IM,不大于則進(jìn)行避障

(

*P_TimerA_Ctri=0x0333;

*P_IOB_Data=0x0400;〃左轉(zhuǎn)

delay2s(l);

*P_IOB_Data=0x0800;〃右轉(zhuǎn)

delay2s(l);

*PJOB_Data=0x0400:〃左轉(zhuǎn)

delay2s(l);

*P_TimerA_Ctrl=0x006;〃停止PWM運(yùn)

營(yíng)

*PJOB_Data=OxOOOO;//停車(chē)

while(l)

{;}

)

else

Clear_WatchDog();

2.中斷程序:

includeHSPCE061A.h"

#include"ceju.h"

voidIRQ3(void)—attribute—((ISR));//IRQ中斷服務(wù)程序

voidIRQ3(void)

*P_INT_Clear=0x0100;//

EXTl_IRQ_ult();〃調(diào)用超聲波測(cè)距外部中斷

服務(wù)程序

.TEXT

.includeSPCE061A.inc;

.external_sum;

.external_INTflag;

.public_IRQ5;

」RQ5:〃定期3秒中斷程序

pushrl,r4to[sp];

rl=0x0008;

testrl,[P_INT_Ctrl];

jnzL_4Hz;//TimerAFIQentrence

rl=0x0004;

LPJNT_Clear]=rl;〃清中斷

rl二[_sum]//取時(shí)基信號(hào)量

rl+=1;

cmprl,4;

jeloopO;

[_sum]=rl〃保存時(shí)基信號(hào)量

poprl,r4from[spj;

reti;

loopO:

rl=0x0001;

[JNTflag]=rl;//設(shè)立中斷標(biāo)記

rl=0

[_sum]二rl

poprl,r4from[sp];

reti;

L_4Hz:

rl=0x0008;

LPJNT_Clear]=rl;〃清中斷

poprl,r4from[sp];

reti;

.external_sum;

.includeSPCE061A.inc;

.CODE

.public_Clear_WatchDog;

_Clear_WatchDog:.PROC

RI=0x0001;

[P_Watchdog_Clear]=R1;〃清看門(mén)狗

retf;

.ENDP

.public_RunTime2Hz;〃初始化中斷為2HZ定期中斷源

_RunTime2Hz:.proc

rl=0x0004;

[P_INT_Ctrl]=rl;

INTIRQ;〃開(kāi)中斷

retf

.endp;

.public_OffTime2Hz;

_OflTime2Hz:.proc

rl=LP_INT_CtrlJ

rl&=Oxfffb;

[PJNT_Ctrl]=rl;

rl=0x0000

[_sum]=rl;

retf;

.endp;

3.測(cè)距程序

include"SPCE061A.h"

#defineLONG_SEND_TIMER1000//中距測(cè)距時(shí)

40KHz信號(hào)發(fā)射時(shí)長(zhǎng)

#defineLONG_SEND_TIMER23000//中距測(cè)距補(bǔ)充測(cè)

距時(shí)40KHz信號(hào)發(fā)射時(shí)長(zhǎng)

#defineLONG_WAIT_DELAY600//中距測(cè)距

防余波干擾延時(shí)時(shí)長(zhǎng)

#defineL0NG_WAIT_DELAY21500〃中距測(cè)距補(bǔ)充測(cè)

距時(shí)防余波干擾延時(shí)時(shí)長(zhǎng)

#defineLONG_RES_ADDOxOOBO〃中距測(cè)距成果補(bǔ)

償值

#defineLONG_RES_ADD20x0220〃中距測(cè)距補(bǔ)充

測(cè)距時(shí)成果補(bǔ)償值

#defineLOW_SEND_TIMER250〃短距測(cè)距時(shí)

40KHz信號(hào)發(fā)射時(shí)長(zhǎng)

#defineLOW_SEND_TIMER21000〃短距測(cè)距補(bǔ)充

測(cè)距時(shí)40KHz信號(hào)發(fā)射時(shí)長(zhǎng)

#defineLOW_WAIT_DELAY180〃短距測(cè)距防余

波干擾延時(shí)時(shí)長(zhǎng)

#defineLOW_WAIT_DELAY2400//短星巨測(cè)是巨

補(bǔ)充測(cè)距時(shí)防余波干擾延時(shí)時(shí)長(zhǎng)

#defineLOW_RES_ADD0x0034//短距測(cè)距成果

補(bǔ)償值

#defineLOW_RES_ADD2OxOOBO〃短總巨測(cè)星巨補(bǔ)充測(cè)

距時(shí)成果補(bǔ)償值

unsignedintCounter_buf;〃超聲波測(cè)距當(dāng)中,用于

保存TimerB計(jì)數(shù)變量,相稱(chēng)于時(shí)長(zhǎng)

unsignedintEXTl_IRQ_flag=O;〃外部中斷標(biāo)志變量,

用于EXT1IRQ中斷程序和測(cè)距程序同步

voidDelay_ult(unsignedinttimers)

(

unsignedinti;

for(i=0;i<timers;i++)

(

—asm(nnopH);

)

)

unsignedintResoult_ult(unsignedintCounter)〃計(jì)算距離

(

unsignedintuiTemp;

unsignedlongulTemp;

ulTemp=(unsignedlong)Counter*33500;//*以聲音速度,

以厘米為單位

ulTemp=ulTemp/196608;

ulTemp=ulTemp?1;〃除二

uiTemp=(unsignedint)ulTemp;

returnuiTemp;

unsignedintmeasure2_ult(unsignedinttype);

unsignedintmeasure_ult(unsignedinttype)//超

聲波測(cè)距模組測(cè)距程序,完畢一次測(cè)距

(

unsignedintExit_flag=1;

unsignedintuiTemp;

unsignedintuiResoult;

unsignedintuiSend_Timer,uiWait_Timer,uiRes_Add;

unsignedintuiSystem_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)〃依照type即測(cè)距類(lèi)型,選取

不同測(cè)距參數(shù)

(

uiSend_Timer=LONG_SEND_TIMER;

uiWait_Timer=LONG_WAIT_DELAY;

uiRes_Add=LONG_RES_ADD;

)

else

uiSend_Timer二LOW_SEND_TIMER;

uiWaitTimer=LOWWAITDELAY;

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)定期器B

*PTimerBData=0x0000;

*P_TimerB_CtrI=0x0001;//TrB工作在192KHz頻

while(*P_TimerB_Data<uiWait_Timer)〃等待一定期間后

再打開(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|OxO100;

*P_INT_Clear=Oxffff;〃清除中斷發(fā)生標(biāo)志

_asm(HIRQON");〃打開(kāi)總中斷使能

EXTlJRQ_flag=0;//TimerA溢出中斷標(biāo)

志變量置0

while(Exit_flag)

(

if(EXTl_IRQ_flag==1)〃當(dāng)該變量在timerAFIQ

中斷中被置1時(shí)表達(dá)接受到了回波

(

Exit_flag=0;〃退出標(biāo)示

Counter_buf=Counter_buf+uiRes_Add;〃計(jì)?數(shù)值力口上

一定調(diào)節(jié)數(shù)據(jù)

uiResoult二Resoult_ult(Counter_buf);〃對(duì)計(jì)數(shù)值進(jìn)行

解決,得出距離值

)

if(*P_TimerB_Data>1()000)〃如計(jì)數(shù)值不不大于

10000,表達(dá)超時(shí)

(

Exit_flag=0;

uiResoult=measure2_ult(type);〃再進(jìn)行一次補(bǔ)充測(cè)

距,將會(huì)加長(zhǎng)40KHz信號(hào)發(fā)射量

*P_TimerB_Ctrl=0x()()06;〃停止定期器B

uiTemp=*P_TimerB_Data;

*P_Watchdog_Clear=0x0001;

*P_INT_Ctrl=*P」NT_CW_New&(?0x0100);〃關(guān)掉夕卜部

中斷

_asm("IRQOFF");〃關(guān)掉總中斷

*P_SystemClock=uiSystem_Clock;//恢復(fù)系統(tǒng)時(shí)鐘設(shè)立

returnuiResoult;

)

voidEXTlJRQ_ult(void)〃超聲波測(cè)距模

組測(cè)距程序EXT1中斷服務(wù)程序

(

Counter_buf=*P_TimerB_Data;

*P_TimerB_Ctrl=0x0006;

*P_INT_Ctrl=*P_INT_Ctrl_New&(-0x0100);〃關(guān)掉外部

中斷

*P_INT_Clear=Oxffff;〃清除中斷發(fā)生標(biāo)志

EXTl_IRQ_flag=1;〃告知測(cè)距程序,外部

中斷已發(fā)生

)

unsignedintmeasure2_ult(unsignedinttype)〃補(bǔ)

充進(jìn)行一次遠(yuǎn)距測(cè)量,以保證可以獲取測(cè)量成果

unsignedintExit_flag=1;

unsignedintuiResoult;

unsignedintuiSend_Timer,uiWait_Timer,uiRes_Add;

*P_TimerB_CtrI=0x0006;

*P_INT_Ctrl=*PJNT_Ctrl_New&(-0x0100);//關(guān)掉夕卜部

中斷

_asm(”IRQOFF");〃關(guān)掉總中斷

*PJNT_Clear=Oxffff;〃清除掉中斷發(fā)生標(biāo)志

if(type)//依照type即測(cè)距類(lèi)型,選取

不同測(cè)距參數(shù)

(

uiSend_Timer=LONG_SEND_TIMER2;

uiWait.Timer=LONG_WAIT_DELAY2;

uiRes_Add=LONG_RES_ADD2;

)

else

(

uiSend_Timer=LOW_SEND_TIMER2;

uiWait_Timer=LOW_WAIT_DELAY2;

uiRes_Add二LOW_RES_ADD2;

*P_TimerB_Data=0xfed2;

*P_TimerB_Ctrl=OxO3cO;

Delay_ult(uiSend_Timer);

*P_TimerB_Ctrl=0x0006;

*P_TimerB_Data=0x0000;

*P_TimerB_Ctrl=0x0001;

while(*P_TimerB_Data<uiWait_Timer)〃等待一定期間,

以避開(kāi)余波干擾

(

*P_Watchdog_Clear=0x0001;

)

*P_INT_Ctrl=*P」NT_Ctrl_New|0x0100;//打開(kāi)外部中斷

*PJNT_Clear=Oxffff;〃清除中斷發(fā)生標(biāo)志

_asm(HIRQON");〃打開(kāi)總中斷使能

EXTl_IRQ_flag=0;//TimerA溢出中斷標(biāo)

志變量置()

while(Exit_flag)

if(EXT!JRQ_flag==l)〃當(dāng)該變量在timerAFIQ

中斷中被置1時(shí)表達(dá)接受到了回波

Exit_flag=0;//exit

Counter_buf=Counter_buf+uiRes_Add;〃計(jì)數(shù)值力口上

一定調(diào)節(jié)數(shù)據(jù)

uiResoult=Resoult_ult(Counter_buf);〃對(duì)計(jì)數(shù)值進(jìn)行

解決,得出距離值

)

if(*P_TimerB_Data>10000)〃如計(jì)數(shù)值不不大于

10000,表達(dá)超時(shí)

(

Exit_flag=0;

uiResoult

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論