《智能循跡小車設(shè)計.docx》由會員分享,可在線閱讀,更多相關(guān)《智能循跡小車設(shè)計.docx(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、智能循跡/避障小車研究工作報告一、 智能循跡小車程序結(jié)構(gòu)框圖二、 Proteus仿真圖三、 軟件程序設(shè)計 一、 智能循跡小車程序結(jié)構(gòu)框圖經(jīng)過幾天在網(wǎng)上的查找,對智能循跡/避障小車有了大致的了解,一般有三個模塊:1、最基本的小車驅(qū)動模塊,使用兩個二相四線步進電機對小車的兩個后輪分別進行驅(qū)動,前輪最好用萬向輪,能使小車更好地轉(zhuǎn)彎; 2、小車循跡模塊,在小車底部有三個并排安裝的紅外對管,對黑色與白色的反射信號不同,經(jīng)單片機處理后對小車進行相應(yīng)處理;3、避障模塊,我寫的程序中對于避障模塊是用中斷來處理的(即安裝在小車車頭的紅外對管檢測到有障礙物后,就會向單片機的P3_2口輸出一個高電平或是低電平,這時
2、中斷程序?qū)π≤囘M行預(yù)先設(shè)定好的避障處理),但是在程序結(jié)構(gòu)框圖中,我不太會表示中斷處理方式,所以就用查詢的方式畫了。啟動小車 開始 避障? N Y 避障模塊 循跡模塊 停止? N Y 停止 二、Proteus仿真圖我用Proteus大概地仿真了小車的運行狀態(tài)。圖中的兩個二相四線步進電機就代表小車的左右輪(假定步進電機順時針轉(zhuǎn)動方向為小車前進方向),網(wǎng)上有很多種驅(qū)動芯片,在仿真時我只使用L298N芯片來驅(qū)動步進電機。用三個單刀雙制開關(guān)模擬用于小車循跡的三個紅外對管的輸出信號,經(jīng)一個與門與三極管開關(guān)連接到P3_3口,中斷程序?qū)1_0, P1_1, P1_2三個口進行檢測,并做出相應(yīng)處理。同時因為
3、避障模塊的優(yōu)先級高于循跡模塊,所以將外部中斷0用于避障,外部中斷1用于循跡。P1_3口則用于檢測小車是否到達(dá)終點。1、小車驅(qū)動模塊:使用一片298芯片驅(qū)動一個二相四線步進電機,電機的電壓為12V。2、小車循跡模塊:左邊為三個單刀雙制開關(guān)模擬小車循跡使用的紅外對管的輸出信號,經(jīng)一個與門和三極管開關(guān)送至P3_3口,有P1_4口定時響應(yīng)中斷程序。又經(jīng)或門送至P1_3口(圖因找不到或門,所以用7411和7404代替),檢測小車是否到達(dá)終點.3、避障模塊: (用一個開關(guān)代替車頭紅外對管的輸出信號)4、仿真結(jié)果:根據(jù)兩個步進電機的轉(zhuǎn)動情況,小車可以按照預(yù)先設(shè)計好的程序進行循跡(轉(zhuǎn)彎,直走),避障處理,最后
4、停止前進。三、軟件程序設(shè)計#include#define uchar unsigned charsbit P1_2=P12; /P1口的低三位作為小車循跡的三個紅外對管與單片機的信號接口sbit P1_0=P10;sbit P1_1=P11;sbit P1_3=P13; /三個循跡的紅外對管輸出口經(jīng)或門后的結(jié)果與P1_3接,用于實時檢測sbit P1_7=P17; /控制兩個二相四線步進電機的啟動與停止sbit P1_6=P16;sbit P1_4=P14; /為循跡中斷所用的定時/計數(shù)器0輸出口uchar i,j,ms;uchar dianji=0x11,0x22,0x44,0x88; /電
5、機的轉(zhuǎn)動使小車前進uchar back=0x88,0x44,0x22,0x11; /電機的轉(zhuǎn)動使小車后退void delay(int z) /延時程序 int x,y; for(x=0;xz;x+) for(y=0;y500;y+);void goahead() /小車前進程序,一個循環(huán)使小車的車輪轉(zhuǎn)動一周 P1_6=1; P1_7=1; for(i=0;i4;i+) P2=dianjii; delay(50); void turnleft() /小車左轉(zhuǎn)程序,小車采用兩個步進電機驅(qū)動,分別控制小車左右 兩個車輪的轉(zhuǎn)動。小車左轉(zhuǎn)時,左邊的電機停止轉(zhuǎn)動,右邊的電機 P1_6=0; 仍然轉(zhuǎn)動,即實
6、現(xiàn)小車的左轉(zhuǎn)動作;反之則是小車的右轉(zhuǎn)動作 P1_7=1; for(i=0;i4;i+) P2=dianjii; delay(50); void turnright() /小車右轉(zhuǎn)程序 P1_6=1; P1_7=0; for(i=0;i4;i+) P2=dianjii; delay(50); void qianjin() /小車前進程序,此程序是為小車遇到障礙時進行躲避處理時小車前 進程序,一個循環(huán)小車的車輪轉(zhuǎn)動三周 P1_6=1; P1_7=1; for(j=0;j3;j+) for(i=0;i4;i+) P2=dianjii; delay(50); void goback() /小車后退程序,此程序也是小車避障環(huán)節(jié)中的為小車后退的程序, 一個循環(huán),小車的車輪向后轉(zhuǎn)動三周 P1_6=1; P1_7=1; for(j=0;j3;j+) for(i=0;i=2) P1_4=!P1_4; ms=0;