基于单片机的多功能智能小车设计论文07461.doc

上传人:scccc 文档编号:12060726 上传时间:2021-12-01 格式:DOC 页数:69 大小:1.48MB
返回 下载 相关 举报
基于单片机的多功能智能小车设计论文07461.doc_第1页
第1页 / 共69页
基于单片机的多功能智能小车设计论文07461.doc_第2页
第2页 / 共69页
基于单片机的多功能智能小车设计论文07461.doc_第3页
第3页 / 共69页
基于单片机的多功能智能小车设计论文07461.doc_第4页
第4页 / 共69页
基于单片机的多功能智能小车设计论文07461.doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《基于单片机的多功能智能小车设计论文07461.doc》由会员分享,可在线阅读,更多相关《基于单片机的多功能智能小车设计论文07461.doc(69页珍藏版)》请在三一文库上搜索。

1、摘要(关键词:智能车 AT89S52 单片机金属感应器霍尔元件 1602LCD )智能作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可使用于科学勘探等等的用途。智能电动车就是 其中的一个体现。本次设计的简易智能电动车,采用AT89S52单片机作为小车的检测和 控制核心;采用金属感应器TL-Q5MC来检测路上感应到的铁片,从而把反馈到的信号送 单片机,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶,并且单片机选择的工作模式不同也可控制小车顺着 S形铁片行驶;采用霍尔元件A44E检测小车 行驶速度;采用1602LCD实时显示小车行

2、驶的时间,小车停止行驶后,轮流显示小车行 驶时间、行驶距离、平均速度以及各速度区行驶的时间。 本设计结构简单,较容易实现,但具有高度的智能化、人性化,一定程度体现了智能。目录1设计任务 31.1要求 32方案比较和选择 42.1路面检测模块 42.2 LCD显示模块 52.3测速模块 52.4控速模块 62.5 模式选择模块 73程序框图 74系统的具体设计和实现 94.1路面检测模块 94.2 LCD显示模块 94.3测速模块 94.4控速模块 94.5复位电路模块 94.6模式选择模块 95最小系统图 106最终PCB板图 127系统程序 138致谢 469参考文献 4710附录 481.

3、 设计任务:设计并制作了一个智能电动车,其行驶路线满足所需的要求1.1要求: 1.1.1基本要求:(1)分区控制:如(图1)所示:9络点:(X 血: lm J»IW(图1)车辆从起跑线出发(出发前,车体不得超出起跑线)。在第一个路程CD区(36 米)以低速行驶,通过时间不低于 10s;第二个路程DE区(2米)以高速行驶,通过 时间不得多于4秒;第三个路程EF区(36米)以低速行驶,通过时间不低于 10s。(2)小车能自动记录、显示行驶时间、行驶距离以及行驶速度,还能记录每段所走 的时间,从而判断是否符合课程设计要求。(记录显示装置要求安装在车上) 1.1.2发挥部分:S型控制:如(图

4、2)所示:(图2)车辆沿着S形铁片行驶,自动转弯,自动寻找正确方向和铁片。当离开S型铁片跑道或者感应不到铁片一段时间的时候,小车自动停止,并记录行驶时间,路程,平均速 度并通过LCD显示出来。2. 方案比较和选择:根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可2.1路面检测模块:采用铁片感应器TL-Q5MC来检测路面上的铁片从而给单片机中断脉冲。原理图接线如(图4)所示:brownJ$VccU-Q5MC输出接单片 blaclt机中断脉冲blue接地(图4)2.2 LCD显示模块:采用1602LCD由单片机的总线模式连接。为节约电源电量并且不影响LCD的功能,LCD的背

5、光用单片机进行控制,使LCD的背光在小车行驶的过程中不亮,因为我们不必看 其显示;在其它我们需要看显示的内容的时候LCD背光亮。2.3测速模块:2.3.1 方案 1 :采用采用霍尔开关元器件A44E检测轮子上的小磁铁从而给单片机中断脉冲,达到测 量速度的作用。霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求 简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。霍尔开关只对 一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件 安装在固定轴上,通过对脉冲的计数进行车速测量。232方案2:采用红外传感器进行测速。但无论是 反射式红外传感器还是对射式

6、红外传感器,他们对都 对外围环境要求较高,易受外部环境的影响,稳定性不高,且价格较为昂贵。通过对方案1、方案2的比较其优缺点,综合多方面因素决定选用方案1,其原理图接线如(图5)所示:A44E接地r接输出脉冲(图5)2.4控速模块:2.4.1 方案 1 :使用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻R的电流大,发热厉害,损耗大,对于小车的长时间运行不利。2.4.2 方案 2:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此 方案的优点是电路较为简单,缺点是继电器的响应

7、时间慢,易损坏,寿命较短,可靠性不243方案3:采用由双极性管组成的H桥电路。用单片机控制晶体管使之工作在占空比可调的开 关状态,精确调整电机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高; H桥电路保证了可以简单地实现转速和方向的控制; 电子开关的速度很快,稳定性也很高, 是一种广泛采用的调速技术。综合3种方案的优缺点,决定选择方案 3,其电路原理图如(图6)所示:2.5模式选择模块:模式选择模块通过一个74LS00和非门和两个不带锁按钮来控制单片机单片机的两个 中断口,从而按动按钮来选择小车走动的路型、来选择小车的速度是快速、中速、慢速; 走完路程小车停止后还可以通过按钮选择想要

8、在LCD上想看的信息,比如总时间、走过各段路程的时间、平均速度、总路程等。小车走动的模式选择有:(1)直线型:满足设计任务的基本要求,能稳定的走完全程。之后按顺序循环不 断的显示走完全程所用的时间、走完高速区所用的时间和走完低速区所用的时间这三个 时间;或者可以通过两个按钮以及 LCD显示的菜单选择所要看的内容如平均速度、全程 距离以及那三个时间。(2)S型:满足设计任务的发挥部分的要求,小车能自动的感应到在前面或在后面铁片,即第一次转弯后若感应到的是错误的方向,则小车会后退自动调整方向,沿着S型的铁片走。当走完S型铁片后的一定时间里,小车自动停止。之后自动进入菜单由我 们自己选择要看的内容时

9、间、平均速度和所走的距离。(3)自动型:小车先以一定的速度走完全程,之后再以一定的速度倒退回起点,再 调整速度在一定的时间内走完全程。走完后 LCD显示的内容和直线型显示的内容一样。3. 程序框图:单片机主程序框图、速度感应程序框图和铁片感应程序框图分别如(图7)所示。書能卜车迂行流程图Designed By 202背光开显示欢迎信尾t选择模式Lin噸式式AutoMo delW 式起跑前L,选择速度LowNortinalHigh起跑> 背光关显驱urning信息,控速Running¥行程结束V背光开Nc目动遁薛显亍两卜低速区和 个高遠区经过的时间最否为Lin诫岂 autoMfl

10、deWjfcAI-已轻跑完按确定键、菜单选择想要看的其他信息-总时 闻、总路程、平均时闾结束(图7)4. 系统的具体设计和实现:4.1路面检测模块:使用一个金属感应器,安装在车盘下,离地略小于或约四毫米。当金属传感器检测 到铁片时将对单片机发送中断信号,单片机运行中断,改变输给电机驱动信号的电压占 空比来控制小车的速度。4.2 LCD显示模块:采用1602LCD由单片机的总线模式连接。为节约电源,LCD的背光用单片机进行控 制。4.3测速模块:通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高电平,其 它时候是低电平),一个车轮均匀放四个小磁铁,计算一秒所得的脉冲数,从而计算出

11、一 秒小车轮子转动圈数,再测量出小车车轮周长即可计算出小车当前速度,累加可得到当 前路程。4.4控速模块:考虑到元器件的缺少以及我们所用的电路的驱动电机的电路原理图和和小车自带的 电路的电机驱动原理图一样,所以暂时使用小车自带的电机驱动电路图。4.5复位电路模块:单片机的复位电路通过手动来实现,复位电路图如(图8)所示。4.6模式选择模块:两个中断口使用和感应铁片、感应速度所使用的中断口一样,通过一个和非门和按钮控制。原理图如(图9)所示:8Vcc接地9o(图9)5.最小系统图:该系统主要用到的是单片机,所以主要的部分是最小系统图,该最小系统图如(图10)所示:丰审L«?. L<

12、;« WV Lxvstl lvx>.s<<(图卜系统的最终PCB板图(包括LCD接口以及其他的外部扩展电路部分,考虑到)分别如(图11)、该最最小系统I(图 12)最小系统图上显示。9ffldoTittdggod C1I5E Rm g OHSn 6P二od n密 Qud PQ5LVH 普5養2d 舌5M -si 3d 君电CBd Ectiu mQso<dIH黴 劇j 9( X ifkdr sfnd 2 OXJJS s爸只 卑出恳 唸览 0石岂空 gsC3cn r- 1- -1-1JpuigOS4IJU序鲂妙曲呼®10(图 12)7.系统程序:按照预定

13、的功能,系统实现预定的功能的程序如下所示:#include <intrins.h>#include <AT89X52.h>/*、*宏定义区*/*-LCD模块-*/#define LCD_RWP2_6/读写控制端#define LCD_RSP2_7/数据命令选择端#define LCD_EP2_5/执行使能端#define LCD_DataP1/P1 口#define Write0x00/低电平写入#define Read0x01/高电平读岀#define Data0x01/高电平选择数据#define Cmd0x00/低电平选择命令#define Enable0x00/

14、跃变到低电平时执行命令#define Disable0x01#define True0x01#define False0x0011 .i “ “、也Mi刖.卫#defineLCD_Init0x38/初始化模式#defineLCD_DispCtr0x0C/开显示及光标设置#defineLCD_CloseCtr0x08/关显示#defineLCD_CLS0x01/清屏幕#defineLCD_EnterSet0x06/显示光标#defineBusyP1_7/忙信号/*测速/测距/测时模块-*/#defineCircleLength0.132/小车转一轮的长度为/*控速模块*/#defineP03P0

15、_3/后电机#defineP04P0_4/后电机#defineP01P0_1/前电机#defineP02P0_2/前电机#defineP31P0_5/控制液晶背光#defineP33P3_3/*菜单选择模块-*/#defineLine0x000代表直线模式#defineCurve0x011代表S型模式#defineNormal0x000代表正常速度#defineLow0x011代表低速#defineHigh0x022代表高速'k'k'k'k'k'k'k'k'k'k'k'k'k'k&#

16、39;k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k'k&#

17、39;k'k'k'k'k'k'k'k'k'k'k'k'k-全局函数声明区咲*.132m/* LCD模块 */void LCDInit( void );/LCD 初始化voidSetWriteCmd( void );/设置写命令模式voidSetReadCmd(void );/设置读命令模式voidSetWriteData( void );/设置写数据模式voidWriteCmd( char cmd);/写命令voidWriteData( char ddata);/写数据voidExecuteCmd(

18、 void );/执行命令voidSetXY( char x, char y);/定位显示地址voidDisplaySingleChar( char x, char y, char cchar);/显示单个字符voidDisplayString( char x, char y, char *str);/显示一段字符串voidDelay( unsigned int time);/延时主程序voidDelayUs( unsigned int time);/延时子程序bit IsBusy( void );/判断忙标志函数voidDisplayTime( void );/显示时间voidDisplay

19、AVGSpeed( void );/显示平均速度voidDisplayDistance( void );/显示路程/* 测速/测距/测时模块 */所有中断初始化/测速中断void INTInit( void );void SpeedINT( void );void ComputeTime( void );voidComputeSpeedANDDistance( void );/计算速度和距离/*- 控速模块*/voidCtrSpeedINT( void );/控速中断voidTimeOINT( void );voidTime1INT( void );/控速单位时间中断voidClockO_ln

20、it( void );/时钟中断初始化voidClock1nit( void );/时钟中断初始化voidCtrSpeed( void );/*、*全局变量区*/floatSpeedCount =0;/测速计数脉冲floatSpeed =0.0 ;floatDistance =0.0;charTime1INTCount= 0;/T1中断时间计时floatPassTime= 0.00 ;/小车行走的时间shortIsT0INT= 1;bitIsT1INT;/判断T1是否已经响应中断shortIsT0INT2= 1;charThx 5= 0xf4,0xf4,0xc5,0xf4,0xff ;3ms,

21、3ms,15ms,3mscharTlx 5= 0x48, 0x48, 0x68,0x48, 0xff ;charThx0= 0xd8;charTlx0= 0xf0 ;charThx1= 0xb1;/20mscharTlx1= 0xe0;shortRound= 0;shortBack= 0;shortBack0= 0;bitBackid;bitStop= 0;charArea0= 0;charArea1= 0;/区域变量charLowSpeedArea1StartTime;charLowSpeedArea1EndTime;charHighSpeedAreaEndTime;charLowSpeed

22、Area2EndTime;charLowSpeedArea1PassTime= 0;/第一个低速区通过时间charHighSpeedAreaPassTime= 0;/高速区通过时间charLowSpeedArea2PassTime= 0;/第二个低速区通过时间charReadyToGo= 4;/倒计时charflag;bitRoundid= 0;charNocurve= 0;charChangeFlag;19charMode;bitRunning;bitSelectedAll;/模式和速度是否选择完毕标志bitIsSelectingMode;/模式选择标志bitIsSelectingSpeed

23、;/速度选择标志bitModeSelected;/已经被选择的模式标志charSelectedMode= 10;/模式选择是否完毕标志bitNext;/Next键标志bitSpeedSelected;/已经被选中的速度方案标志charSelectedSpeed;/速度选择是否完毕标志bitChoosingDisplay;/人工选择菜单开始标志bitSelectedShow;/显示选择标志bitSelectedReturn;/返回选择标志bitSelected;/确定/返回键选择标志bitReturnSelection;/返回键启用标志bitAVGSpeedShow;/平均速度显示标志bitTo

24、talDistanceShow;总路程显示标志bitReturnMain;/返回主菜单标志bitAutoDisplay;/自动显示标志bitGoToChoosingDisplay;/人工选择标志bitAutoMode= 0;charPassLineID= 0;charPassLine= 0;floatPrepareDistance;floatFirstDistance;floatSecondDistance;floatThirdDistance;intFirstHigh;intSecondHigh;intThirdHigh;floatRate= 1.25 ;/5ms时的速度floatCount

25、= 4;/时间的倍数*全局函数实现区*/*void main()P01= 0;P02=0;P03=0;P04=0;P31=1;Delay( 40);LCDInit();主函数*/单片机复位,背光开/延时等待LCD启动/初始化LCDDisplayString(0x0,0," Starting.");DisplayString(0x0, 1, "Designed By 202");while (1)21Delay( 300);WriteCmd(LCD_CLS);EA=1;EX0=1;IT0= 1;EX1=1;IT 1=1;SelectedAII=False;

26、/* 模式选择DisplayString( 0x0, 0, "Choose The Mode ");DisplayString( 0x0, 1, "you want. ");Delay( 50);WriteCmd(LCD_CLS);lsSelectingMode=True;while (1)WriteCmd(LCD_CLS);DisplayString( 0x0, 0," Line Mode " DisplayString( 0x0, 1, "Next Yes" Delay( 300);while ( 1)if (

27、Next=True)break;if (ModeSelected=True)SelectedMode=Line; break;if (ModeSelected=True)IsSelectingMode=False; break;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString( 0x0, 0, " Curve Mode DisplayString( 0x0, 1, "Next Yes" Delay( 300);/开总中断/开INT0中断/INTO边沿触发/开INT1中断/INT1边沿触发/开始模式和速

28、度选择););/延时消除抖动/不断检测中断,直到按确定键或是NEX键/如果按Next键则直接跳岀/如果按确定键则设置模式为Line并跳岀/如果什么键都没有按下,那么一直显示等待/按下了确定键,退岀模式选择/按下了 Next键,显示下一个菜单项););/延时消除抖动/不断检测中断,直到按确定键或是Next键*/if (Next=True)break ;if (ModeSelected=True)SelectedMode=Curve; break ;if (ModeSelected=True)lsSelectingMode=False;break;if (Next=True)Next=False;

29、WriteCmd(LCD_CLS);DisplayString( 0x0, 0, " AutoModeDisplayString( 0x0, 1, "Next Yes" Delay( 300);while (1)if (Next=True)break ;if (ModeSelected=True)AutoMode=1;break ;if (ModeSelected=True)IsSelectingMode=False;break;if (Next=True)Next=False;continue ;Delay( 50);/如果再一次按下Next键,则跳出/如果按下

30、确定键,则设置模式为Curve,并跳出/按下了确定键,退岀模式选择/再一次按下了 Next键,则循环模式选择););/延时消除抖动16WriteCmd(LCD_CLS);/* 速度选择-if (SelectedMode=Line && AutoMode= 0)DisplayString(0x0,0," Now Choose a ");DisplayString(0x0, 1," kind of Speed ");Delay( 50);WriteCmd(LCD_CLS);lsSelectingSpeed=True;while (1)Writ

31、eCmd(LCD_CLS);DisplayString( 0x0, 0, " Normal Speed "DisplayString( 0x0, 1, "Next Yes" Delay( 300);while (1)if (Next=True)break ;if (SpeedSelected=True)Thx 0=0xec;Tlx 0=0x78;Thx 1 = 0xf0 ;Tlx 1=0x60;Thx 2=0x8a;Tlx 2=0xd0;Thx 3= 0xf4 ;Tlx 3=0x48;SelectedSpeed=Normal; break ;if (Sp

32、eedSelected=True)lsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString( 0x0, 0, " Low SpeedDisplayString( 0x0, 1, "Next Yes"Delay( 300);while (1)*/););/延时消除抖动/如果按Next键则直接跳岀/如果按确定键则设置速度为 Normal并跳出/5ms/4ms/30ms/3ms/如果什么键都没有按下,那么一直显示等待/按下了确定键,退岀速度选择););/延时

33、消除抖动25if (Next=True)/如果再一次按下Next键,则跳出break;if (SpeedSelected=True)SelectedSpeed=Low; break;if (SpeedSelected=True)lsSelectingSpeed=False;break;if (Next=True)Next=False;WriteCmd(LCD_CLS);DisplayString( 0x0, 0, " High SpeedDisplayString( 0x0, 1, "Next Yes"Delay( 300);while (1)if (Next=T

34、rue)break;if (SpeedSelected=True)Thx 0= 0xe0;Tlx 0= 0xc0;Thx 1=0xe0;Tlx 1 = 0xc0;Thx 2=0x63;Tlx 2=0xc0;Thx 3=0xec;Tlx 3=0x78;SelectedSpeed=High; break;if (SpeedSelected=True)IsSelectingSpeed=False;break;if (Next=True)Next=False;continue ;/如果按下确定键,则设置速度为Low,并跳岀/这里没有速度设置,因为默认速度就是Low/按下了确定键,退岀速度选择););/

35、延时消除抖动/如果再一次按下Next键,则跳出/如果按下确定键,则设置速度为High,并跳岀/8ms/8ms/40ms/5ms/按下了确定键,退岀速度选择/再一次按下了 Next键,则循环速度选择SelectedAII=True;/标志模式选择和速度选择完毕Running=True;Delay( 50);WriteCmd(LCD_CLS);/* 显示所选择的模式和速度方案 */if (SelectedMode=Line)DisplayString( 0x0, 0, "Choosen Mode is ");DisplayString( 0x0,1," Line &q

36、uot;);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 ");Dela

37、y( 50);WriteCmd(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, "

38、; Low ");Delay( 50);WriteCmd(LCD_CLS);if (SelectedSpeed=High)19-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-)DisplaySingleCha

39、r( 0x7, 1,ReadyToGo+0x30);DisplaySingleChar( 0x09, 1, 's');Delay( 300);WriteCmd(LCD_CLS);DisplayString( 0x05, 0, "Go!");Delay( 100);WriteCmd(LCD_CLS);DisplayString( 0x0,0," Living.");DisplayString( 0x0, 1, "Designed by 202");if (SelectedMode=Line&&AutoMo

40、de= 0)flag=Area0;elseflag= 1;while (flag< 5)if (AutoMode=1)/ 自动模式switch (PassLineID)case 0 :if (IsT0INT= 1)P01=P02=P04=0;P03= 1;elseP0 仁P02=P03=P04=0; break ;case 1 :P01=P02=P03=0;P04=1;break;case 2 :P01=P02=P04= 0;P03=1;break;default : break;20Ielseif (SelectedMode=Line)/ 直线模式flag=AreaO;if (lsTOINT= 1)P03=1;P04=0;P0仁P02=0;elseP03= 0;P04=0;P01=P02=0;else/S型模式if (Nocurvev 2)&&Round!=0&&(Back0>0)&&Back!= 0)if (Backid= 1)P01= 1;P02=0;P03=0;P04=1;else

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1