單片機課程設計報告_第1頁
單片機課程設計報告_第2頁
單片機課程設計報告_第3頁
單片機課程設計報告_第4頁
單片機課程設計報告_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電子信息技術創新實踐課程設計報告         課題名稱: 基于51單片機的智能小車設計 專業班級: 2013級電子信息工程 姓名及學號: 成 績: 指導教師: 課題工作時間:2016年 5月10日5月30日 目 錄1 小車系統整體設計1.1 系統的總體方案設計031.2 主控系統041.3 電機驅動模塊041.4 循跡模塊042 小車系統硬件設計2.1 主控模塊的電路設計052.2 紅外避障模塊的電路設計05 2.2.1 LM393雙電壓比較器集成電路05 2.2.2紅外對管工作原理07 2.2.3紅

2、外避障電路圖及工作原理07 2.2.4紅外循跡電路的設計093 小車系統軟件設計 3.1主程序設計10 3.2循跡程序設計214 小車調試 235小結246 附錄:設計程序清單及硬件圖24 1 小車系統整體設計1.1 系統的總體方案設計 該系統以AT89S52單片機為核心的控制電路,采用模塊化的設計方案,利用紅外遙控器代替開關按鍵控制小的啟動和停止,能夠輕松自如的實現小車的啟動停止、左轉、右轉和前進后退等功能,假如我們希望小車運行到黑線上來檢測是否有循跡功能,就可以用遙控器控制小車行駛到有黑線的地方,當小車遇到有黑線時,會自動啟動循跡功能模塊,讓小車沿黑線跑,遇到障礙物時會后退并選擇其他路線躲

3、避障礙物。每個模塊都是相互獨立又相互協調配合,實現了小車的智能控制。系統控制框圖如圖2.1所示:紅外避障模塊 AT89C52紅外遙控模塊紅外接收模塊電機驅動模塊跡模塊顯示模塊圖2.1 系統控制框圖401.2 主控系統 我們采用單片機作為整個系統的核心,通過其控制行進中的小車,以實現其既定的性能指標。充分分析我們的系統,其關鍵在于實現小車的自動控制,而在這一點上,單片機就顯現出來它的優勢控制簡單、方便、快捷。這樣一來,單片機就可以充分發揮其資源豐富、有較為強大的控制功能及可位尋址操作功能、價格低廉等優點。所以,我們選定了AT89C52 單片機作為本設計的主控裝置。1.3 電機驅動模塊 采用功率三

4、極管作為功率放大器的輸出控制直流電機。線性型驅動的電路結構和原理簡單,加速能力強,采用由達林頓管組成的H型橋式電路。用單片機控制達林頓管使之工作在占空比可調的開關狀態下,精確調整電動機轉速。這種電路由于工作在管子的飽和截止模式下,效率非常高,H型橋式電路保證了簡單的實現轉速和方向的控制,電子管的開關速度很快,穩定性也極強,因此選用L9110。這種調速方式有調速特性優良、調整平滑、調速范圍廣、過載能力大,能承受頻繁的負載沖擊,還可以實現頻繁的無級快速啟動、制動和反轉等優點。1.4 循跡模塊 采用兩只紅外對管,分別置于小車車身左右兩側,根據兩只對管接受到白線與黑線的情況來控制小車轉向來調整車向。2

5、 小車系統硬件設計2.1主控模塊的電路設計2.2 紅外避障模塊的電路設計2.2.1 LM393雙電壓比較器集成電路 圖2.2.1-1 LM393 LM393是高增益,寬頻帶器件,像大多數比較器一樣,如果輸出端到輸入端有寄生電容而產生耦合,則很容易產生振蕩。這種現象僅僅出現在當比較器改變狀態時,輸出電壓過渡的間隙,電源加旁路濾波并不能解決這個問題,標準PC板的設計對減小輸入-輸出寄生電容耦合是有助的。減小輸入電阻至小于10K將減小反饋信號,而且增加甚至很小的正反饋量(滯回1.010mV)能導致快速轉換,使得不可能產生由于寄生電容引起的振蕩,除非利用滯后,否則直接插入IC(集成電路板integra

6、ted circuit,縮寫:IC) 并在引腳上加上電阻將引起輸入-輸出在很短的轉換周期內振蕩,如果輸入信號是脈沖波形,并且上升和下降時間相當快,則滯回將不需要。 圖2.2.1-2特點:工作溫度范圍:0°C - +70°CSVHC(高度關注物質):No SVHC (18-Jun-2010)器件標號:393工作電源電壓范圍寬,單電源、雙電源均可工作,單電源: 2 36V, 雙電源:±1±18V;消耗電流小,ICC=0.8mA;輸入失調電壓小,VIO=±2mV;共模輸入電壓范圍寬,VIC=0VCC-1.5V;輸出與TTL,DTL,MOS,CMOS

7、等兼容;輸出可以用開路集電極連接“或”門;表面安裝器件:表面安裝功能: 輸出負載電阻能銜接在可允許電源電壓范圍內的任何電源電壓上,不受 Vcc端電壓值的限制,輸出部分的陷電流被可能得到的驅動和器件的值所限制.當達到極限電流(16mA)時,輸出晶體管將退出而且輸出電壓將很快上升。輸出飽和電壓被輸出晶體管大約60ohm 的SAT限制。當負載電流很小時,輸出晶體管的低失調電壓(約1.0mV)允許 輸出箝位在零電平。2.2.2紅外對管工作原理 圖2.2.2-1 圖2.2.2-2 上圖中,紅外光電管有兩種,一種是無色透明的LED,此為發射管,它通電后能夠產生人眼不可見紅外光,另一部分為黑色的接收部分,它

8、內部的電阻會隨著接收到紅外光的多少而變化。 無論是一體式還是分離式,其檢測原理都相同,由于黑色吸光,當紅外發射管照射在黑色物體上時反射回來的光就較少,接收管接收到的紅外光就較少,表現為電阻大,通過外接電路就可以讀出檢測的狀態;同理,當照射在白色表面時發射的紅外線就比較多,表現為接收管的電阻較小,此時通過外接電路就可以讀出另外一種狀態,如用電平的高低來描述上面兩種現象就會出現高低電平之分,也就是會出現所謂的0和1兩種狀態,此時再將此送到單片機的I/O口,單片機就可以判斷是黑白路面,進而完成相應的功能,如循跡、避障等。2.2.3紅外避障電路圖及工作原理圖2.2.3-1圖2.2.3-2特點:該傳感器

9、模塊對環境光線適應能力強,其具有一對紅外線發射與接收管,發射管發射出一定頻率的紅外線,當檢測方向遇到障礙物(反射面)時,紅外線反射回來被接收管接收,經過比較器電路處理之后,停止一段時間并后退,有效距離范圍24cm,工作電壓為3.3V-5V。該傳感器的探測距離可以通過電位器調節、具有干擾小、便于裝配、使用方便等特點。程序流程圖:上電運行后,放到沒有障礙物的空地上,小車直走。當前方沒有障礙物的的時候車就一直直走。如果前方遇到障礙物,則小車做左轉運動。直至前方沒有障礙物,這時小車恢復直走。 如果前方有障礙物的時候,左邊同時也有障礙物,則小車右轉。直至左邊沒有障礙物或者前方沒有障礙物。這時小車恢復左轉

10、,或者直走。如果前面沒有障礙物,則先執行直走。如果前方,左方,右方均有障礙物,則小車后退,直至前方,左方,右方任一方向沒有障礙,則此時小車開始以前方,左方,右方的優先級開始執行轉向。也就是說如果前方沒有障礙物,即使其他任意方向都有障礙則小車依然直走,如果前方有障礙,左邊沒有則右轉,前方左方都有障礙,則小車右轉。否則小車后退。1、當模塊檢測到前方障礙物信號時,前方側位紅色指示燈點亮電平,同時OUT端口持續輸出低電平信號,該模塊檢測距離24cm。2、傳感器主動紅外線反射探測,因此目標的反射率和形狀是探測距離的關鍵。其中黑色探測距離最小,白色最大;小面積物體距離小,大面積距離大。3、傳感器模塊輸出端

11、口OUT可直接與單片機IO口連接即可,也可以直接驅動一個5V繼電器;連接方式:VCC-VCC;GND-GND;OUT-IO4、比較器采用LM393,工作穩定;5、可采用3-5V直流電源對模塊進行供電。2.2.4紅外循跡電路的設計 圖2.2.4-1 圖2.2.4-2 圖2.2.4-3原理與避障基本一致,LM393為內部集成了四路比較器的集成電路。因為內部的四個比較電路完全相同,這里僅以一路比較電路進行舉例。如圖4所示為單路比較器組成的紅外檢測電路圖,比較器有兩個輸入端和一個輸出端,兩個輸入端一個稱為同輸入端,用“+”號表示,另一個稱為反相輸入端,用“”表示。用作比較兩個電路時,任意一個輸入端加一

12、個固定電壓作參考電壓(也叫門限電壓),另一端則直接接需要比較的信號電壓。當“+”端電壓高于“”端電壓時,輸出正電源電壓,當“”端電壓高于“+”端電壓時,輸出負電源電壓(注意,此處所說的正電源電壓和負電源電壓是指接比較正負極的電壓。3 小車系統軟件設計3.1主程序避障系統主程序#include <REGX52.H> /包含51單片機相關的頭文件sbit LeftLed=P20; /定義前方左側指示燈端口sbit RightLed=P07; /定義前方右側指示燈端口sbit FontLled=P17;sbit LeftIR=P35; /定義前方左側紅外探頭端口sbit RightIR=

13、P36; /定義前方右側紅外探頭端口sbit FontIR=P37; /定義前方正前方紅外探頭端口sbit M1A=P00; /定義左側電機驅動A端sbit M1B=P01; /定義左側電機驅動B端sbit M2A=P02; /定義右側電機驅動A端sbit M2B=P03; /定義右側電機驅動B端sbit B1=P04; /定義語音識識別傳感器端口sbit SB1=P06; /定義蜂鳴器端口void tingzhi() M1A=0; /將M1電機A端初始化為0 M1B=0; /將M1電機B端初始化為0 M2A=0; /將M2電機A端初始化為0 M2B=0;void qianjin() M1A=

14、1; M1B=0; M2A=1; M2B=0;void houtui() M1A=0; M1B=1; M2A=0; M2B=1;void zuozhuan() M1A=1; M1B=0; M2A=0; M2B=1;void youzhuan() M1A=0; M1B=1; M2A=1; M2B=0;void delay_nus(unsigned int i) /延時:i>=12 ,i的最小延時單12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延時n ms n=n+1; while(-n) delay_nus(900); /

15、延時 1ms,同時進行補償 void ControlCar(unsigned char ConType) /定義電機控制子程序 tingzhi(); switch(ConType) /判斷用戶設定電機形式 case 1: /前進 /判斷用戶是否選擇形式1 qianjin(); break; case 2: /后退 /判斷用戶是否選擇形式2 houtui(); /M2電機反轉 break; case 3: /左轉 /判斷用戶是否選擇形式3 zuozhuan(); /M2電機正轉break; case 4: /右轉 /判斷用戶是否選擇形式4 youzhuan(); /M1電機正轉 /M2電機反轉b

16、reak; case 8: /停止 /判斷用戶是否選擇形式8 tingzhi();break; /退出當前選擇 void main() /主程序入口 bit RunFlag=0; /定義小車運行標志位 /RunShow=0; /初始化顯示狀態 ControlCar(8); /初始化小車運行狀態 while(1) /程序主循環 Start: LeftLed=LeftIR; /前方左側指示燈指示出前方左側紅外探頭狀態 RightLed=RightIR; /前方右側指示燈指示出前方右側紅外探頭狀態 FontLled= FontIR; SB1=FontIR; if(FontIR = 0) /如果前面避

17、障傳感器檢測到障礙物 ControlCar(8); /停止 delay_nms (300); /停止300MS 防止電機反相電壓沖擊 導致系統復位 ControlCar(2); /后退 delay_nms (1000); /后退1500MS ControlCar(3); / delay_nms (1800); goto NextRun; if(FontIR = 1 ) ControlCar(1); /右側沒有信號時,開始向左轉一定的角度 delay_nms (10); goto NextRun; goto Start; NextRun: ControlCar(1); 循跡程序#include

18、<REGX52.H> /包含51單片機相關的頭文件sbit LeftLed=P20; /定義前方左側指示燈端口sbit RightLed=P07; /定義前方右側指示燈端口sbit FontLled=P10;sbit LeftIR=P35; /定義前方左側紅外探頭端口sbit RightIR=P36; /定義前方右側紅外探頭端口sbit FontIR=P37; /定義前方正前方紅外探頭端口sbit M1A=P00; /定義左側電機驅動A端sbit M1B=P01; /定義左側電機驅動B端sbit M2A=P02; /定義右側電機驅動A端sbit M2B=P03; /定義右側電機驅動

19、B端sbit B1=P04; /定義語音識識別傳感器端口sbit SB1=P06; /定義蜂鳴器端口void tingzhi() M1A=0; /將M1電機A端初始化為0 M1B=0; /將M1電機B端初始化為0 M2A=0; /將M2電機A端初始化為0 M2B=0;void qianjin() M1A=1; M1B=0; M2A=1; M2B=0;void houtui() M1A=0; M1B=1; M2A=0; M2B=1;void zuozhuan() M1A=0; M1B=1; M2A=1; M2B=0;void youzhuan() M1A=1; M1B=0; M2A=0; M2B

20、=1;void delay_nus(unsigned int i) /延時:i>=12 ,i的最小延時單12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延時n ms n=n+1; while(-n) delay_nus(900); /延時 1ms,同時進行補償 void ControlCar(unsigned char ConType) /定義電機控制子程序 tingzhi(); switch(ConType) /判斷用戶設定電機形式 case 1: /前進 /判斷用戶是否選擇形式1 qianjin(); break; c

21、ase 2: /后退 /判斷用戶是否選擇形式2 houtui(); /M2電機反轉 break; case 3: /左轉 /判斷用戶是否選擇形式3 zuozhuan(); /M2電機正轉break; case 4: /右轉 /判斷用戶是否選擇形式4 youzhuan(); /M1電機正轉 /M2電機反轉break; case 8: /停止 /判斷用戶是否選擇形式8 tingzhi();break; /退出當前選擇 void main() /主程序入口 bit RunFlag=0; /定義小車運行標志位 /RunShow=0; /初始化顯示狀態 ControlCar(8); /初始化小車運行狀態

22、 while(1) /程序主循環 Start: LeftLed=LeftIR; /前方左側指示燈指示出前方左側紅外探頭狀態 RightLed=RightIR; /前方右側指示燈指示出前方右側紅外探頭狀態 FontLled= FontIR; SB1=LeftIR; if(LeftIR = 0 && RightIR = 0) /三個紅外檢測到黑線,就前進 ControlCar(1); /左側沒有信號時,開始向右轉一定的角度 delay_nms (10); goto NextRun; if(LeftIR = 0 && RightIR = 1) ControlCar(3

23、); /右側沒有信號時,開始向左轉一定的角度 delay_nms (10); goto NextRun; if(LeftIR = 1 && RightIR = 0) ControlCar(4); /右側沒有信號時,開始向左轉一定的角度 delay_nms (10); goto NextRun; goto Start; NextRun: ControlCar(8); 3.2循跡程序void Robot_Traction() /循跡子程序 LeftLed=LeftIR; /前方左側指示燈指示出前方左側紅外探頭狀態 RightLed=RightIR; /前方右側指示燈指示出前方右側紅

24、外探頭狀態 FontLled= FontIR; SB1=LeftIR; if(LeftIR = 0 && RightIR = 0) /三個紅外檢測到黑線,就前進 ControlCar(1); /左側沒有信號時,開始向右轉一定的角度 delay_nms (10); else if(LeftIR = 0 && RightIR = 1) ControlCar(3); /右側沒有信號時,開始向左轉一定的角度 delay_nms (10); else if(LeftIR = 1 && RightIR = 0) ControlCar(4); /右側沒有信號時

25、,開始向左轉一定的角度 delay_nms (10); ControlCar(8);void main() /主程序入口 bit RunFlag=0; /定義小車運行標志位 LedFlash=3000; /對閃燈數據進行初始化 /EX1=1; /同意開啟外部中斷1 IT1=1; /設定外部中斷1為低邊緣觸發類型 EA=1; /總中斷開啟 ControlCar(8); /初始化小車運行狀態 while(1) /程序主循環 if(P3_2 = 0) delay_nms(10); if(P3_2 = 0) temp+; while(!P3_2); if(temp > 3) temp = 1;

26、switch(temp) case 1:ShowPort = LedShowData1;Robot_Traction();EX1 = 0;break;case 2: ShowPort = LedShowData2;Robot_Avoidance();EX1 = 0;break;case 3: ShowPort = LedShowData3;EX1 = 1;break; 4 小車調試對各個模塊的功能進行調試,主要調試各模塊能否實現指定的功能。 1 電機控制 此模塊調試實現的功能是結合軟件共同實現,當連接單片機與電機控制芯片的I/0加上一定的電平可以實現電機左右轉向,前后轉向以及停止等功能,同時通

27、過程序延時降低電機轉速。2 無線遙控 此功能實現四個按鍵控制四路方向,按下“D”,小車向前行駛,“B”對應向后,“C”對應向左,“A”則實現向右行駛功能。3 紅外對管尋跡 尋跡對管有兩個組成,所以分別調試其兩路有效信號。當兩對管都放置黑線之外的白色地板上時,單片機對應I/O口收到的電平都為低,輸入電壓為0.3V左右,當左邊的紅外線管進入黑線范圍,對應電平變高,為4.2V左右,同時指示等紅燈亮,說明要控制小車右轉當在右邊時同左邊情況對應,需控制左轉。4 紅外線避障 此模塊的檢測與紅外線尋跡模塊基本一致,相當于一路尋跡信號,在沒有障礙物時輸入電壓為0.9V左右,屬于低電平,碰到障礙物電壓跳變為4.

28、7V左右,以此來得到單片機控制。各模塊都調試通過之后,將各個模塊連接起來與硬件結合進行聯合調試。在進行聯合調試時,經過反復的實驗,不斷的來修改參數來完善結果。使程序按照要求設計的要求進行。5小結通過此次課程設計,使我們更加扎實的掌握了有關智能小車設計方面的知識,在設計過程中雖然遇到了一些問題,但經過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我們在單片機這方面的知識欠缺和經驗不足。實踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵,而是通過自己的雙手去實踐。在課程設計過程中,我們不斷發現錯誤,不斷改正,不斷領悟,不斷獲齲最終的檢測調試環節,本身就是在踐行“過而

29、能改,善莫大焉”的知行觀。這次課程設計終于順利完成了,在設計中遇到了很多問題,最后在老師的指導下,終于游逆而解。在今后社會的發展和學習實踐過程中,一定要不懈努力,不能遇到問題就想到要退縮,一定要不厭其煩的發現問題所在,然后一一進行解決,只有這樣,才能成功的做成想做的事,才能在今后的道路上劈荊斬棘,而不是知難而退,那樣永遠不可能收獲成功,收獲喜悅,也永遠不可能得到社會及他人對你的認可。6 附錄:設計程序清單#include <REGX52.H> /包含51單片機相關的頭文件#include <intrins.h>#define ShowPort P2 /定義數碼管顯示端口

30、sbit L293D_EN2=P05; sbit IRIN=P33; /定義紅外接收端口#define TX P1_3#define RX P1_2#define Forward_L_DATA 200/當前進不能走直線的時候,請調節這兩個參數,理想的時候是100,100,最大256,最小0。0的時候最慢,256的時候最快#define Forward_R_DATA 200sbit LeftLed=P20; /定義前方左側指示燈端口sbit RightLed=P07; /定義前方右側指示燈端口sbit FontLled=P17;sbit LeftIR=P35; /定義前方左側紅外探頭端口sbit

31、 RightIR=P36; /定義前方右側紅外探頭端口sbit FontIR=P37; /定義前方正前方紅外探頭端口sbit M1A=P00; /定義左側電機驅動A端sbit M1B=P01; /定義左側電機驅動B端sbit M2A=P02; /定義右側電機驅動A端sbit M2B=P03; /定義右側電機驅動B端unsigned char temp = 1; unsigned char code LedShowData=0x03,0x9F,0x25,0x0D,0x99, /定義數碼管顯示數據 0x49,0x41,0x1F,0x01,0x19;/0,1,2,3,4,5,6,7,8,9Unsig

32、ned char codeRecvData=0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F;unsigned char IRCOM7;static unsigned int LedFlash; /定義閃動頻率計數變量bit EnableLight=0; /定義指示燈使能位void Delay400Ms(void);/延時400毫秒函數unsigned char disbuff4=0,0,0,0;/用于分別存放距離的值0.1mm、mm、cm和m的值void Count(void);/距離計算函數 unsigned int time=0;/用于存

33、放定時器時間值unsigned long S=0;/用于存放距離的值bit flag =0; /量程溢出標志位bit turn_right_flag;void Delay1ms(unsigned int i) unsigned char j,k; do j = 10; do k = 50; do _nop_(); while(-k); while(-j); while(-i); void Delay10us(unsigned char i) unsigned char j; do j = 10; do _nop_(); while(-j); while(-i); void delay_nus(

34、unsigned int i) /延時:i>=12 ,i的最小延時單12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延時n ms n=n+1; while(-n) delay_nus(900); /延時 1ms,同時進行補償 void delayms(unsigned char x) /0.14mS延時程序 unsigned char i; /定義臨時變量 while(x-) /延時時間循環 for (i = 0; i<13; i+) /14mS延時 void Delay() /定義延時子程序 unsigned in

35、t DelayTime=30000; /定義延時時間變量 while(DelayTime-); /開始進行延時循環 return; /子程序返回/=void Forward()/ 前進 M1A=1; M1B=0; M2A=1; M2B=0;/ PWM_Set(255-Speed_Right,255-Speed_Left);void Stop(void)/剎車 M1A=0; M1B=0; M2A=0; M2B=0;/ PWM_Set(0,0);void Turn_Retreat() /后 M1A=0; M1B=1;M2A=0;M2B=1;/PWM_Set(255-Speed_Right,255-Speed_Left);void Turn_left() /左 M1A=0; M1B=1;M2A=1;M2B=0;/PWM_Set(255-Speed_Right,255-Speed_Left);void youzhuan() M1A=1; M1B=0; M2A=0; M2B=1;/=/*距離計算程序*/ void Conut(void) time=TH1*256+TL1; TH1=0; TL1=0; /此時time的時間單位決定于晶振的速度,外接晶振為11.0592MHZ時, /time的值為0.54us*time,單位為微秒/那么1us聲波能走多遠的距離呢?1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論