找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23928|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

超聲波避障小車的設(shè)計(jì)與制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:65619 發(fā)表于 2014-8-30 18:34 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式

超聲波避障小車的設(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);  
       
          }
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2014-8-30 21:33 | 只看該作者
怎么沒有圖呢?
回復(fù)

使用道具 舉報(bào)

板凳
ID:72600 發(fā)表于 2015-1-21 18:04 | 只看該作者
圖咋看不見呢
回復(fù)

使用道具 舉報(bào)

地板
ID:115002 發(fā)表于 2016-4-18 21:35 | 只看該作者
追加,怎么美圖呢?
回復(fù)

使用道具 舉報(bào)

5#
ID:91096 發(fā)表于 2016-5-31 10:07 | 只看該作者
求圖啊啊啊啊啊
回復(fù)

使用道具 舉報(bào)

6#
ID:132602 發(fā)表于 2016-7-23 14:34 | 只看該作者
沒有圖啊。。。
回復(fù)

使用道具 舉報(bào)

7#
ID:497418 發(fā)表于 2019-4-28 15:40 | 只看該作者
沒有圖
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表