基于單片機的多功能智能小車設(shè)計論文[1]_第1頁
基于單片機的多功能智能小車設(shè)計論文[1]_第2頁
基于單片機的多功能智能小車設(shè)計論文[1]_第3頁
基于單片機的多功能智能小車設(shè)計論文[1]_第4頁
基于單片機的多功能智能小車設(shè)計論文[1]_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、摘 要智能作為現(xiàn)代的新發(fā)明,是以后的發(fā)展方向,他可以按照預先設(shè)定的模式在一個環(huán)境里自動的運作,不需要人為的管理,可應用于科學勘探等等的用途。智能電動車就是其中的一個體現(xiàn)。本次設(shè)計的簡易智能電動車,采用AT89S52單片機作為小車的檢測和控制核心;采用金屬感應器TL-Q5MC來檢測路上感應到的鐵片,從而把反饋到的信號送單片機,使單片機按照預定的工作模式控制小車在各區(qū)域按預定的速度行駛,并且單片機選擇的工作模式不同也可控制小車順著S形鐵片行駛;采用霍爾元件A44E檢測小車行駛速度;采用1602LCD實時顯示小車行駛的時間,小車停止行駛后,輪流顯示小車行駛時間、行駛距離、平均速度以及各速度區(qū)行駛的時

2、間。本設(shè)計結(jié)構(gòu)簡單,較容易實現(xiàn),但具有高度的智能化、人性化,一定程度體現(xiàn)了智能。(關(guān)鍵詞:智能車 AT89S52 單片機 金屬感應器 霍爾元件 1602LCD)Abstract Smart as a modern invention, the direction of development in the future, he can in an environment where automatic operation in accordance with the pre-set pattern, no human management can be applied to the use o

3、f scientific exploration. Smart electric car is one of expression. The simplicity of the design of intelligent electric car, using AT89S52 MCU core as the detection and control of the car; metal sensor TL-Q5MC to detect the way the sensor to the iron plates, so that the feedback signal to send to th

4、e microcontroller, so that microcontroller in accordance with predetermined operating mode to control the car traveling in the regions according to a predetermined speed, and the operating mode selected by the microcontroller to control the car traveling along the S-shaped iron plates; Hall element

5、A44E detect car speed; using 1602LCD real-time display car traveling car to stop driving, take turns to car travel time, travel distance, average speed and velocity zone traveling time. This design is simple, more easy to implement, but are highly intelligent, humane, to some extent reflects the int

6、elligent.(Key words: smart car microcontroller AT89S52 metal sensor Hall element 1602LCD)目 錄1 設(shè)計任務(wù) 31.1 要求 32 方案比較與選擇 4 2.1路面檢測模塊4 2.2 LCD顯示模塊5 2.3測速模塊5 2.4控速模塊6 2.5模式選擇模塊73 程序框圖 74 系統(tǒng)的具體設(shè)計與實現(xiàn) 9 4.1路面檢測模塊9 4.2 LCD顯示模塊94.3測速模塊94.4控速模塊94.5復位電路模塊94.6模式選擇模塊95 最小系統(tǒng)圖 106 最終PCB板圖 127 系統(tǒng)程序138 致謝469 參考文獻 471

7、0 附錄 481. 設(shè)計任務(wù):設(shè)計并制作了一個智能電動車,其行駛路線滿足所需的要求。1.1 要求:1.1.1 基本要求:(1)分區(qū)控制:如(圖1)所示:(圖1) 車輛從起跑線出發(fā)(出發(fā)前,車體不得超出起跑線)。在第一個路程CD區(qū)(36米)以低速行駛,通過時間不低于10s;第二個路程DE區(qū)(2米)以高速行駛,通過時間不得多于4秒;第三個路程EF區(qū)(36米)以低速行駛,通過時間不低于10s。 (2)小車能自動記錄、顯示行駛時間、行駛距離以及行駛速度,還能記錄每段所走的時間,從而判斷是否符合課程設(shè)計要求。(記錄顯示裝置要求安裝在車上)。1.1.2 發(fā)揮部分:S型控制:如(圖2)所示:(圖2)車輛沿著

8、S形鐵片行駛,自動轉(zhuǎn)彎,自動尋找正確方向和鐵片。當離開S型鐵片跑道或者感應不到鐵片一段時間的時候,小車自動停止,并記錄行駛時間,路程,平均速度并通過LCD顯示出來。2. 方案比較與選擇:根據(jù)設(shè)計任務(wù)要求,并且根據(jù)我們自己的需要而附加的功能,該電路的總體框圖可分為幾個基本的模塊,框圖如(圖3)所示:(圖3)2.1 路面檢測模塊:采用鐵片感應器TL-Q5MC來檢測路面上的鐵片從而給單片機中斷脈沖。原理圖接線如(圖4)所示:(圖4)2.2 LCD顯示模塊:采用1602LCD,由單片機的總線模式連接。為節(jié)約電源電量并且不影響LCD的功能,LCD的背光用單片機進行控制,使LCD的背光在小車行駛的過程中不

9、亮,因為我們不必看其顯示;在其它我們需要看顯示的內(nèi)容的時候LCD背光亮。2.3 測速模塊:2.3.1 方案1:采用采用霍爾開關(guān)元器件A44E檢測輪子上的小磁鐵從而給單片機中斷脈沖,達到測量速度的作用。霍爾元件具有體積小,頻率響應寬度大,動態(tài)特性好,對外圍電路要求簡單,使用壽命長,價格低廉等特點,電源要求不高,安裝也較為方便?;魻栭_關(guān)只對一定強度的磁場起作用,抗干擾能力強,因此可以在車輪上安裝小磁鐵,而將霍爾器件安裝在固定軸上,通過對脈沖的計數(shù)進行車速測量。2.3.2 方案2:采用紅外傳感器進行測速。但無論是反射式紅外傳感器還是對射式紅外傳感器,他們對都對外圍環(huán)境要求較高,易受外部環(huán)境的影響,穩(wěn)

10、定性不高,且價格較為昂貴。通過對方案1、方案2的比較其優(yōu)缺點,綜合多方面因素決定選用方案1,其原理圖接線如(圖5)所示:(圖5)2.4 控速模塊:2.4.1 方案1:使用功率三極管作為功率放大器的輸出控制直流電機。線性型驅(qū)動的電路結(jié)構(gòu)和原理簡單,成本低,加速能力強,但功率損耗大,特別是低速大轉(zhuǎn)距運行時,通過電阻R的電流大,發(fā)熱厲害,損耗大,對于小車的長時間運行不利。2.4.2 方案2:采用繼電器對電動機的開或關(guān)進行控制,通過開關(guān)的切換對小車的速度進行調(diào)整.此方案的優(yōu)點是電路較為簡單,缺點是繼電器的響應時間慢,易損壞,壽命較短,可靠性不高。2.4.3 方案3:采用由雙極性管組成的H橋電路。用單片

11、機控制晶體管使之工作在占空比可調(diào)的開關(guān)狀態(tài),精確調(diào)整電機轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,效率非常高;H橋電路保證了可以簡單地實現(xiàn)轉(zhuǎn)速和方向的控制;電子開關(guān)的速度很快,穩(wěn)定性也很高,是一種廣泛采用的調(diào)速技術(shù)。綜合3種方案的優(yōu)缺點,決定選擇方案3,其電路原理圖如(圖6)所示:(圖6)2.5 模式選擇模塊:模式選擇模塊通過一個74LS00與非門和兩個不帶鎖按鈕來控制單片機單片機的兩個中斷口,從而按動按鈕來選擇小車走動的路型、來選擇小車的速度是快速、中速、慢速;走完路程小車停止后還可以通過按鈕選擇想要在LCD上想看的信息,比如總時間、走過各段路程的時間、平均速度、總路程等。小車走動的模式

12、選擇有:(1) 直線型:滿足設(shè)計任務(wù)的基本要求,能穩(wěn)定的走完全程。之后按順序循環(huán)不斷的顯示走完全程所用的時間、走完高速區(qū)所用的時間和走完低速區(qū)所用的時間這三個時間;或者可以通過兩個按鈕以及LCD顯示的菜單選擇所要看的內(nèi)容如平均速度、全程距離以及那三個時間。(2) S型:滿足設(shè)計任務(wù)的發(fā)揮部分的要求,小車能自動的感應到在前面或在后面鐵片,即第一次轉(zhuǎn)彎后若感應到的是錯誤的方向,則小車會后退自動調(diào)整方向,沿著S型的鐵片走。當走完S型鐵片后的一定時間里,小車自動停止。之后自動進入菜單由我們自己選擇要看的內(nèi)容時間、平均速度和所走的距離。(3)自動型:小車先以一定的速度走完全程,之后再以一定的速度倒退回起

13、點,再調(diào)整速度在一定的時間內(nèi)走完全程。走完后LCD顯示的內(nèi)容與直線型顯示的內(nèi)容一樣。3. 程序框圖:單片機主程序框圖、速度感應程序框圖和鐵片感應程序框圖分別如(圖7)所示。(圖7)4系統(tǒng)的具體設(shè)計與實現(xiàn):4.1 路面檢測模塊: 應用一個金屬感應器,安裝在車盤下,離地略小于或約四毫米。當金屬傳感器檢測到鐵片時將對單片機發(fā)送中斷信號,單片機運行中斷,改變輸給電機驅(qū)動信號的電壓占空比來控制小車的速度。4.2 LCD顯示模塊:采用1602LCD,由單片機的總線模式連接。為節(jié)約電源,LCD的背光用單片機進行控制。4.3 測速模塊:通過霍爾元件感應磁鐵來產(chǎn)生脈沖(當霍爾元件在離磁場較近時輸出會是高電平,其

14、它時候是低電平),一個車輪均勻放四個小磁鐵,計算一秒所得的脈沖數(shù),從而計算出一秒小車輪子轉(zhuǎn)動圈數(shù),再測量出小車車輪周長即可計算出小車當前速度,累加可得到當前路程。4.4 控速模塊:考慮到元器件的缺少以及我們所用的電路的驅(qū)動電機的電路原理圖和和小車自帶的電路的電機驅(qū)動原理圖一樣,所以暫時使用小車自帶的電機驅(qū)動電路圖。4.5 復位電路模塊:單片機的復位電路通過手動來實現(xiàn),復位電路圖如(圖8)所示。(圖8)4.6 模式選擇模塊:兩個中斷口使用和感應鐵片、感應速度所使用的中斷口一樣,通過一個與非門和按鈕控制。原理圖如(圖9)所示:(圖9)5最小系統(tǒng)圖: 該系統(tǒng)主要用到的是單片機,所以主要的部分是最小系

15、統(tǒng)圖,該最小系統(tǒng)圖如(圖10)所示: (圖12)6. 最終PCB板圖:該最小系統(tǒng)的最終PCB板圖(包括LCD接口以及其他的外部擴展電路部分,考慮到最小系統(tǒng)的簡潔以及容易看懂,外部擴展電路不在最小系統(tǒng)圖上顯示。)分別如(圖11)、(圖12)所示:(圖11)(圖12)7系統(tǒng)程序:按照預定的功能,系統(tǒng)實現(xiàn)預定的功能的程序如下所示:#include <intrins.h> #include <AT89X52.h>/* 宏定義區(qū)*/*- LCD模塊 -*/#define LCD_RW P2_6 /讀寫控制端#define LCD_RS P2_7/數(shù)據(jù)命令選擇端#define LC

16、D_E P2_5/執(zhí)行使能端#define LCD_DataP1 /P1口#define Write0x00/低電平寫入#define Read0x01/高電平讀出#define Data0x01/高電平選擇數(shù)據(jù)#define Cmd0x00/低電平選擇命令#define Enable0x00/躍變到低電平時執(zhí)行命令#define Disable0x01 #define True0x01#define False0x00#define LCD_Init0x38/初始化模式#define LCD_DispCtr 0x0C/開顯示及光標設(shè)置#define LCD_CloseCtr0x08/關(guān)顯示#

17、define LCD_CLS 0x01/清屏幕#define LCD_EnterSet 0x06/顯示光標 #define BusyP1_7/忙信號/*- 測速/測距/測時模塊 -*/#define CircleLength0.132 /小車轉(zhuǎn)一輪的長度為.132m/*- 控速模塊 -*/#define P03P0_3 /后電機#define P04P0_4 /后電機#define P01 P0_1 /前電機#define P02P0_2 /前電機#define P31P0_5 /控制液晶背光#define P33P3_3/*- 菜單選擇模塊-*/#define Line0x00/0代表直線模

18、式#define Curve0x01/1代表S型模式#define Normal0x00/0 代表正常速度#define Low0x01/1 代表低速#define High0x02/2 代表高速/* 全局函數(shù)聲明區(qū) */*- LCD模塊 -*/void LCDInit(void); /LCD初始化void SetWriteCmd(void); /設(shè)置寫命令模式void SetReadCmd(void); /設(shè)置讀命令模式void SetWriteData(void); /設(shè)置寫數(shù)據(jù)模式void WriteCmd(char cmd); /寫命令void WriteData(char ddata

19、); /寫數(shù)據(jù)void ExecuteCmd(void); /執(zhí)行命令void SetXY(char x,char y);/定位顯示地址void DisplaySingleChar(char x,char y,char cchar);/顯示單個字符void DisplayString(char x,char y,char *str); /顯示一段字符串void Delay(unsigned int time);/延時主程序void DelayUs(unsigned int time);/延時子程序bit IsBusy(void);/判斷忙標志函數(shù)void DisplayTime(void);/

20、顯示時間void DisplayAVGSpeed(void);/顯示平均速度void DisplayDistance(void);/顯示路程/*- 測速/測距/測時模塊 -*/ void INTInit(void); /所有中斷初始化void SpeedINT(void); /測速中斷void ComputeTime(void);void ComputeSpeedANDDistance(void);/計算速度和距離/*- 控速模塊 -*/void CtrSpeedINT(void); /控速中斷void Time0INT(void); void Time1INT(void); /控速單位時間中

21、斷void Clock0_Init(void);/時鐘中斷初始化void Clock1_Init(void); /時鐘中斷初始化void CtrSpeed(void);/* 全局變量區(qū)*/float SpeedCount = 0; /測速計數(shù)脈沖float Speed = 0.0;float Distance = 0.0; char Time1INTCount=0;/T1中斷時間計時float PassTime=0.00;/小車行走的時間short IsT0INT=1;bit IsT1INT;/判斷T1是否已經(jīng)響應中斷short IsT0INT2=1;char Thx5=0xf4,0xf4,0

22、xc5,0xf4,0xff; /3ms,3ms,15ms,3mschar Tlx5=0x48,0x48,0x68,0x48,0xff;char Thx0=0xd8;char Tlx0=0xf0;char Thx1=0xb1; /20mschar Tlx1=0xe0;short Round=0;short Back=0;short Back0=0;bit Backid;bit Stop=0;char Area0=0;char Area1=0;/區(qū)域變量char LowSpeedArea1StartTime;char LowSpeedArea1EndTime;char HighSpeedAreaE

23、ndTime;char LowSpeedArea2EndTime;char LowSpeedArea1PassTime=0; /第一個低速區(qū)通過時間char HighSpeedAreaPassTime=0;/高速區(qū)通過時間char LowSpeedArea2PassTime=0;/第二個低速區(qū)通過時間char ReadyToGo=4;/倒計時char flag;bit Roundid=0;char Nocurve=0; char ChangeFlag;char Mode; bit Running;bit SelectedAll;/模式和速度是否選擇完畢標志bit IsSelectingMode

24、;/模式選擇標志bit IsSelectingSpeed;/速度選擇標志bit ModeSelected;/已經(jīng)被選擇的模式標志char SelectedMode=10;/模式選擇是否完畢標志bit Next;/Next鍵標志bit SpeedSelected;/已經(jīng)被選中的速度方案標志char SelectedSpeed;/速度選擇是否完畢標志bit ChoosingDisplay;/人工選擇菜單開始標志bit SelectedShow;/顯示選擇標志bit SelectedReturn;/返回選擇標志bit Selected;/確定/返回鍵選擇標志bit ReturnSelection;/

25、返回鍵啟用標志bit AVGSpeedShow;/平均速度顯示標志bit TotalDistanceShow;/總路程顯示標志bit ReturnMain;/返回主菜單標志bit AutoDisplay;/自動顯示標志bit GoToChoosingDisplay;/人工選擇標志bit AutoMode=0;char PassLineID=0;char PassLine=0;float PrepareDistance;float FirstDistance;float SecondDistance;float ThirdDistance;int FirstHigh;int SecondHigh

26、;int ThirdHigh;float Rate=1.25; /5ms時的速度float Count=4;/時間的倍數(shù)/* 全局函數(shù)實現(xiàn)區(qū)*/*-主函數(shù) -*/void main() P01=0;P02=0;P03=0;P04=0;P31=1;/單片機復位,背光開Delay(40);/延時等待LCD啟動LCDInit();/初始化LCDDisplayString(0x0,0," Starting. ");DisplayString(0x0,1,"Designed By 202");Delay(300);WriteCmd(LCD_CLS);EA=1; /

27、開總中斷EX0=1;/開INT0中斷IT0=1;/INTO邊沿觸發(fā)EX1=1; /開INT1中斷IT1=1; /INT1邊沿觸發(fā)SelectedAll=False; /開始模式和速度選擇/*- 模式選擇 -*/DisplayString(0x0,0,"Choose The Mode ");DisplayString(0x0,1,"you want. ");Delay(50);WriteCmd(LCD_CLS);IsSelectingMode=True;while(1) WriteCmd(LCD_CLS);DisplayString(0x0,0,"

28、; Line Mode ");DisplayString(0x0,1,"Next Yes");Delay(300);/延時消除抖動while (1) /不斷檢測中斷,直到按確定鍵或是NEXT鍵if (Next=True)/如果按Next鍵則直接跳出break;if (ModeSelected=True)/如果按確定鍵則設(shè)置模式為Line并跳出SelectedMode=Line;break;/如果什么鍵都沒有按下,那么一直顯示等待if (ModeSelected=True)/按下了確定鍵,退出模式選擇IsSelectingMode=False;break;if (N

29、ext=True)/按下了Next鍵,顯示下一個菜單項Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0," Curve Mode ");DisplayString(0x0,1,"Next Yes");Delay(300);/延時消除抖動while(1)/不斷檢測中斷,直到按確定鍵或是Next鍵 if (Next=True)/如果再一次按下Next鍵,則跳出break;if (ModeSelected=True)/如果按下確定鍵,則設(shè)置模式為Curve,并跳出SelectedMode=Curve;break;

30、 if (ModeSelected=True) /按下了確定鍵,退出模式選擇IsSelectingMode=False;break;if (Next=True)/再一次按下了Next鍵,則循環(huán)模式選擇Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0," AutoMode ");DisplayString(0x0,1,"Next Yes");Delay(300); /延時消除抖動while(1)if (Next=True)break;if (ModeSelected=True)AutoMode=1;break

31、;if (ModeSelected=True)IsSelectingMode=False;break;if (Next=True)Next=False;continue;Delay(50);WriteCmd(LCD_CLS); /*- 速度選擇 -*/if (SelectedMode=Line && AutoMode=0)DisplayString(0x0,0," Now Choose a ");DisplayString(0x0,1," kind of Speed ");Delay(50);WriteCmd(LCD_CLS);IsSel

32、ectingSpeed=True;while(1)WriteCmd(LCD_CLS);DisplayString(0x0,0," Normal Speed ");DisplayString(0x0,1,"Next Yes");Delay(300); /延時消除抖動while(1)if (Next=True) /如果按Next鍵則直接跳出break;if (SpeedSelected=True) /如果按確定鍵則設(shè)置速度為Normal并跳出Thx0=0xec;Tlx0=0x78; /5msThx1=0xf0;Tlx1=0x60; /4msThx2=0x8a

33、;Tlx2=0xd0; /30msThx3=0xf4;Tlx3=0x48; /3msSelectedSpeed=Normal;break; /如果什么鍵都沒有按下,那么一直顯示等待if (SpeedSelected=True) /按下了確定鍵,退出速度選擇IsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS); DisplayString(0x0,0," Low Speed ");DisplayString(0x0,1,"Next Yes");Delay(300);

34、/延時消除抖動while(1)if (Next=True)/如果再一次按下Next鍵,則跳出break;if (SpeedSelected=True)/如果按下確定鍵,則設(shè)置速度為Low,并跳出SelectedSpeed=Low;/這里沒有速度設(shè)置,因為默認速度就是Lowbreak;if (SpeedSelected=True)/按下了確定鍵,退出速度選擇IsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString(0x0,0," High Speed ");Dis

35、playString(0x0,1,"Next Yes");Delay(300); /延時消除抖動while(1)if (Next=True) /如果再一次按下Next鍵,則跳出break;if (SpeedSelected=True) /如果按下確定鍵,則設(shè)置速度為High,并跳出Thx0=0xe0;Tlx0=0xc0; /8ms Thx1=0xe0;Tlx1=0xc0; /8ms Thx2=0x63;Tlx2=0xc0; /40ms Thx3=0xec;Tlx3=0x78; /5msSelectedSpeed=High;break;if (SpeedSelected=Tr

36、ue) /按下了確定鍵,退出速度選擇IsSelectingSpeed=False;break;if (Next=True) /再一次按下了Next鍵,則循環(huán)速度選擇Next=False;continue;SelectedAll=True; /標志模式選擇和速度選擇完畢Running=True;Delay(50);WriteCmd(LCD_CLS);/*- 顯示所選擇的模式和速度方案 -*/if (SelectedMode=Line)DisplayString(0x0,0,"Choosen Mode is ");DisplayString(0x0,1," Line

37、");Delay(50);WriteCmd(LCD_CLS);if (SelectedMode=Curve)DisplayString(0x0,0,"Choosen Mode is ");DisplayString(0x0,1," Curve ");Delay(50);WriteCmd(LCD_CLS);if (AutoMode=1)DisplayString(0x0,0,"Choosen Mode is ");DisplayString(0x0,1," AutoMode ");Delay(50);Wri

38、teCmd(LCD_CLS); if (SelectedMode=Line)if (SelectedSpeed=Normal)DisplayString(0x0,0,"Choosen Speed is");DisplayString(0x0,1," Normal ");Delay(50);WriteCmd(LCD_CLS);if (SelectedSpeed=Low)DisplayString(0x0,0,"Choosen Speed is");DisplayString(0x0,1," Low ");Delay(

39、50);WriteCmd(LCD_CLS);if (SelectedSpeed=High)DisplayString(0x0,0,"Choosen Speed is");DisplayString(0x0,1," High ");Delay(50);WriteCmd(LCD_CLS);INTInit(); /初始化所有中斷DisplayString(0x0,0,"Left Times To Go");while (ReadyToGo-) DisplaySingleChar(0x7,1,ReadyToGo+0x30);DisplaySingleChar(0x09,1,'s');Delay(300);WriteCmd(LCD_CLS

溫馨提示

  • 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

提交評論