基于單片機89c51循跡小車原理與程序分解_第1頁
基于單片機89c51循跡小車原理與程序分解_第2頁
基于單片機89c51循跡小車原理與程序分解_第3頁
基于單片機89c51循跡小車原理與程序分解_第4頁
基于單片機89c51循跡小車原理與程序分解_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于89c52單片機的循跡小車設計報告第 PAGE 13 頁 共 10 頁自循跡小車第一章 引言1.1 設計目的通過設計進一步掌握單片機的應用,特別是在嵌入式系統(tǒng)中的應用。進一步學習單片機在系統(tǒng)中的控制功能,能夠合理設計單片機的外圍電路,并使之與單片機構(gòu)成整個系統(tǒng)。1.2 設計方案介紹該智能車采用紅外對管方案進行道路檢測,單片機根據(jù)采集到的紅外對管的不同狀態(tài)判斷小車當前狀態(tài),通過控制發(fā)出控制命令,控電機的工作狀態(tài)以實現(xiàn)對小車姿態(tài)的控制。1.3 技術(shù)報告內(nèi)容安排本技術(shù)報告主要分為三個部分。第一部分是對整個系統(tǒng)實現(xiàn)方法的一個概要說明,主要內(nèi)容是對整個技術(shù)方案的概述;第二部分是對硬件電路設計的說明,

2、主要介紹系統(tǒng)傳感器的設計及其他硬件電路的設計原理等;第三部分是對系統(tǒng)軟件設計部分的說明,主要內(nèi)容是智能模型車設計中主要用到的控制理論、算法說明及代碼設計介紹等。第二章 技術(shù)方案概要說明本模型車的電路系統(tǒng)包括電源管理模塊、單片機模塊、傳感器模塊、電機驅(qū)動模塊.在整個系統(tǒng)中,由電源管理模塊實現(xiàn)對其他各模塊的電源管理。其中,對單片機、光電管提供5V電壓,對電機提供6V電壓路徑識別電路由3對光電發(fā)送與接收管組成。由于路面存在黑色引導線,落在黑線區(qū)域內(nèi)的光電接收管接收到反射的光線的強度與白色的路面不同,進而在光電接收管兩端產(chǎn)生不同的電壓值,由此判斷路線的走向。傳感器模塊將當前采集到的一組電壓值傳遞給單片

3、機,進而根據(jù)一定得算法對舵機進行控制,使小車自動尋線行走。 單片機模塊是智能車的核心部分,主要完成對外圍各個模塊的管理,實現(xiàn)對外圍模塊的信號發(fā)送,以及對傳感器模塊的信號采集,并根據(jù)軟件算法對所采集的信號進行處理,發(fā)送信號給執(zhí)行模塊進行任務執(zhí)行,還對各種突發(fā)事件進行監(jiān)控和處理,保證整個系統(tǒng)的正常運作。 電機驅(qū)動采用L293驅(qū)動芯片,該芯片支持2路電機驅(qū)動同時支持PWM調(diào)速第三章 硬件電路的設計3.1 單片機最小系統(tǒng)小車采用STC公司的STC89C52RC單片機作為控制芯片,圖3-1是其最小系統(tǒng)電路。主要包括:時鐘電路、電源電路、復位電路。其中各個部分的功能如下:1、時鐘電路:給單片機提供一個外接

4、的12MHz的石英晶振。2、電源電路:給單片機提供5V電源。3、復位電路:在電壓達到正常值時給單片機一個復位信號。圖3-1 單片機最小系統(tǒng)原理圖3.2 傳感器電路光電尋線方案一般由多對紅外收發(fā)管組成,通過檢測接收到的反射光強,判斷黑白線。原理圖由紅外對管和電壓比較器兩部分組成,紅外對管輸出的模擬電壓通過電壓比較器轉(zhuǎn)換成數(shù)字電平輸出到單片機。芯片使用LM339具有4路電壓比較器3-2賽道檢測原理圖3.3 電機驅(qū)動采用L293驅(qū)動芯片,該芯片支持2路電機驅(qū)動同時支持PWM調(diào)速 L293驅(qū)動3.3 電源電路設計模型車通過自身系統(tǒng),采集賽道信息,獲取自身速度信息,加以處理,由芯片給出指令控制其前進轉(zhuǎn)向

5、等動作,各部分都需要由電路支持,電源管理尤為重要。在本設計中,51單片機使用5V電源,電機使用6V電源??紤]到電源為充電電池組,額定電壓為7.2V,實際充滿電后電壓則為6.5-6.8V,所以單片機及傳感器模塊采用LM1117-5穩(wěn)壓后的5V電源供電,電機直接由電池供電。*程序說明:本附錄:源程序主代碼*/#include reg52.h#define uint unsigned int #define uchar unsigned char sbit K1=P20; sbit K2=P21; sbit K3=P22; sbit K4=P23; sbit LED1=P10; sbit LED2=

6、P11; sbit LED3=P12; sbit LED4=P13; sbit PWM1=P32; sbit PWM2=P33;uchar PWM1_Cycle=0,PWM2_Cycle=0;/PWM占空比 void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void PWM_Init() TMOD = 0 x11 ; TH0=(65535-100)/256;/定時5us TL0=(65535-100)%256; TH1=(65535-100)/256;/定時10us TL1=(65535-100)%256; ET0=1;

7、 ET1=1; TR0=1; TR1=0; EA=1;/開中斷 /* *函數(shù)功能:小車前進 *時間:2013、3、29 */ void Advance() P0=0 x50; /* *函數(shù)功能:小車后退 *時間:2013、3、29 */ void Retreat() P0=0 xa0; /* *函數(shù)功能:小車左轉(zhuǎn) *時間:2013、3、29 */ void Turn_left1() P0=0 x10; delay(500); P0=0; /* *函數(shù)功能:小車右轉(zhuǎn) *時間:2013、3、29 */ void Turn_right1() P0=0 x40; delay(500); P0=0; v

8、oid main() PWM_Init(); PWM1_Cycle=30;/初始速度,可改變其大小是速度使變化 while(1) if(K1=1) Turn_right1();elseif(K2=1)Advance();elseif(K4=1)Turn_left1();else Advance(); /* *函數(shù)功能:產(chǎn)生占空比可調(diào)的PWM波 *參數(shù):PWM1_Cycle */ void PWM1_Produce() interrupt 1 static unsigned int t1 ; /tt用來保存當前時間在一秒中的比例位置 t1+; TH0=(65535-100)/256;/定時100

9、us TL0=(65535-100)%256;if(t1=100)t1=0;PWM1=1;if(PWM1_Cycle=t1)PWM1=0; /* *函數(shù)功能:產(chǎn)生占空比可調(diào)的PWM波 *參數(shù):PWM1_Cycle */ void PWM2_Produce() interrupt 3 static unsigned int t2 ; /tt用來保存當前時間在一秒中的比例位置 t2+; TH1=(65535-100)/256;/定時100us TL1=(65535-100)%256;if(t2=100)t2=0;PWM2=1;if(PWM2_Cycle=t2)PWM2=0;元件清單附錄:源程序主代

10、碼#include #include #include #define uchar unsigned char #define uint unsigned int#define MIDDLE 1390/舵機中心位置#define LEFT 1600 #define RIGHT 1000#define T 20000#define HIGH 7300 /電機基準速度sbit rudder=P10; /定義舵機PWM波輸出端口為P1.0口sbit pulse=P11; /定義后輪PWM波輸出端口為P1.1口char flag1=0,flag2=0;/定義全局變量(flag1用于控制舵機/PWM標志

11、位,flag2用于控制電機PWM)uint b=0,a=0;/b用來裝載電機所需的高電平時間,a用于保存電機所需高電平時間void main()uchar receive,ek4=7,7,7,7;uint pidr=0;uint pidlr=0;uint ppid=0;IE=0 x8a; TMOD=0 x11;TH0=0 x00;TL0=0 x00;TR0=1;TH1=0 x00;TL1=0 x00;TR1=1;while(1) receive=P2; /采集光電傳感器的值/*switch*/switch(receive) /根據(jù)采集到的值進行判斷case 0 x7f:ek3=0;break;

12、 /0111 1111 最左邊(或右邊)1個光電傳感器檢測到黑線case 0 x3f:ek3=1;break; /0011 1111 最左邊(或右邊)2個光電傳感器檢測到黑線case 0 xbf:ek3=2;break; /1011 1111 依次類推case 0 x9f:ek3=3;break; /1001 1111case 0 xdf:ek3=4;break; /1101 1111case 0 xcf:ek3=5;break; /1100 1111case 0 xef:ek3=6;break; /1110 1111case 0 xe7:ek3=7;break; /1110 0111case

13、 0 xf7:ek3=8;break; /1111 0111case 0 xf3:ek3=9;break; /1111 0011case 0 xfb:ek3=10;break; /1111 1011case 0 xf9:ek3=11;break; /1111 1001case 0 xfd:ek3=12;break; /1111 1101case 0 xfc:ek3=13;break; /1111 1100case 0 xfe:ek3=14;break; /1111 1110default: ek3=15;break; /1111 1111 沒有檢測到黑線(是需要保持上一次測量值的)/*swit

14、ch*/if(ek3= =15) pidr = pidlr;else pidr=0.2*pidlr+0.8*(23*(ek3-7)+2*(ek3+ek2+ek1+ek0-28)+7*(ek3-ek2);if(ek2!=ek3)ppid=-160*(cabs(ek3-7)+220*(cabs(ek1-7)-cabs(ek3-7); a=HIGH+ppid; /a是電機高電平時間b=pidr+MIDDLE; /b就是舵機PWM波高電平時間 if(bLEFT) b=LEFT; if(bRIGHT) b=RIGHT; char i; for(i=0;i3;i+) eki=eki+1; pidlr=pidr;void zhongduan_t0(void) interrupt 1 /產(chǎn)生舵機PWM波中斷子程序(T0中斷)if(flag1=0) TH0=(uchar)(65536-b)/256); TL0=(uchar)(65536-b)%256);flag1=1;rudder=1;elseTH0=(uchar)(38869+b)/256); TL0=(uchar

溫馨提示

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

評論

0/150

提交評論