超聲波避障小車的設(shè)計(jì)與制作
摘 要
智能小車是一種能夠通過編程手段完成特定任務(wù)的小型化機(jī)器人,它具有制作成本低廉,電路結(jié)構(gòu)簡單,程序調(diào)試方便等優(yōu)點(diǎn)。由于具有很強(qiáng)的趣味性,智能小車深受廣大機(jī)器人愛好者以及高校學(xué)生的喜愛。
本論文介紹的是具有自動避障功能的智能小車的設(shè)計(jì)與制作(以下簡稱智能小車),論文對智能小車的方案選擇,設(shè)計(jì)思路,以及軟硬件的功能和工作原理進(jìn)行了詳細(xì)的分析和論述。經(jīng)實(shí)踐驗(yàn)收測試,該智能小車的電路結(jié)構(gòu)簡單,調(diào)試方便,系統(tǒng)反映快速、靈活,設(shè)計(jì)方案正確、可行,各項(xiàng)指標(biāo)穩(wěn)定、可靠。
目 錄
摘 要 I
Abstract II
目 錄 III
第一章 緒論 1
1.1項(xiàng)目研究背景及意義: 1
1.2項(xiàng)目主要研究內(nèi)容: 1
1.3設(shè)計(jì)思路: 1
1.4應(yīng)用場合和功能: 2
第二章 總體方案 3
2.1總體方案概述: 3
2.2 總體電路原理圖: 3
第三章 各模塊功能介紹 4
3.1障礙物測距系統(tǒng): 4
3.2顯示模塊: 5
3.3驅(qū)動模塊: 10
3.4電源模塊: 12
第四章 軟件設(shè)計(jì) 13
4.1 程序設(shè)計(jì)流程圖 13
4.2 關(guān)鍵程序設(shè)計(jì): 14
第五章 系統(tǒng)調(diào)試 17
5.1 調(diào)試的思路: 17
5.2 各模塊的調(diào)試: 17
5.3 調(diào)試心得: 19
第六章 結(jié)論與展望 20
6.1 結(jié)論: 20
6.2 展望: 20
致 謝 21
參考資料 22
附錄 23
1.元器件清單: 23
2.樣機(jī)實(shí)物照片: 24
3.電路原理圖: 25
相關(guān)程序 26
第一章 緒論
1.1項(xiàng)目研究背景及意義:
智能作為現(xiàn)代社會的新產(chǎn)物,是以后的發(fā)展方向,他可以按照預(yù)先設(shè)定的 模式在一個特定的環(huán)境里自動的運(yùn)作,無需人為管理,便可以完成預(yù)期所要達(dá) 到的或是更高的目標(biāo)。本設(shè)計(jì)主要體現(xiàn)多功能小車的智能模式,設(shè)計(jì)中的理論 方案、分析方法及特色與創(chuàng)新點(diǎn)等可以為自動運(yùn)輸機(jī)器人、采礦勘探機(jī)器人、 家用自動清潔機(jī)器人等自動半自動機(jī)器人的設(shè)計(jì)與普及有一定的參考意義。同 時(shí)小車可以作為玩具的發(fā)展對象,為中國玩具市場技術(shù)含量的缺乏進(jìn)行一定的 彌補(bǔ),實(shí)現(xiàn)經(jīng)濟(jì)收益,形成商業(yè)價(jià)值。 超聲波作為智能車避障的一種重要手段,以其避障實(shí)現(xiàn)方便,計(jì)算簡單, 易于做到實(shí)時(shí)控制,測量精度也能達(dá)到實(shí)用的要求,在未來汽車智能化進(jìn)程中 必將得到廣泛應(yīng)用。我國作為一個世界大國,在高科技領(lǐng)域也必須占據(jù)一席之 地,未來汽車的智能化是汽車產(chǎn)業(yè)發(fā)展必然的,在這種情況下研究超聲波在智 能車避障上的應(yīng)用具有深遠(yuǎn)意義,這將對我國未來智能汽車的研究在世界高科 技領(lǐng)域占據(jù)領(lǐng)先地位具有重要作用。 本智能小車系統(tǒng)最誘人的前景就是可用于未來的智能汽車上了,當(dāng)駕駛員 因疏忽或打瞌睡時(shí)這樣的智能汽車的設(shè)計(jì)就能體現(xiàn)出它的作用。如果汽車偏離 車道或距障礙物小于安全距離時(shí),汽車就會發(fā)出警報(bào),提醒駕駛員注意,如果 駕駛員沒有及時(shí)作出反應(yīng),汽車就會自動減速或停靠于路邊。 這樣的小車還可以用于月球探測等的無人探月車,幫助我們傳達(dá)月球上更 多的信息,讓我們更加的了解月球,為將來登月做好充分準(zhǔn)備。 這樣的小車在科學(xué)考察探測車上也有廣闊的應(yīng)用前景,在科學(xué)考察中,有 很多危險(xiǎn)且人們無法涉足的地方,這時(shí),智能科學(xué)考察車就能夠派上用場,在 它上面裝上攝像機(jī),代替人們進(jìn)行許多無法進(jìn)行的工作。
1.2項(xiàng)目主要研究內(nèi)容:
本設(shè)計(jì)題目為智能避障小車設(shè)計(jì),主要研究小車的避障功能,小車遇到障礙物時(shí),當(dāng)距離障礙物大于40cm,PWM信號自增,驅(qū)動電機(jī)加速,小車加速前進(jìn),當(dāng)小于30cm時(shí),PWM信號自減,驅(qū)動電機(jī)減速,小車減速前進(jìn),并且小車采取相應(yīng)的避障措施。這里探測裝置必不可少,因?yàn)槌暡ㄔ诰嚯x檢測方面的較準(zhǔn)確定位。所以采用超聲波傳感器作為探測裝置,由于超聲波遇到障礙物時(shí)發(fā)生像光一樣的反射和散射,在經(jīng)過多次發(fā)射之后再回到超聲波檢測端口會產(chǎn)生較嚴(yán)重的路程差,從而影響對距離的檢測進(jìn)而影響對障礙物的較準(zhǔn)確定位。通過軟件內(nèi)部校準(zhǔn)優(yōu)化消除外部物理?xiàng)l件造成的誤差從而達(dá)到對障礙物的較準(zhǔn)確定位。
1.3設(shè)計(jì)思路:
直流電機(jī)PWM控制系統(tǒng)的主要功能包括:實(shí)現(xiàn)對直流電機(jī)的加速、減速,并且可以調(diào)整電機(jī)的轉(zhuǎn)速,能夠很方便的實(shí)現(xiàn)電機(jī)的智能控制。主體電路:即直流電機(jī) PWM 控制模塊。這部分電路主要由 AT89S52 單片機(jī) 的 I/O 端口、定時(shí)計(jì)數(shù)器、外部中斷擴(kuò)展等控制直流電機(jī)的加速、減速以及轉(zhuǎn)彎,并且可以調(diào)整電機(jī)的轉(zhuǎn)速,能夠很方便的實(shí)現(xiàn)電機(jī)的智能控制。 其間是通過 AT89S52 單片機(jī)產(chǎn)生脈寬可調(diào)的脈沖信號并輸入到 L298 驅(qū)動芯片來 控制直流電機(jī)工作的。該直流電機(jī) PWM 控制系統(tǒng)由以下電路模塊組成:設(shè)計(jì)控制部分: 主要由 AT89S52 單片機(jī)的外部中斷擴(kuò)展電路組成。直流電機(jī)PWM控制實(shí)現(xiàn)部分主要由電機(jī)和 L298 直流電機(jī)驅(qū)動模塊組成。設(shè)計(jì)顯示部分:LCD 數(shù)碼顯示部分,實(shí)現(xiàn)對超聲波測的距離的實(shí)時(shí)顯示。
1.4應(yīng)用場合和功能:
應(yīng)用場合:智能小車是一種能夠通過編程手段完成特定任務(wù)的小型化機(jī)器人,它具有制作成本低廉,電路結(jié)構(gòu)簡單,程序調(diào)試方便等優(yōu)點(diǎn)。由于具有很強(qiáng)的趣味性,智能小車深受廣大機(jī)器人愛好者以及高校學(xué)生的喜愛。同時(shí)在玩具的應(yīng)用上深受小朋友的青睞。
功能:本小車使用AT89S52單片機(jī)作為主控芯片,它通過超聲波測距來獲取小車距離障礙物的距離,并且用LED顯示出來,當(dāng)小車與障礙物的距離大于40cm時(shí),小車會沿直線前進(jìn),當(dāng)小車與障礙物的距離小于30cm時(shí),小車轉(zhuǎn)彎以避開障礙物,并且此時(shí)蜂鳴器報(bào)警。在避開障礙物后,小車會沿直線前進(jìn)。
第二章 總體方案
2.1總體方案概述:
本小車使用AT89S52單片機(jī)作為主控芯片,它通過超聲波測距來獲取小車距離障礙物的距離,并且用LCD顯示出來,當(dāng)小車與障礙物的距離大于40cm時(shí),小車會沿直線前進(jìn),當(dāng)小車與障礙物的距離小于30cm時(shí),小車轉(zhuǎn)彎以避開障礙物,并且此時(shí)蜂鳴器報(bào)警。在避開障礙物后,小車會沿直線前進(jìn)。簡要框圖如圖2-1。
圖 2.1:簡要框圖
2.2 總體電路原理圖:
第三章 各模塊功能介紹
3.1障礙物測距系統(tǒng):
方案一:超聲波視覺
優(yōu)點(diǎn):價(jià)格合理,夜間不受影響。易于多目標(biāo)測量和分類,分辨率好。缺點(diǎn):測量范圍小,對天氣變化敏感。不能直接測量距離,算法復(fù)雜,處理速度慢。
方案二:激光雷達(dá)MMW雷達(dá)
優(yōu)點(diǎn):夜間不受影響,不受燈光、天氣影響。缺點(diǎn):對水、灰塵、燈光敏感、價(jià)格貴。
探測障礙的最簡單的方法是使用超聲波傳感器,它是利用向目標(biāo)發(fā)射超聲波脈沖,計(jì)算其往返時(shí)間來判定距離的。算法簡單,價(jià)格合理。所以我們選擇超聲波傳感器。
超聲波測距原理:
首先利用單片機(jī)輸出一個40kHz的觸發(fā)信號,把觸發(fā)信號通過TRIG管腳輸入到超聲波測距模塊,再由超聲波測距模塊的發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)單片機(jī)通過軟件開始計(jì)時(shí),超聲波在空氣中傳播,途中碰到障礙物返回,超聲波測距模塊的接收器收到反射波后通過產(chǎn)生一個回應(yīng)信號并通過ECHO腳反饋給單片機(jī),此時(shí)單片機(jī)就立即停止計(jì)時(shí)。時(shí)序圖如圖1所示。由于超聲波在空氣中的傳播速度為340m/s,根據(jù)計(jì)時(shí)器記錄的時(shí)間t,就可以計(jì)算出發(fā)射點(diǎn)距障礙物的距離,即:S=VT/2,通過單片機(jī)來算出距離。
圖3.1:超聲波測距原理
3.2顯示模塊:
方案一:用LCD顯示。
優(yōu)點(diǎn):輻射小、顯示內(nèi)容多 、低耗能、散熱小、顯示的畫面穩(wěn)定不閃爍。缺點(diǎn):不適合做圖,圖像還原不好、有可視范圍限制 。
方案二:用LED顯示。
優(yōu)點(diǎn):亮度高、成本低,缺點(diǎn):不能顯示漢字,顯示內(nèi)容較少。
對于本課題的要求,我們選擇LCD實(shí)現(xiàn)功能,顯示內(nèi)容多,低功耗,顯示畫面穩(wěn)定不閃爍,硬件電路設(shè)計(jì)簡單。
字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號等點(diǎn)陣式LCD,目前常用16*1,16*2,20*2和40*2行等的模塊。下面以長沙太陽人電子有限公司的1602字符型液晶顯示器為例,介紹其用法。一般1602字符型液晶顯示器實(shí)物如圖:
圖 3.2.1:1602字符型液晶顯示器
3.2.1 1602LCD主要技術(shù)參數(shù):
顯示容量:16×2個字符
芯片工作電壓:4.5—5.5V
工作電流:2.0mA(5.0V)
模塊最佳工作電壓:5.0V
字符尺寸:2.95×4.35(W×H)mm
3.2.2 引腳功能說明:
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3-2-1所示:
編號 符號 引腳說明 編號 符號 引腳說明
1 VSS 電源地 9 D2 數(shù)據(jù)
2 VDD 電源正極 10 D3 數(shù)據(jù)
3 VL 液晶顯示偏壓 11 D4 數(shù)據(jù)
4 RS 數(shù)據(jù)/命令選擇 12 D5 數(shù)據(jù)
5 R/W 讀/寫選擇 13 D6 數(shù)據(jù)
6 E 使能信號 14 D7 數(shù)據(jù)
7 D0 數(shù)據(jù) 15 BLA 背光源正極
8 D1 數(shù)據(jù) 16 BLK 背光源負(fù)極
表3-2-1:引腳接口說明表
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VL為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比度最高,對比度過高時(shí)會產(chǎn)生“鬼影”,使用時(shí)可以通過一個10K的電位器調(diào)整對比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:R/W為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號,當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
3.2.3 1602LCD的指令說明及時(shí)序:
1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表3-2-2所示:
序號 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1 清顯示 0 0 0 0 0 0 0 0 0 1
2 光標(biāo)返回 0 0 0 0 0 0 0 0 1 *
3 置輸入模式 0 0 0 0 0 0 0 1 I/D S
4 顯示開/關(guān)控制 0 0 0 0 0 0 1 D C B
5 光標(biāo)或字符移位 0 0 0 0 0 1 S/C R/L * *
6 置功能 0 0 0 0 1 DL N F * *
7 置字符發(fā)生存貯器地址 0 0 0 1 字符發(fā)生存貯器地址
8 置數(shù)據(jù)存貯器地址 0 0 1 顯示數(shù)據(jù)存貯器地址
9 讀忙標(biāo)志或地址 0 1 BF 計(jì)數(shù)器地址
10 寫數(shù)到CGRAM或DDRAM) 1 0 要寫的數(shù)據(jù)內(nèi)容
11 從CGRAM或DDRAM讀數(shù) 1 1 讀出的數(shù)據(jù)內(nèi)容
表3-2-2:控制命令表
1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明:1為高電平、0為低電平)
指令1:清顯示,指令碼01H,光標(biāo)復(fù)位到地址00H位置。
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。
指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動方向,高電平右移,低電平左移 S:屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。
指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動顯示的文字,低電平時(shí)移動光標(biāo)。
指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。
指令7:字符發(fā)生器RAM地址設(shè)置。
指令8:DDRAM地址設(shè)置。
指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。
指令10:寫數(shù)據(jù)。
指令11:讀數(shù)據(jù)。
與HD44780相兼容的芯片時(shí)序表如下:
讀狀態(tài) 輸入 RS=L,R/W=H,E=H 輸出 D0—D7=狀態(tài)字
寫指令 輸入 RS=L,R/W=L,D0—D7=指令碼,E=高脈沖 輸出 無
讀數(shù)據(jù) 輸入 RS=H,R/W=H,E=H 輸出 D0—D7=數(shù)據(jù)
寫數(shù)據(jù) 輸入 RS=H,R/W=L,D0—D7=數(shù)據(jù),E=高脈沖 輸出 無
表3-2-3:基本操作時(shí)序表
讀寫操作時(shí)序如圖3.2.2和3.2.3所示:
圖 3.2.2 :讀操作時(shí)序
圖 3.2.3 :寫操作時(shí)序
3.3驅(qū)動模塊:
方案一:采用ULN2003驅(qū)動,它是由7組達(dá)林頓晶體管陣列和相應(yīng)的電阻網(wǎng)絡(luò)以及鉗位二極管網(wǎng)絡(luò)構(gòu)成,具有同時(shí)驅(qū)動7組負(fù)載的能力,一般用于高速大功率驅(qū)動電路。所以我們不采用這個方案。
方案二:采用由雙極性管組成的H橋電路(L298N)。用單片機(jī)控制晶體管使之工作在占空比可調(diào)的開關(guān)狀態(tài),精確調(diào)整電機(jī)轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,則效率非常高;H橋電路保證了可以簡單地實(shí)現(xiàn)轉(zhuǎn)速和方向的控制,電子開關(guān)的速度很快,穩(wěn)定性也很高。而且它有更強(qiáng)的驅(qū)動能力。L298N有過電流保護(hù)功能,當(dāng)出現(xiàn)電機(jī)卡死時(shí),可以保護(hù)電路和電機(jī)等。
L298N有過電流保護(hù)功能,當(dāng)出現(xiàn)電機(jī)卡死時(shí),可以保護(hù)電路和電機(jī)
等。所以我們選擇L298N。
下圖為L298內(nèi)部圖:
圖3.3:L298內(nèi)部原理圖
L298各引腳功能,如下表。
引腳 功能
1、15 SEN1、SEN2 分別為兩個H橋的電流反饋腳,不用時(shí)可以接地
2、3 1Y1、1Y2 輸出端,與對應(yīng)輸入端(IN1、IN2)同邏輯
4 VS 驅(qū)動電壓,最小值需比輸入的低電平電壓高2.5V
5、7 IN1、IN2 輸入端,TTL電平兼容
6、11 EN1、EN2 使能端,低電平禁止輸出
8 GND 地
9 VSS 邏輯電源,4.5~7V
10、12 IN3、IN4 輸入端,TTL電平兼容
13、14 2Y1、2Y2 輸出端,與對應(yīng)輸入端(IN3、IN4)同邏輯
表3-3-1 封裝引腳及功能
驅(qū)動電機(jī)的運(yùn)行,I/O端口狀態(tài)與電機(jī)制動對照表,如下。
IN1 IN2 IN3 IN4 EN1 EN2 轉(zhuǎn)速
1 0 1 0 1 1 正轉(zhuǎn)
0 1 0 1 1 1 反轉(zhuǎn)
1 1 1 1 1 1 停止
0 0 0 0 1 1 停止
X X X X 0 0 停止
表3-3-2 I/O端口狀態(tài)與電機(jī)制動對照表
3.4電源模塊:
我們選擇采用5v的獨(dú)立的穩(wěn)壓電源。
優(yōu)點(diǎn):穩(wěn)定可靠,且有各種成熟電路可供選用;
缺點(diǎn):各模塊都采用獨(dú)立電源,會使系統(tǒng)復(fù)雜,且可能影響電路電平。
綜合電源模塊的缺優(yōu)點(diǎn),和電路的實(shí)際需求,我們采用了兩塊獨(dú)立穩(wěn)壓電源,一塊給小車的電機(jī)驅(qū)動供電,一塊給小車的芯片供電,這樣彌補(bǔ)了單個獨(dú)立電源供電出現(xiàn)電力不足的情況。
第四章 軟件設(shè)計(jì)
4.1 程序設(shè)計(jì)流程圖
本設(shè)計(jì)系統(tǒng)軟件采用模塊化結(jié)構(gòu),由主程序﹑定時(shí)子程序、電機(jī)驅(qū)動子程序﹑中斷子程序、顯示子程序﹑算法子程序構(gòu)成。主程序流程圖如圖4.1所示。
圖 4.1:主程序流程圖
4.2 關(guān)鍵程序設(shè)計(jì):
1. PWM產(chǎn)生程序設(shè)計(jì):
void Timer2(void) interrupt 5
{
TF2=0;
RCAP2H=0x0fe;
RCAP2L=0x33;
++click;
if (click>=100) click=0;
if (click<=ZK1)
PWM1=1;
else
PWM1=0;
if (click<=ZK2)
PWM2=1;
else
PWM2=0;
}
2.超聲波的發(fā)射與接受程序設(shè)計(jì):
void zd3() interrupt 3
{
TH1=0x0f8;
TL1=0x30;
timer++;
if(timer>=200)
{
timer=0;
TX=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
3.1602的初始化程序的設(shè)計(jì):
void ini_lcd1602()
{
write_lcd1602(0x38,0);
delay(1);
write_lcd1602(0x0c,0);
delay(1);
write_lcd1602(0x06,0);
delay(1);
write_lcd1602(0x01,0);
delay(1);
}
4.1602的寫程序的設(shè)計(jì):
void write_lcd1602(uchar cmd,uchar i)
{
lcd_mang();
rs=i;
rw=0;
e=0;
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
e=0;
}
5.1602的判忙程序的設(shè)計(jì):
void lcd_mang()
{
rs=0;
rw=1;
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
while(P0&0x80);
e=0;
}
第五章 系統(tǒng)調(diào)試
5.1 調(diào)試的思路:
本設(shè)計(jì)的智能避障小車,一共分為四大模塊。分別是:L298驅(qū)動模塊,超聲波測距模塊,LCD顯示模塊以及蜂鳴器報(bào)警模塊。調(diào)試的時(shí)候我們可以把四大模塊分別調(diào)試,最后再把所有模塊組合起來再進(jìn)行最后的整機(jī)調(diào)試這樣一個調(diào)試的思路。
5.2 各模塊的調(diào)試:
5.2.1 LCD的調(diào)試:首先根據(jù)電路圖將顯示模塊焊好,再用萬用表檢查電路是否出現(xiàn)短路。一切都正常的情況下,將LCD測試程序燒到芯片中,觀察LCD的顯示是否正確,如圖5.2.1。一開始可能什么都不顯示,這個時(shí)候我們只需調(diào)整LCD 3腳的變阻器阻值即可。
圖 5.2.1:LCD測試圖
5.2.2 超聲波的調(diào)試:
超聲波模塊一共有四個腳,一個是VCC,一個是GND,還有兩個分別是超聲波的發(fā)射和接收引腳。連接電路時(shí)候只需引出四根插線,分別連接到89S52的對應(yīng)引腳,燒制好測試程序,測試結(jié)果圖如5.2.2。本設(shè)計(jì)四根插線分別連接到VCC,GND,還有發(fā)射和接收引腳分別為:P3.0和P3.2口。
圖 5.2.2:超聲波測試圖
5.2.3 蜂鳴器報(bào)警調(diào)試:
蜂鳴器的連接很簡單,只需用一個PNP管來做驅(qū)動,當(dāng)?shù)碗娖降絹頃r(shí)蜂鳴器發(fā)出聲音,當(dāng)高電平到來時(shí)沒有聲音。本設(shè)計(jì)中,蜂鳴器連接到P3.4口,如圖5.2.3所示。
圖5.2.3:蜂鳴器報(bào)警電路
5.3 調(diào)試心得:
通過系統(tǒng)的調(diào)試,我們可以學(xué)到更多的知識,我們也可以發(fā)現(xiàn)仿真和實(shí)物調(diào)試不同的地方。程序設(shè)計(jì)的結(jié)果可能往往和實(shí)物調(diào)試出的結(jié)果不一樣,這就需要我們?nèi)ニ伎,去斟酌,去改進(jìn),以達(dá)到預(yù)期效果。通過程序和硬件的調(diào)試,我們可以更深刻的理解各功能模塊之間的聯(lián)系,也可以明白各調(diào)試的步驟。
在調(diào)試的過程中,我也遇到許多問題,例如:我在宿舍調(diào)試好小車之后,帶到班級時(shí)候在插上電源試圖讓小車跑起來時(shí)候,發(fā)現(xiàn)超聲波模塊失去了作用,LCD不再顯示數(shù)據(jù)了,后來我用電腦USB口供電發(fā)現(xiàn)也不可以,檢查了許久才發(fā)現(xiàn)是超聲波模塊上的電源線和地線的兩根插線出現(xiàn)了斷路,換線之后LCD正常顯示數(shù)值,小車正常行駛。整個調(diào)試過程需要硬件和軟件結(jié)合起來調(diào)試,要仔細(xì)檢查電路,認(rèn)真思考程序。
硬件部分調(diào)試的步驟:
1) 檢查原理圖連接是否正確
2) 用萬用表檢查是否有虛焊,引腳短路現(xiàn)象
3) 檢查原理圖與電路板上引腳是否一致
4) 各模塊逐個調(diào)試,看看各模塊是否能用
5) 整合在一起調(diào)試,用電腦USB口供電
6) 在5的基礎(chǔ)上用電池供電
第六章 結(jié)論與展望
6.1 結(jié)論:
歷時(shí)三個月的設(shè)計(jì)過程中,我首先邊查資料,邊在實(shí)驗(yàn)室焊接小車的線路板。在焊接過程中,我感覺到即使是一個簡單的電路,要想很輕松的焊好,也不是很容易的事情。有時(shí)是“虛焊”的原因,有時(shí)可能是阻值選錯。在焊接顯示電路時(shí),我就錯將680歐的電阻焊成了6.8千歐。這使我深深感受到理論與實(shí)際間的差距。在調(diào)試過程中,發(fā)現(xiàn)插上編程器后不能燒制程序,通過檢查電路發(fā)現(xiàn),AT89S52芯片的使能端沒有接VCC。改好之后重新燒制,發(fā)現(xiàn)還是不可以,通過再次檢查,發(fā)現(xiàn)是共陰管的驅(qū)動芯片74LS245的引腳出現(xiàn)焊接錯誤。通過這些調(diào)試,提高了我檢查電路的能力,以及鞏固了電路圖的知識。通過這樣的設(shè)計(jì),提高了我的動手能力。每天在實(shí)驗(yàn)室除了焊接線路板,還可以上機(jī)編程,使我軟件調(diào)試知識也提高了。本設(shè)計(jì)采用的是89S52單片機(jī),這主要是因?yàn)樵搯纹瑱C(jī)的穩(wěn)定性比較好。還可以采用其它系列的單片機(jī)。比如采用陵陽單片機(jī),就可以簡化編程,但其穩(wěn)定性不是很好。
6.2 展望:
1、在本課題的基礎(chǔ)上,我們可以在小車的底座下面裝一個吸塵裝置,這樣就可以在小車行駛的過程中吸除一些預(yù)先放好的小紙屑。
2、設(shè)計(jì)出兩輛小車,一輛小車放在另一輛的前面。當(dāng)前面一輛小車起動時(shí)候,后面一輛小車也起動,前面一輛小車轉(zhuǎn)彎的時(shí)候后面一輛也跟著轉(zhuǎn)彎,前面一輛小車停止時(shí),后面一輛也跟著停止。
致 謝
歷時(shí)三個月的畢業(yè)設(shè)計(jì)已經(jīng)告一段落。經(jīng)過自己不斷的搜索努力以及白老師的耐心指導(dǎo)和熱情幫助,本設(shè)計(jì)已經(jīng)基本完成。在這段時(shí)間里,白老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和熱忱的工作作風(fēng)令我十分欽佩,他的指導(dǎo)使我受益非淺。
通過這次畢業(yè)設(shè)計(jì),使我深刻地認(rèn)識到學(xué)好專業(yè)知識的重要性,也理解了理論聯(lián)系實(shí)際的含義,并且檢驗(yàn)了大學(xué)四年的學(xué)習(xí)成果。雖然在這次設(shè)計(jì)中對于知識的運(yùn)用和銜接還不夠熟練。但是我將在以后的工作和學(xué)習(xí)中繼續(xù)努力、不斷完善。這三個月的設(shè)計(jì)是對過去所學(xué)知識的系統(tǒng)提高和擴(kuò)充的過程,為今后的發(fā)展打下了良好的基礎(chǔ)。
由于自身水平有限,設(shè)計(jì)中一定存在很多不足之處,敬請各位老師批評指正。
參考資料
1 趙負(fù)圖,傳感器集成電路手冊.第一版,化學(xué)工業(yè)出版社,2004,590~591
2李華,MCS-51系列單片機(jī)實(shí)用接口技術(shù),第三版,北京:1997年
3張紅潤,實(shí)用自動控制,成都:科技大學(xué)出版社。1990年1月
4康華光,電子技術(shù)基礎(chǔ),北京:高等教育出版社,1983年10月
5潘新民,微型計(jì)算機(jī)控制技術(shù),北京:人民郵電技術(shù)出版社,1988年3月
6趙依軍,單片機(jī)微型接口技術(shù)。北京:人民郵電技術(shù)出版社,1989年3月
7李廣弟,單片機(jī)基礎(chǔ),北京:北京航空航天大學(xué)出版社,2001
8胡漢才,單片機(jī)原理及其接口技術(shù),北京:清華大學(xué)出版社,1996
9王毅,單片機(jī)器件應(yīng)用手冊,北京:人民郵電出版社,1995
附錄
1.元器件清單:
序號 元件名稱 數(shù)量 參數(shù)
1 AT89S52單片機(jī) 1 ——
2 超聲波模塊 1 ——
3 L298n 1
4 智能避障小車底盤 1
5 蜂鳴器 1
6 LCD液晶屏 1
2.樣機(jī)實(shí)物照片:
3.電路原理圖:
相關(guān)程序
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char i;
sbit rs=P2^6; //定義引腳
sbit rw=P2^5;
sbit e=P2^7;
sbit TX=P3^0; //觸發(fā)信號引腳
sbit FM=P3^4;
sbit PWM1=P3^6; //pwm信號輸出
sbit PWM2=P3^7;
static char click=0;
unsigned char ZK1,ZK2;
unsigned int time=0;
unsigned int timer=0;
unsigned long S;
bit flag =0;
unsigned char code ASCII[19] = {'0','1','2','3','4','5','6','7','8','9','.','-','M','J','U',' ','L','I',':'};
static unsigned char DisNum = 0; //顯示用指針
unsigned long S=0;
unsigned char disbuff[11] ={ 0};
void Conut(void)
{
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time*1.7)/100;
disbuff[0]=13;
disbuff[1]=14;
disbuff[2]=15;
disbuff[3]=16;
disbuff[4]=17;
disbuff[5]=18;
disbuff[6]=S%1000/100;
disbuff[7]=10;
disbuff[8]=S%1000%100/10;
disbuff[9]=S%1000%10 %10;
disbuff[10]=12;
}
void delay_1(void) //誤差 0us
{
unsigned char a,b;
for(b=215;b>0;b--)
for(a=45;a>0;a--);
}
void delay(uchar a)
{
uchar i;
while(a--)
{
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
//判忙
void lcd_mang()
{
rs=0;
rw=1;
e=1;
_nop_();
_nop_();
_nop_();
_nop_();
while(P0&0x80);
e=0;
}
//1602的寫
void write_lcd1602(uchar cmd,uchar i) //當(dāng)i為0的時(shí)候?yàn)橄?602寫指令為1寫數(shù)據(jù)
{
lcd_mang();
rs=i;
rw=0;
e=0;
_nop_();
_nop_();
e=1;
_nop_();
_nop_();
P0=cmd;
_nop_();
_nop_();
_nop_();
_nop_();
e=0;
}
//1602的初始化
void ini_lcd1602()
{
write_lcd1602(0x38,0);
delay(1);
write_lcd1602(0x0c,0);
delay(1);
write_lcd1602(0x06,0);
delay(1);
write_lcd1602(0x01,0);
delay(1);
}
void Timer2Interrupt()
{
RCAP2H=0x0fe;
RCAP2L=0x33;
ET2=1; // 允許T2定時(shí)器中斷
EA=1; // 打開總中斷
TR2=1; // 啟動T2定時(shí)器
}
void zd0() interrupt 1
{
flag=1;
}
void zd3() interrupt 3 //T1中斷用來掃描數(shù)碼管和計(jì)800MS啟動模塊
{
TH1=0x0f8;
TL1=0x30;
timer++;
if(timer>=200)
{
timer=0;
TX=1; //800MS 啟動一次模塊
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
TX=0;
}
}
void Timer2(void) interrupt 5
{
TF2=0; // T2定時(shí)器發(fā)生溢出中斷時(shí),需要用戶自己清除溢出標(biāo)記
RCAP2H=0x0fe;
RCAP2L=0x33; /*恢復(fù)定時(shí)器初始值*/
++click;
if (click>=100) click=0;
if (click<=ZK1)
PWM1=1;
else
PWM1=0;
if (click<=ZK2)
PWM2=1;
else
PWM2=0;
}
//主函數(shù)
void main()
{
TMOD=0x19; //設(shè)T0為方式1,GATE=1;
TH0=0;
TL0=0;
TH1=0x0f8; //2MS定時(shí)
TL1=0x30;
ET0=1; //允許T0中斷
ET1=1; //允許T1中斷
TR1=1; //開啟定時(shí)器
Timer2Interrupt();
EA=1; //開啟總中斷
ZK1=20;
ZK2=20;
ini_lcd1602();
while(1)
{
while(INT0==0); //當(dāng)RX為零時(shí)等待
TR0=1;
while(INT0==1); //當(dāng)RX為1計(jì)數(shù)并等待
TR0=0; //關(guān)閉計(jì)數(shù)
Conut(); //計(jì)算
if (S>40) //控制加速
{
FM=1;
P1=0xaf;
ZK1=ZK1-5;
ZK2=ZK2-5;
}
else
if(S<30) //控制轉(zhuǎn)向
{
FM=0;
ZK1=ZK1+5;
ZK2=ZK2+5;
P1=0X8F;
delay_1();
}
if (ZK1>99) ZK1=1;
if (ZK1<1) ZK1=10;
if (ZK2>99) ZK2=1;
if (ZK2<1) ZK2=10;
write_lcd1602(0x80,0);
for(i=0;i<=10;i++)
write_lcd1602(ASCII[disbuff[i]],1);
}
}
|