單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)基于51單片機(jī)的避障小車設(shè)計(jì)_第1頁(yè)
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)基于51單片機(jī)的避障小車設(shè)計(jì)_第2頁(yè)
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)基于51單片機(jī)的避障小車設(shè)計(jì)_第3頁(yè)
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)基于51單片機(jī)的避障小車設(shè)計(jì)_第4頁(yè)
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)基于51單片機(jī)的避障小車設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩8頁(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、單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)評(píng)語(yǔ):考勤10分守紀(jì)10分過程30分設(shè)計(jì)報(bào)告30分答辯10分總成績(jī)(100分)專 業(yè):班 級(jí):姓 名:學(xué) 號(hào):指導(dǎo)教師:基于單片機(jī)的避障小車設(shè)計(jì)1引言本課程設(shè)計(jì)以at89c51單片機(jī)為核心,完成了一輛利用超聲波傳感器來(lái)實(shí)現(xiàn)避障功能的小車,使小車對(duì)其運(yùn)動(dòng)方向受到的阻礙作出躲避動(dòng)作。本次設(shè)計(jì)主要研究小車的避障功能,當(dāng)距離障礙物大于30cm時(shí),小車前進(jìn);當(dāng)距離障礙物小于20cm時(shí),小車停止,舵機(jī)分別旋轉(zhuǎn)到前、左、右三向,從而使超聲波模塊進(jìn)行測(cè)距,并且小車采取相應(yīng)的避障措施。2整體設(shè)計(jì)方案及原理2.1總體設(shè)計(jì)方案本系統(tǒng)選用at89c51單片機(jī)為主控機(jī)。通過擴(kuò)展必要的外圍接口電路

2、,實(shí)現(xiàn)對(duì)避障小車的設(shè)計(jì),具體設(shè)計(jì)如下:(1)由于小車要進(jìn)行測(cè)距,為了得到較好的避障效果和較精確的距離信息,經(jīng)綜合分析后,決定采用超聲波模塊進(jìn)行非接觸型測(cè)距。避障小車與障礙物之間的實(shí)際距離通過數(shù)碼管進(jìn)行顯示。(2)避障小車采用差速方式控制行進(jìn)方向,通過四個(gè)直流電機(jī)控制四輪旋轉(zhuǎn),并采用l298n雙h橋直流電機(jī)驅(qū)動(dòng)芯片控制直流電機(jī)正反轉(zhuǎn)。(3)超聲波模塊分別檢測(cè)前方、左側(cè)及右側(cè)與障礙物之間的距離,因此需要采用舵機(jī)進(jìn)行旋轉(zhuǎn)完成超聲波模塊三向測(cè)距。2.2系統(tǒng)組成框圖系統(tǒng)模塊圖如圖1所示。圖1系統(tǒng)模塊圖3 硬件設(shè)計(jì)本設(shè)計(jì)選用at89c51單片機(jī)為主控單元;驅(qū)動(dòng)部分:采用l298n雙h橋直流電機(jī)驅(qū)動(dòng)模塊;測(cè)

3、距避障部分:采用us100超聲波傳感器模塊;此外,還采用sg90舵機(jī),實(shí)現(xiàn)超聲波模塊方向的變化。該系統(tǒng)整體電路原理圖如附圖1所示。3.1電機(jī)驅(qū)動(dòng)模塊本次課程設(shè)計(jì)采用l298n雙h橋直流電機(jī)驅(qū)動(dòng)模塊,采用sgs公司原裝全新的l298n芯片,內(nèi)部包含4通道邏輯驅(qū)動(dòng)電路,可以直接驅(qū)動(dòng)兩路3-16v直流電機(jī),并提供了5v輸出接口(輸入最低只要6v),可以給5v單片機(jī)電路系統(tǒng)供電(低紋波系數(shù)),是智能小車電機(jī)驅(qū)動(dòng)的必備利器。l298n芯片是一種二相和四相電機(jī)的專用驅(qū)動(dòng)器,即內(nèi)含二個(gè)h橋的高電壓大電流雙全橋式驅(qū)動(dòng)器,接收標(biāo)準(zhǔn)ttl邏輯電平信號(hào),可驅(qū)動(dòng)46v、2a以下的電機(jī)。該芯片引腳中,1腳和15腳可單獨(dú)

4、引出連接電流采樣電阻器,形成電流傳感信號(hào)。l298n可驅(qū)動(dòng)2個(gè)電機(jī),outl、out2和out3、out4之間分別接2個(gè)電動(dòng)機(jī)。5、7、10、12腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn),ena,enb接控制使能端,控制電機(jī)的停轉(zhuǎn)。電機(jī)驅(qū)動(dòng)模塊電路如圖2所示。圖2電機(jī)驅(qū)動(dòng)模塊電路3.2測(cè)距避障模塊智能車避障系統(tǒng)中的傳感器一般分為接觸型和非接觸型兩種,接觸型相對(duì)比較簡(jiǎn)單。本次設(shè)計(jì)使用了超聲波傳感器進(jìn)行測(cè)量,也即非接觸型傳感器。us-100超聲波測(cè)距模塊可實(shí)現(xiàn)04.5m的非接觸測(cè)距功能,擁有2.45.5v的寬電壓輸入范圍,靜態(tài)功耗低于2ma,自帶溫度傳感器對(duì)測(cè)距結(jié)果進(jìn)行校正,同時(shí)具有g(shù)pio,串口等多種

5、通信方式,內(nèi)帶看門狗,工作穩(wěn)定可靠。超聲波是一種振動(dòng)頻率高于聲波的機(jī)械波,由換能晶片在電壓的激勵(lì)下發(fā)生震動(dòng)產(chǎn)生的,在碰到雜質(zhì)獲分界面會(huì)產(chǎn)生顯著反射從而形成反射回波,超聲波傳感器就是根據(jù)超聲波在障礙物界面上的反射來(lái)判斷檢測(cè)物體的存在及距離。3.3 sg90舵機(jī)sg90舵機(jī)是一種位置伺服的驅(qū)動(dòng)器,主要是由外殼、電路板、無(wú)核心馬達(dá)、齒輪與位置檢測(cè)器所構(gòu)成。該舵機(jī)旋轉(zhuǎn)的角度范圍是0度到180度。sg90舵機(jī)外接三根線,分別用棕、紅、橙三種顏色進(jìn)行區(qū)分,棕色為接地線,紅色為電源正極線,橙色為信號(hào)線。舵機(jī)轉(zhuǎn)動(dòng)的角度是通過調(diào)節(jié)pwm信號(hào)的占空比來(lái)實(shí)現(xiàn)的。工作原理是由接收機(jī)或者單片機(jī)發(fā)出信號(hào)給舵機(jī),其內(nèi)部有一

6、個(gè)基準(zhǔn)電路,產(chǎn)生周期為20ms,寬度為1.5ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。經(jīng)由電路板上的ic判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)無(wú)核心馬達(dá)開始轉(zhuǎn)動(dòng),透過減速齒輪將動(dòng)力傳至擺臂,同時(shí)由位置檢測(cè)器送回信號(hào),判斷是否已經(jīng)到達(dá)定位。其適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。3.4單片機(jī)控制模塊單片機(jī)是靠程序運(yùn)行的,并且可以通過修改程序?qū)崿F(xiàn)不同的功能,尤其是一些特殊復(fù)雜的功能。通過使用單片機(jī)編寫程序完成控制功能,可以實(shí)現(xiàn)高智能,高效率,以及高可靠性。單片機(jī)控制模塊電路如圖3所示。圖3單片機(jī)控制模塊電路4軟件設(shè)計(jì)4.1 流程圖系統(tǒng)總流程圖如附錄1所示。4.2程序清單c語(yǔ)言

7、編輯程序,程序清單如附錄2所示。4.3軟件調(diào)試軟件的調(diào)試主要通過keil uvision2軟件進(jìn)行操作,對(duì)程序編寫過程中的錯(cuò)誤進(jìn)行查找,找出錯(cuò)誤,進(jìn)行修改,然后再進(jìn)行編譯直至編譯成功,生成hex文件,才能下載到單片機(jī)里,繼而實(shí)現(xiàn)相應(yīng)功能。4.4系統(tǒng)仿真及實(shí)際調(diào)試在程序設(shè)計(jì)方法上,模塊化程序設(shè)計(jì)是單片機(jī)應(yīng)用中最常用的程序設(shè)計(jì)方法設(shè)計(jì)的中心思想是把一個(gè)復(fù)雜應(yīng)用程序按整體功能劃分成若干相對(duì)獨(dú)立的程序模塊,各模塊可以單獨(dú)設(shè)計(jì)、編程和調(diào)試,然后組合起來(lái)這種方法便于設(shè)計(jì)和調(diào)試,容易實(shí)現(xiàn)多個(gè)程序共存,但各個(gè)模塊之間的連接有一定的難度根據(jù)需要我們可以采用自上而下的程序設(shè)計(jì)方法,此方法先從主程序開始設(shè)計(jì),然后再

8、編制各從屬程序和子程序,層層細(xì)化逐步求精,最終完成一個(gè)復(fù)雜程序的設(shè)計(jì)通過對(duì)實(shí)際性能的分析,可以得到本次設(shè)計(jì)滿足設(shè)計(jì)的要求。4.5出現(xiàn)故障及其原因(1) 外接電源正負(fù)極接反,導(dǎo)致小車電機(jī)驅(qū)動(dòng)模塊損壞。(2) 實(shí)踐經(jīng)驗(yàn)不夠豐富,解決實(shí)際問題需要花費(fèi)較多的時(shí)間。5總結(jié)本次課程設(shè)計(jì)是對(duì)所學(xué)知識(shí)的一次綜合性運(yùn)用。在設(shè)計(jì)的過程中發(fā)現(xiàn)了自身知識(shí)的不足,也發(fā)現(xiàn)我們必須具備專業(yè)基礎(chǔ)知識(shí),才能成功的設(shè)計(jì)出一件合格的東西。這次課程設(shè)計(jì)收獲很多,也學(xué)會(huì)了很多新的東西,比如一些仿真軟件的應(yīng)用,最典型的就是proteus軟件的應(yīng)用,以及與keil軟件的聯(lián)合使用。我覺得在這次設(shè)計(jì)的過程中,很多自己解決不了的問題,只有虛心請(qǐng)

9、教別人才能有效的解決問題,我覺得人與人之間的相互幫助很有必要,這樣不僅能幫助大家很快的解決問題,還能提高我們每個(gè)人的實(shí)際水平,這些能力對(duì)于我們今后的學(xué)習(xí)和工作都很有幫助。其次就本次設(shè)計(jì)而言,避障小車應(yīng)進(jìn)行更加先進(jìn)調(diào)速控制,如果能夠進(jìn)一步增加測(cè)速模塊以及速度顯示,該避障小車的功能將更加強(qiáng)大。在本次設(shè)計(jì)過程中遇到不少問題,在王思明老師和同學(xué)的幫助和配合下才順利的完成了本次課程設(shè)計(jì)。王思明老師給予了我們極大的幫助,不僅從知識(shí)方面引導(dǎo)了我們的設(shè)計(jì)思路,同時(shí),在人生觀上也給了我們不少的啟示。6參考文獻(xiàn)1 王思明.單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)m.北京:科學(xué)出版社,20122 胡輝.單片機(jī)原理與應(yīng)用m.北京:中

10、國(guó)水利水電出版社,2007:10-38.3 林志琦.單片機(jī)原理接口及應(yīng)用m.北京:中國(guó)水利水電出版社,2007:25-54.4 趙克林.c語(yǔ)言實(shí)例教程m.北京:人民郵電出版社,2007:48-96.5 姜承昊.應(yīng)用與制造新技術(shù)新工藝m.北京:中國(guó)科學(xué)技術(shù)文獻(xiàn)出版社,2008:37-95.附錄1圖2系統(tǒng)總流程圖附錄2/名稱:基于51單片機(jī)的避障小車#include<at89x51.h>#include <intrins.h>#define sevro_moto_pwm p2_7/接舵機(jī)信號(hào)端輸入pwm信號(hào)調(diào)節(jié)速度#define echo p2_4 /超聲波接口定義#def

11、ine trig p2_5 /超聲波接口定義#define left_moto_gop1_0=1,p1_1=0,p1_2=1,p1_3=0; /左邊兩電機(jī)向前走#define left_moto_backp1_0=0,p1_1=1,p1_2=0,p1_3=1; /左邊兩電機(jī)向后轉(zhuǎn)#define left_moto_stopp1_0=0,p1_1=0,p1_2=0,p1_3=0; /左邊兩電機(jī)停轉(zhuǎn)#define right_moto_go p1_4=1,p1_5=0,p1_6=1,p1_7=0;/右邊兩電機(jī)向前走#define right_moto_back p1_4=0,p1_5=1,p1_6

12、=0,p1_7=1;/右邊兩電機(jī)向前走#define right_moto_stop p1_4=0,p1_5=0,p1_6=0,p1_7=0;/右邊兩電機(jī)停轉(zhuǎn)unsigned char const discode = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff/*-*/;/定義表unsigned char const positon3= 0xfe,0xfd,0xfb;unsigned char disbuff4= 0,0,0,0,; unsigned char posit=0; /全局變量unsigned char p

13、wm_val_left = 0;/變量定義unsigned char push_val_left =14;/舵機(jī)歸中,產(chǎn)生約,1.5ms 信號(hào)unsigned long s=0;unsigned long s1=0;unsigned long s2=0;unsigned long s3=0;unsigned long s4=0;unsigned int time=0;/時(shí)間變量unsigned int timer=0; /延時(shí)基準(zhǔn)變量unsigned char timer1=0; /掃描時(shí)間變量/*/void delay(unsigned int k) /延時(shí)函數(shù),輸入外循環(huán)變量k unsig

14、ned int x,y; /總延時(shí)時(shí)間,(若晶振12mhz)延時(shí)時(shí)間(t=2*k)msfor(x=0;x<k;x+) for(y=0;y<2000;y+);/*/ void display(void) /掃描數(shù)碼管 if(posit=0) p0=(discodedisbuffposit)&0x7f;/產(chǎn)生點(diǎn) else p0=discodedisbuffposit; if(posit=0)p2_1=0;p2_2=1;p2_3=1; if(posit=1)p2_1=1;p2_2=0;p2_3=1; if(posit=2)p2_1=1;p2_2=1;p2_3=0; if(+pos

15、it>=3) posit=0;/*/ void startmodule() /啟動(dòng)測(cè)距信號(hào) trig=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); trig=0; /*/ void conut(void) /計(jì)算距離 while(!echo); /當(dāng)rx為

16、零時(shí)等待 tr0=1; /開啟計(jì)數(shù) while(echo); /當(dāng)rx為1計(jì)數(shù)并等待 tr0=0; /關(guān)閉計(jì)數(shù) time=th0*256+tl0; /讀取脈寬長(zhǎng)度 th0=0; tl0=0; s=(time*1.7)/100; /算出來(lái)是cm disbuff0=s%1000/100; /更新顯示 disbuff1=s%1000%100/10; disbuff2=s%1000%10 %10;/*/ void run(void) /前速前進(jìn) left_moto_go ; /左電機(jī)往前走 right_moto_go ; /右電機(jī)往前走/*/ void backrun(void) /前速后退 left

17、_moto_back ; /左電機(jī)往前走 right_moto_back ; /右電機(jī)往前走/*/ void leftrun(void) /左轉(zhuǎn) left_moto_back ; /左電機(jī)往前走 right_moto_go ; /右電機(jī)往前走/*/ void rightrun(void) /右轉(zhuǎn) left_moto_go ; /左電機(jī)往前走 right_moto_back ; /右電機(jī)往前走/*/ void stoprun(void) /停止前進(jìn) left_moto_stop ; /左電機(jī)停走 right_moto_stop ; /右電機(jī)停走/*/ void comm( void ) push

18、_val_left=5; /舵機(jī)向左轉(zhuǎn)90度 timer=0; while(timer<=4000); /延時(shí)400ms讓舵機(jī)轉(zhuǎn)到其位置 startmodule(); /啟動(dòng)超聲波測(cè)距 conut(); /計(jì)算距離 s2=s; push_val_left=23; /舵機(jī)向右轉(zhuǎn)90度 timer=0; while(timer<=4000); /延時(shí)400ms讓舵機(jī)轉(zhuǎn)到其位置 startmodule(); /啟動(dòng)超聲波測(cè)距 conut(); /計(jì)算距離 s4=s; push_val_left=14; /舵機(jī)歸中 timer=0; while(timer<=4000); /延時(shí)40

19、0ms讓舵機(jī)轉(zhuǎn)到其位置 startmodule(); /啟動(dòng)超聲波測(cè)距 conut(); /計(jì)算距離 s1=s; if(s2<20)|(s4<20) /只要左右各有距離小于,20cm小車后退 backrun(); /后退 timer=0; while(timer<=4000); if(s2>s4) rightrun(); /車的左邊比車的右邊距離小右轉(zhuǎn) timer=0; while(timer<=4000); else leftrun();/車的左邊比車的右邊距離大左轉(zhuǎn) timer=0; while(timer<=4000); /*/* pwm調(diào)制電機(jī)轉(zhuǎn)速 */*/* 左電機(jī)調(diào)速 */*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */void pwm_servomoto(void) if(pwm_val_left<=push_val_left) sevro_moto_pwm=1; else sevro_moto_pwm=0;if(pwm_val_left>=200)pwm_val

溫馨提示

  • 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)論