智能小車原理_第1頁(yè)
智能小車原理_第2頁(yè)
智能小車原理_第3頁(yè)
智能小車原理_第4頁(yè)
智能小車原理_第5頁(yè)
已閱讀5頁(yè),還剩17頁(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、一、前言 設(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)避障小車就是基于這一系統(tǒng)開發(fā)而成的。 意義 隨著科技的發(fā)展,對(duì)于未知空間和人類所不能直接到達(dá)的地域的探索逐步成為熱門,這就使機(jī)器人的自動(dòng)避障有了重大的意義。我們的自動(dòng)避障小車就是自動(dòng)避障機(jī)器人中的一類。自動(dòng)避障小車可以作為地域探索機(jī)器人和緊急搶險(xiǎn)機(jī)器人的運(yùn)動(dòng)系統(tǒng),讓機(jī)器人在行進(jìn)中自動(dòng)避過(guò)障礙物。 成員情況 本組三位成員均為2005級(jí)基地班學(xué)生,都選修過(guò)數(shù)字電路

2、課程。 二、總體方案設(shè)計(jì) 1、設(shè)計(jì)要求 小車從無(wú)障礙地區(qū)啟動(dòng)前進(jìn),感應(yīng)前進(jìn)路線上的障礙物后,根據(jù)障礙物的位置選擇下一步行進(jìn)方向。并可通過(guò)兩個(gè)獨(dú)立按鍵對(duì)小車進(jìn)行控速。 2、小車自動(dòng)避障的原理小車車頭處裝有三個(gè)光電開關(guān),中間一個(gè)光電開關(guān)對(duì)向正前方,兩側(cè)的光電開關(guān)向兩邊各分開30度,(如右圖所示)。小車在行進(jìn)過(guò)程中由光電開關(guān)向前方發(fā)射出紅外線,當(dāng)紅外線遇到障礙物時(shí)發(fā)生漫反射,反射光被光電開關(guān)接收。小車根據(jù)三個(gè)光電開關(guān)接受信號(hào)的情況來(lái)判斷前方障礙物的分布并做出相應(yīng)的動(dòng)作。光電開關(guān)的平均探測(cè)距離為30cm。 3、模塊方案比較及論證 根據(jù)設(shè)計(jì)要求,我們的自動(dòng)避障小車主要由六個(gè)模塊構(gòu)成:車體框架、電源及穩(wěn)壓

3、模塊、主控模塊、邏輯模塊、探測(cè)模塊、電機(jī)驅(qū)動(dòng)模塊組成。 各模塊分述如下:3.1車體框架 在設(shè)計(jì)車體框架時(shí),我們有兩套起始方案,自己制作和直接購(gòu)買玩具電動(dòng)車。 方案一:自己設(shè)計(jì)制作車架 自己制作小車底盤,用兩個(gè)直流減速電機(jī)作為主動(dòng)輪,利用兩電機(jī)的轉(zhuǎn)速差完成直行、左轉(zhuǎn)、右轉(zhuǎn)、左后轉(zhuǎn)、右后轉(zhuǎn)、倒車等動(dòng)作。減速電機(jī)扭矩大,轉(zhuǎn)速較慢,易于控制和調(diào)速,符合避障小車的要求。而且自己制作小車框架,可以根據(jù)電路板及傳感器安裝需求設(shè)計(jì)空間,使得車體美觀緊湊。但自己制作小車設(shè)計(jì)制作周期較長(zhǎng),且費(fèi)用較高,因而我們放棄這一方案。 方案二:購(gòu)買玩具電動(dòng)車 玩具電動(dòng)車價(jià)格低廉,有完整的驅(qū)動(dòng)、傳動(dòng)和控制單元,其中傳動(dòng)裝置是我

4、們所需的,縮短了開發(fā)周期。但玩具電動(dòng)車采用普通直流電機(jī)驅(qū)動(dòng),帶負(fù)載能力差,調(diào)速方面對(duì)程序要求較高。同時(shí),玩具電動(dòng)車轉(zhuǎn)向依靠前輪電機(jī)帶動(dòng)前輪轉(zhuǎn)向完成,精度低。 考慮到利用玩具電動(dòng)小車做車架開發(fā)周期短,可留夠充分的時(shí)間用于系統(tǒng)調(diào)試,且硬件上的不足我們有信心用優(yōu)良的算法來(lái)彌補(bǔ),故我們選擇方案二。 3.2電源及穩(wěn)壓模塊 方案一:采用交流電經(jīng)直流穩(wěn)壓處理后供電 采用交流電提供直流穩(wěn)壓電源,電流驅(qū)動(dòng)能力及電壓穩(wěn)定性最好,且負(fù)載對(duì)電源影響也最小。但由于需要電線對(duì)小車供電,極大影響了壁障小車行動(dòng)的靈活性及地形的適應(yīng)能力。而且壁障小車極易把拖在地上的電線識(shí)別為障礙物,人為增加了不必要的障礙。故我們放棄了這一方案

5、。 方案二:采用蓄電池供電 蓄電池具有較強(qiáng)的電流驅(qū)動(dòng)能力和較好的電壓穩(wěn)定性能,且成本低廉。可采用蓄電池經(jīng)7812芯片穩(wěn)壓后給電機(jī)供電,再經(jīng)過(guò)降壓接7805芯片給單片機(jī)及其他邏輯單元供電。但蓄電池體積相對(duì)龐大,且重量過(guò)大,造成電機(jī)負(fù)載過(guò)大,不適合我們采用的小車車架(玩具電動(dòng)車車架)。故我們放棄了這一方案。 方案三:采用干電池組進(jìn)行供電 采用四節(jié)干電池降壓至5V后給單片機(jī)及其他邏輯單元供電,另取六節(jié)干電池為電機(jī)及光電開關(guān)供電。這樣電機(jī)啟動(dòng)及制動(dòng)時(shí)的短暫電壓干擾不會(huì)影響到邏輯單元和單片機(jī)的工作。干電池用電池盒封裝,體積和重量較小,同時(shí)玩具車底座可以安裝四節(jié)干電池,正好可為單片機(jī)及其他邏輯單元供電。在

6、穩(wěn)壓方面,起始時(shí)考慮使用7805芯片對(duì)6V的電池電壓進(jìn)行降壓穩(wěn)壓。但考慮到這樣使得7805芯片消耗大量能量,降低電池壽命;同時(shí),由于mega16、光電開關(guān)、小車電機(jī)對(duì)于供電電壓要求并不苛刻,故我們將6V電池電壓接一個(gè)二極管降壓后直接給單片機(jī)及其他邏輯單元供電。而電機(jī)和光電開關(guān)的電源不做穩(wěn)壓處理。這樣只需在小車主板上加兩個(gè)調(diào)速按鈕,根據(jù)電池電量選擇合適功率即可,甚至于可直接在軟件里設(shè)置自動(dòng)換擋。 綜合考慮,我們采用方案三。示意圖如下 3.3主控模塊 作為單片機(jī)原理與接口技術(shù)課程的course project,我們直接選用了課程主要介紹的,Atmel公司的ATmaga16L單片機(jī)作為主控模塊。 M

7、ega16是高性能、低功耗的 8 位AVR 微處理器,具有先進(jìn)的RISC結(jié)構(gòu),內(nèi)部集成兩個(gè)具有獨(dú)立預(yù)分頻器和比較器功能的8 位定時(shí)器/ 計(jì)數(shù)器和一個(gè)具有預(yù)分頻器、比較功能和捕捉功能的16 位定時(shí)器/ 計(jì)數(shù)器??赏ㄟ^(guò)JTAG對(duì)MCU進(jìn)行程序燒寫及仿真。內(nèi)置晶振,使用方便。 在設(shè)計(jì)開發(fā)過(guò)程中我們使用課程設(shè)計(jì)提供的開發(fā)板進(jìn)行程序調(diào)試和下載,配車使用時(shí)直接將MCU拔出插入我們小車系統(tǒng)電路板底座中。示意圖如下: 3.4 邏輯模塊 在探測(cè)模塊和單片機(jī)中斷接口之間、獨(dú)立按鍵與單片機(jī)中斷接口之間,需要經(jīng)過(guò)電平的邏輯處理進(jìn)行連接。主要涉及到一個(gè)三輸入或非門和一個(gè)二輸入與門。這兩個(gè)邏輯關(guān)系我們直接選用74HC系列

8、的集成芯片實(shí)現(xiàn)。 由于三輸入或非門在市場(chǎng)上很難購(gòu)買到,我們采用了兩個(gè)二輸入或非門和一個(gè)二輸入與門完成了三輸入或非門。由于我們采用的74HC08(四二輸入與門)、74HC02(四二輸入或非門)均為四二輸入的,各提供四個(gè)二輸入與門和四個(gè)二輸入或非門,我們用各用一片芯片即可實(shí)現(xiàn)所需邏輯功能。 示意圖如下: 3.5探測(cè)模塊 方案一:使用超聲波探測(cè)器 超聲波探測(cè)器探測(cè)距離遠(yuǎn),測(cè)距方便。但由于聲波衍射現(xiàn)象較嚴(yán)重,且波包散面太大,易造成障礙物的錯(cuò)誤判斷。同時(shí),超聲波探測(cè)具有幾厘米甚至幾十厘米的盲區(qū),這對(duì)于我們的避障小車是個(gè)致命的限制。故我們放棄了這一方案。 方案二:使用光電對(duì)管探測(cè) 光電對(duì)關(guān)價(jià)格低廉,性能穩(wěn)

9、定,但探測(cè)距離過(guò)近(一般不超過(guò)3cm),使得小車必須制動(dòng)迅速。而我們由于采用普通直流電機(jī)作為原動(dòng)力,制動(dòng)距離至少需要10cm。因此我們放棄了這一方案。 方案三:使用視頻采集處理裝置進(jìn)行探測(cè) 使用CCD實(shí)時(shí)采集小車前進(jìn)路線上的圖像并進(jìn)行實(shí)時(shí)傳輸及處理,這是最精確的障礙物信息采集方案,可以對(duì)障礙物進(jìn)行精確定位和測(cè)距。但是使用視頻采集會(huì)大大增加小車成本和設(shè)計(jì)開發(fā)難度,而且考慮到我們小車行進(jìn)轉(zhuǎn)彎的精確度并未達(dá)到視頻處理的精度,因而使用視頻采集在實(shí)際應(yīng)用中是個(gè)很大的浪費(fèi),所以我們放棄了這一方案。 方案四:使用光電開關(guān)進(jìn)行障礙物信息采集 使用三只E3F-DS30C4光電開關(guān),分別探測(cè)正前方,前右側(cè),前左側(cè)

10、障礙物信息,在特殊地形(如障礙物密集地形)可將正前方的光電開關(guān)移置后方進(jìn)行探測(cè)。E3F-DS30C4光電開關(guān)平均有效探測(cè)距離030cm可調(diào),且抗外界背景光干擾能力強(qiáng),可在日光下正常工作(理論上應(yīng)避免日光和強(qiáng)光源的直接照射)。我們小車換檔調(diào)速后的最大制動(dòng)距離不超過(guò)30cm,一般在1020cm左右,因而探測(cè)距離滿足我們的小車需求。 綜上考慮,我們選用方案四。示意圖如下: 3.6電機(jī)驅(qū)動(dòng)模塊 方案一:使用分立原件搭建電機(jī)驅(qū)動(dòng)電路 使用分立原件搭建電機(jī)驅(qū)動(dòng)電路造價(jià)低廉,在大規(guī)模生產(chǎn)中使用廣泛。但分立原件H橋電路工作性能不夠穩(wěn)定,較易出現(xiàn)硬件上的故障,故我們放棄了這一方案。 方案二:使用L298N芯片驅(qū)

11、動(dòng)電機(jī) L298N是一個(gè)具有高電壓大電流的全橋驅(qū)動(dòng)芯片,輸出電壓最高可達(dá)50V,可以直接通過(guò)電源來(lái)調(diào)節(jié)輸出電壓;可以直接用單片機(jī)的IO口提供信號(hào),而且?guī)в惺鼓芏耍奖鉖WM調(diào)速,電路簡(jiǎn)單,性能穩(wěn)定,使用比較方便。L298N芯片可以驅(qū)動(dòng)兩個(gè)二相電機(jī),也可以驅(qū)動(dòng)一個(gè)四相電機(jī),正好符合我們小車兩個(gè)二相電機(jī)的驅(qū)動(dòng)要求。 綜合考慮,我們采用L298N芯片驅(qū)動(dòng)小車電機(jī)。 控制示意圖如下:? 最終方案如下: 使用干電池組對(duì)系統(tǒng)供電,改造玩具電動(dòng)車作為小車底座,采用Mega16L作為主控芯片,采用E3F-DS30C4光電開關(guān)進(jìn)行障礙物探測(cè),使用L298N驅(qū)動(dòng)直流電機(jī)。邏輯關(guān)系處理使用74HC系列芯片完成。 三

12、、單元模塊設(shè)計(jì) 1、各單元模塊功能介紹及電路設(shè)計(jì) 自動(dòng)避障小車系統(tǒng)的整體電路原理圖如下:?  1.1 直流電源降壓 經(jīng)過(guò)測(cè)量,一般四節(jié)新南孚電池串聯(lián)帶負(fù)載后可提供5.8V電壓。經(jīng)過(guò)二極管穩(wěn)壓至5.15.2V后給邏輯器件供電并給系統(tǒng)提供高電平標(biāo)準(zhǔn)。?1.2 主控芯片使用Mega 16L的PA0PA3接電機(jī)驅(qū)動(dòng)芯片L298N的IN1IN4,實(shí)現(xiàn)對(duì)電機(jī)驅(qū)動(dòng)芯片的控制,進(jìn)而控制電機(jī)的轉(zhuǎn)動(dòng)。 使用Mega 16L的PB0PB2接經(jīng)過(guò)電平轉(zhuǎn)換的探測(cè)器信號(hào)線,實(shí)現(xiàn)對(duì)障礙物信息的采集。 使用Mega 16L的PC0、PC1接受獨(dú)立按鍵信號(hào),實(shí)現(xiàn)對(duì)小車行進(jìn)過(guò)程中速度的控制。由于我們小車電機(jī)電源沒有經(jīng)過(guò)

13、穩(wěn)壓,隨著電池電量的消耗,電機(jī)電池組的電壓逐漸降低,因而小車速度會(huì)發(fā)生變化。我們就可以通過(guò)獨(dú)立按鍵對(duì)速度進(jìn)行提前設(shè)定,使得即使電池組電量變化,小車也能按預(yù)定速度行進(jìn)。 使用Mega 16L的PD2、PD3接收中斷信息。在軟件部分我們可以看到,隨著程序的不斷完善,最終我們的INT0,即PD2并沒有使用。 使用引腳10為單片機(jī)供電,引腳31接地。?1.3 邏輯模塊 設(shè)計(jì)任務(wù): 三個(gè)傳感器信號(hào)線給出邏輯電平信號(hào),當(dāng)任何一個(gè)是高電平時(shí),給INT0一個(gè)低電平信號(hào)。(如上一部分所述,最終我們用定時(shí)器中斷代替了這個(gè)外部中斷,但作為硬件設(shè)計(jì)和焊接的一部分,我們還是給以闡釋)。 兩個(gè)獨(dú)立按鍵分別控制提速和減速,

14、沒有按下時(shí),信號(hào)線給出高電平。當(dāng)任意一鍵按下時(shí),信號(hào)線給出低電平,同時(shí)給出一個(gè)低電平給INT1。 任務(wù)實(shí)現(xiàn): 第一個(gè)任務(wù)的實(shí)現(xiàn)原本想采用三輸入或非門74HC27 實(shí)現(xiàn)。但由于市場(chǎng)上缺乏供應(yīng),我們用74HC08的一個(gè)二輸入與門和74HC02的兩個(gè)二輸入或非門完成。?第二個(gè)任務(wù)邏輯的實(shí)現(xiàn)使用74HC08的一個(gè)與門實(shí)現(xiàn)。按鍵功能的實(shí)現(xiàn),是使用了兩個(gè)5K1的電阻分別連接兩個(gè)按鍵與邏輯高電平(+5V),無(wú)鍵按下電平上拉至邏輯高電平,有鍵按下時(shí)降至0V。 1.4 探測(cè)模塊 探測(cè)模塊的電路圖:設(shè)計(jì)任務(wù): 1. 三個(gè)光電開關(guān)探測(cè)前方障礙物。 2. 將光電開關(guān)傳回的非標(biāo)準(zhǔn)的開關(guān)電平信號(hào)轉(zhuǎn)換成CMOS標(biāo)準(zhǔn)電平(即

15、將09V轉(zhuǎn)換成05V)。 任務(wù)實(shí)現(xiàn): 1. 光電開關(guān)發(fā)射出的紅外線在經(jīng)障礙物漫反射后會(huì)由光電開關(guān)再接收到,這會(huì)引起光電開關(guān)傳回的電平的變化。若前方有障礙物,則光電開關(guān)傳回低電平;若前方無(wú)障礙物,則光電開關(guān)傳回的是高電平。有電平的變化可以實(shí)現(xiàn)對(duì)前方障礙物的探測(cè)。 2. 光電開關(guān)傳回的信號(hào)是非標(biāo)準(zhǔn)的電平信號(hào),這對(duì)于Mega16芯片是不適用的。因此,我們使用了三個(gè)8050三極管來(lái)實(shí)現(xiàn)電平的轉(zhuǎn)換。由三極管的電氣特性,當(dāng)其基極為低電平時(shí),即基極發(fā)射極電壓小于導(dǎo)通壓降,其輸出電平為高電平,在其輸出端有用一個(gè)5K1的電阻上拉,使輸出的高電壓為+5V;而在基極為高電平時(shí),三極管發(fā)射極正偏,輸出電平為0。這樣輸

16、出電平已經(jīng)轉(zhuǎn)化為CMOS標(biāo)準(zhǔn)電平。不過(guò),這時(shí)傳回到Mega16的電平信號(hào)已經(jīng)和原來(lái)光電開關(guān)傳回的信號(hào)高低相反,但這并不影響前方障礙物的探測(cè)。 1.5 電機(jī)驅(qū)動(dòng)模塊 電機(jī)驅(qū)動(dòng)模塊的電路圖: 電機(jī)驅(qū)動(dòng)模塊主要功能是將主控芯片發(fā)出的信號(hào)通過(guò)L298N電機(jī)控制芯片轉(zhuǎn)化為小車實(shí)際的動(dòng)作。 L298N芯片有兩個(gè)電源引腳VDD引腳和VCC引腳。VDD引腳接+9V電源用來(lái)給電機(jī)供電,VCC引腳接+5V電源用來(lái)給芯片供電,并作為邏輯高電平標(biāo)準(zhǔn)。 L298N芯片通過(guò)一個(gè)有四個(gè)4148二極管組成的保護(hù)電路與電機(jī)相連,保護(hù)電路主要是用來(lái)在電機(jī)開啟和關(guān)閉時(shí)泄流之用。 由于我們一直讓轉(zhuǎn)向電機(jī)以最大功率使能從而獲得最大的扭

17、矩,保證小車轉(zhuǎn)向成功,而不需要控制轉(zhuǎn)向電機(jī)的輸出功率,所以ENA引腳(即轉(zhuǎn)向電機(jī)使能引腳)直接接 +5 V,即讓轉(zhuǎn)向電機(jī)一直使能。 對(duì)于后置的驅(qū)動(dòng)電機(jī),我們不僅要控制其實(shí)現(xiàn)前進(jìn)、后退和停止,還要能夠控制其轉(zhuǎn)速以解決由于電量不足而產(chǎn)生的小車變慢的問(wèn)題。所以,我們將L298N芯片的ENB引腳與Mega16的PB3引腳(即OC0)連接,用來(lái)實(shí)現(xiàn)PWM調(diào)速。 L298N芯片的IN1和IN2引腳分別和Mega16的PA1和PA0引腳連接用來(lái)接收主控芯片輸出的轉(zhuǎn)向電機(jī)的動(dòng)作指令,并通過(guò)OUT1和OUT2來(lái)控制轉(zhuǎn)向電機(jī)的正轉(zhuǎn)與反轉(zhuǎn),最終功能的實(shí)現(xiàn)表現(xiàn)在小車的左轉(zhuǎn)與右轉(zhuǎn)。 L298N芯片的IN3和IN4引腳分

18、別與Mega16的PA3和PA2引腳連接用來(lái)接收主控芯片輸出的驅(qū)動(dòng)電機(jī)的動(dòng)作指令,并通過(guò)OUT3和OUT4來(lái)控制驅(qū)動(dòng)電機(jī)的正轉(zhuǎn)與反轉(zhuǎn),最終功能的實(shí)現(xiàn)表現(xiàn)在小車的前進(jìn)、后退、停止。 2、所用全部硬件資源 增強(qiáng)版ATMega 16L/32開發(fā)板(進(jìn)行程序的初步調(diào)試) 簡(jiǎn)版JTAG仿真器(程序的下載和仿真) 遙控電動(dòng)玩具車 E3F-DS30C4光電開關(guān)3只 Mega 16L單片機(jī)1片 L298N電機(jī)驅(qū)動(dòng)芯片1片 74HC02芯片、74HC08芯片各1片 8050NPN三極管3只,4148二極管8只 實(shí)驗(yàn)電路板1只 5K1電阻5只,10K電阻2只 散熱片1只 獨(dú)立按鍵2只 40引腳底座1只 電池盒2只

19、 南孚電池6節(jié),華太電池4節(jié) 5列裝排線1米左右 502粘合劑1瓶 四、程序設(shè)計(jì)和調(diào)試過(guò)程 1、程序調(diào)試過(guò)程 目前程序已經(jīng)經(jīng)歷了四個(gè)主要版本,對(duì)尋障避障的方法前后有較大的改變。 1.1最初的程序設(shè)計(jì)主流程圖:?INT0中斷觸發(fā) 端口值是多少? 檢測(cè)傳感器端口的反饋值 前方有障礙物 根據(jù)檢測(cè)到的障礙物情況(分7種),從7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行 前進(jìn) 等待下次中斷觸發(fā) 前方無(wú)障礙物 這是一個(gè)很簡(jiǎn)單而自然的想法。用定時(shí)器T0的快速PWM模式控制小車的速度,附加兩個(gè)獨(dú)立按鍵來(lái)控制初始時(shí)小車的速度,以便于調(diào)試。第一版程序中為小車設(shè)計(jì)了如下7個(gè)動(dòng)作: 發(fā)現(xiàn)前方有小障礙(010):后退并右轉(zhuǎn); 發(fā)現(xiàn)右方有

20、小障礙(100):前進(jìn)并左轉(zhuǎn); 發(fā)現(xiàn)左方有小障礙(001):前進(jìn)并右轉(zhuǎn); 發(fā)現(xiàn)前方有大障礙(111):較大的后退并右轉(zhuǎn); 發(fā)現(xiàn)右方有大障礙(110):后退并右轉(zhuǎn); 發(fā)現(xiàn)左方有大障礙(011):后退并左轉(zhuǎn); 發(fā)現(xiàn)兩邊有障礙但中間無(wú)障礙(101):較大的后退并右轉(zhuǎn); 每次動(dòng)作結(jié)束后,小車都要改運(yùn)動(dòng)狀態(tài)為前進(jìn),等待下一次中斷觸發(fā)。 按照這樣的思路寫完程序后,調(diào)試中發(fā)現(xiàn)小車的動(dòng)作很笨拙,每次相同動(dòng)作的距離總是一樣的,不能根據(jù)環(huán)境自動(dòng)調(diào)整,前進(jìn)后退都太沖;因?yàn)閯?dòng)作都是用延時(shí)函數(shù)實(shí)現(xiàn)的,動(dòng)作中要禁用全局中斷,導(dǎo)致發(fā)現(xiàn)障礙物不及時(shí),常常一頭撞上去;后退時(shí)動(dòng)作無(wú)法調(diào)整,即使已經(jīng)避開了障礙物還是無(wú)法及時(shí)轉(zhuǎn)換成前

21、進(jìn)狀態(tài),經(jīng)常撞上后面的物體。 鑒于以上發(fā)現(xiàn)的問(wèn)題,我們又修改寫成了第二版程序,流程圖與第一版大致相同,所不同的是每次動(dòng)作的時(shí)間都被改得非常短(約幾個(gè)毫秒),在每個(gè)動(dòng)作結(jié)束后都在此檢測(cè)探測(cè)器反饋值,然后根據(jù)反饋值選擇下一步動(dòng)作。也就是說(shuō),8個(gè)動(dòng)作函數(shù)(加了一個(gè)前進(jìn))和一個(gè)INT0中斷處理函數(shù)形成了循環(huán),循環(huán)的唯一出口在前進(jìn)函數(shù)里,只有檢測(cè)到前方已無(wú)障礙物時(shí)才能退出中斷。我們希望通過(guò)縮短每次動(dòng)作的時(shí)間、縮短兩次探測(cè)之間的間隔時(shí)間來(lái)達(dá)到變行進(jìn)邊探測(cè)效果,使小車的動(dòng)作更加靈敏。 1.2 第二版程序的主流程圖:有障礙 無(wú)障礙 INT0中斷觸發(fā) 端口值是多少? 檢測(cè)傳感器端口的反饋值 前方有障礙物 根據(jù)檢

22、測(cè)到的障礙物情況(分7種),從7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行 前進(jìn) 等待下次中斷觸發(fā) 前方無(wú)障礙物 檢測(cè)判斷端口值 對(duì)于這一版程序,我們?cè)谡{(diào)試過(guò)程中發(fā)現(xiàn)小車四處亂撞的問(wèn)題已經(jīng)基本能解決了,但隨之而來(lái)又出現(xiàn)了新問(wèn)題:控制小車前進(jìn)和轉(zhuǎn)向的端口電平變得很不穩(wěn)定,小車走起路來(lái)顫顫巍巍,常常出現(xiàn)卡死的現(xiàn)象。具體表現(xiàn)為:端口值有規(guī)律地閃動(dòng),大約0.2秒閃一次,出現(xiàn)一個(gè)極短的脈沖,其值恰好是“前進(jìn)”。由此我們想到可能是算法本身的原因造成了這種現(xiàn)象,是退出中斷服務(wù)程序時(shí)的一個(gè)脈沖。 為了解決端口電平不穩(wěn)定的問(wèn)題,也為了定時(shí)更加準(zhǔn)確,同時(shí)節(jié)省CPU時(shí)間,我們對(duì)程序進(jìn)行了較大調(diào)整,改為用T1定時(shí)器來(lái)控制動(dòng)作和檢測(cè)。每

23、隔一定時(shí)間T1觸發(fā)溢出中斷,在中斷服務(wù)程序中進(jìn)行檢測(cè)和行動(dòng)。這時(shí)的行動(dòng)只是改變控制端口值,不需要延時(shí)函數(shù),這就大大節(jié)約了CPU時(shí)間。每個(gè)動(dòng)作函數(shù)都精簡(jiǎn)到只有一個(gè)動(dòng)作,動(dòng)作完成后不再作改動(dòng),等待下次中斷再修改控制端口值。 1.3 第三版程序的主流程圖:T1溢出中斷 端口值是多少? 檢測(cè)傳感器端口的反饋值 前方有障礙物 根據(jù)檢測(cè)到的障礙物情況(分7種),從7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行 等待下次中斷觸發(fā) 前方無(wú)障礙物 從這一流程圖可以看出,我們盡可能的精簡(jiǎn)了小車的動(dòng)作過(guò)程,使得整個(gè)判斷處理過(guò)程簡(jiǎn)潔而迅速。另外,我們?cè)谶@一版程序里加上了自動(dòng)變速程序,小車的速度不再由各個(gè)動(dòng)作函數(shù)直接指定,而是通過(guò)計(jì)算一個(gè)

24、連續(xù)動(dòng)作的進(jìn)行時(shí)間,由程序自動(dòng)設(shè)定T0的OCR0值。這樣做主要是為了配合小車的啟動(dòng)和制動(dòng),在啟動(dòng)和制動(dòng)時(shí)給小車較大的動(dòng)力,而在一般行進(jìn)時(shí)使用普通功率,這樣就可以既有效的控制小車的速度,又能夠保證小車在改變方向時(shí)有足夠的動(dòng)力。程序?qū)崿F(xiàn)了三檔自動(dòng)變速。此外,我們還修改INT1中斷中的兩個(gè)按鍵的功能,不再是控制起始速度,而是控制普通行進(jìn)時(shí)的速度,使這兩個(gè)控制按鍵更加實(shí)用。 在測(cè)試中,我們發(fā)現(xiàn)這樣的改變收到了良好的效果。小車在前方障礙物的檢測(cè)和避過(guò)上已經(jīng)非常靈敏,能在隨意放置的障礙物陣中迅速找到前進(jìn)的路線穿過(guò)陣列。由于加上了自動(dòng)變速程序,小車的動(dòng)作也變得流暢了許多。 不過(guò),在測(cè)試中我們還是發(fā)現(xiàn)了新的問(wèn)

25、題:小車在碰上前方的障礙時(shí)需要后退,后退到光電開關(guān)檢測(cè)不到障礙的地方改變方向前進(jìn),這是程序設(shè)計(jì)的動(dòng)作;但是如果小車在光電開關(guān)檢測(cè)距離閾值的地方正好速度比較慢,沒有足夠的慣性沖到檢測(cè)距離里面或外面,就可能在那里不斷重復(fù)短促的前進(jìn)和后退的動(dòng)作,從而卡死。 為了解決這個(gè)問(wèn)題,我們?cè)诘谌娉绦虻幕A(chǔ)上,又編寫了第四版程序。第四版程序中新增添了防卡死機(jī)制,結(jié)合定時(shí)器控制和延時(shí)函數(shù)控制的優(yōu)點(diǎn),實(shí)現(xiàn)了小車較流暢的后退和轉(zhuǎn)向。 1.4第四版程序的主流程圖: T1溢出中斷 端口值是多少? 檢測(cè)傳感器端口的反饋值 前方有障礙物 根據(jù)檢測(cè)到的障礙物情況(分7種),從7個(gè)動(dòng)作函數(shù)中選擇一個(gè)執(zhí)行 等待下次中斷觸發(fā) 前方

26、無(wú)障礙物 記錄上一次的動(dòng)作持續(xù)時(shí)間 是否卡死? 執(zhí)行卡死 處理函數(shù) 清空歷史記錄 否 是 第四版程序的防卡死機(jī)制是以一個(gè)動(dòng)作歷史記錄隊(duì)列為基礎(chǔ)的。該隊(duì)列是一個(gè)有8個(gè)元素的數(shù)組history8,每次行進(jìn)方向改變,即由后退轉(zhuǎn)為前進(jìn)或由前進(jìn)轉(zhuǎn)為后退時(shí),即認(rèn)為一次連續(xù)動(dòng)作結(jié)束,記錄這個(gè)動(dòng)作的時(shí)間,寫入隊(duì)列內(nèi);隊(duì)列內(nèi)共記錄前8次連續(xù)動(dòng)作的持續(xù)時(shí)間,如果這8次動(dòng)作中有7次以上持續(xù)時(shí)間在0.4秒以下,就認(rèn)為小車被卡住了,這時(shí)執(zhí)行卡死處理函數(shù),讓小車退出卡死區(qū)域。卡死處理函數(shù)使用了延時(shí)函數(shù)來(lái)執(zhí)行,期間禁用了T1,視障礙物情況執(zhí)行1-3次倒退轉(zhuǎn)向動(dòng)作。此外我們改變了一個(gè)動(dòng)作函數(shù):由于小車的探測(cè)距離比車身寬度大得

27、多,當(dāng)左右兩個(gè)探測(cè)器檢測(cè)到有障礙物而中間沒有時(shí),小車將直接前行從障礙物中間穿過(guò)。 防卡死機(jī)制有效地解決了小車卡死的問(wèn)題,小車對(duì)于前方障礙物的躲避也比較靈敏了。? 這一版程序?yàn)槲覀冃≤嚨淖罱K定型程序。 程序模塊構(gòu)成 系統(tǒng)時(shí)鐘模塊:通過(guò)T1定時(shí)器產(chǎn)生0.1秒間隔的溢出中斷,作為小車周期性探測(cè)和動(dòng)作的時(shí)鐘。此外有兩個(gè)輔助軟件延時(shí)函數(shù)。 相關(guān)函數(shù): timer1_init(); isr_timer1_ovf(); trap_handler(); delay100us(n); delay10ms(n); 調(diào)速模塊:通過(guò)T0定時(shí)器產(chǎn)生PWM波形來(lái)控制驅(qū)動(dòng)電機(jī)的輸出功率。程序設(shè)計(jì)了3擋自動(dòng)調(diào)速,對(duì)應(yīng)OCR0

28、值max_power, fast_power, mid_power。從啟動(dòng)開始,利用變量count_move來(lái)計(jì)算連續(xù)行動(dòng)的時(shí)間,使用最大功率連續(xù)前進(jìn)或后退0.3秒以克服摩擦阻力,接下來(lái)0.3秒時(shí)用較大功率,以后使用普通功率。其間如果探測(cè)到障礙物需要改變行進(jìn)方向,可以隨時(shí)重新計(jì)時(shí)。通過(guò)兩個(gè)獨(dú)立按鍵可以調(diào)整普通功率值,計(jì)算按鍵的時(shí)間,每個(gè)時(shí)間單位mid_power值加1。 相關(guān)函數(shù): timer0_init(); set_OCR0(); isr_timer0_ovf(); isr_INT0(); 障礙探測(cè)模塊:如前所述,通過(guò)讀取PINB端口值判斷前方障礙物情況。共有7種設(shè)定的障礙物情況,詳見程序代碼中宏定義部分。 相關(guān)函數(shù): isr_timer1_ovf(); trap_handler(); 常規(guī)動(dòng)作模塊:根據(jù)障礙探測(cè)模塊的返回值,由8個(gè)動(dòng)作函數(shù)控制小車的各種動(dòng)作。修改后的動(dòng)作列表如下(括號(hào)內(nèi)為相關(guān)函數(shù)): 發(fā)現(xiàn)前方有小障礙(010):后退并右轉(zhuǎn);(move_front_obj()) 發(fā)現(xiàn)右方有小障礙(100):前進(jìn)并左轉(zhuǎn);(move_right_obj()) 發(fā)現(xiàn)左方有小障礙(001):前進(jìn)并右轉(zhuǎn);(move_left_obj()) 發(fā)現(xiàn)前方有大障礙(111):較大的后退并右轉(zhuǎn);(move_front_bigobj()) 發(fā)現(xiàn)右方有大障礙(110):后

溫馨提示

  • 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論