《51单片机小车毕业论文.docx》由会员分享,可在线阅读,更多相关《51单片机小车毕业论文.docx(75页珍藏版)》请在三一办公上搜索。
1、51单片机小车毕业论文北京电子科技职业学院自动化工程学院课程设计论文 北京电子科技职业学院 毕业设计 课题名称:设计51单片机寻轨小车 学 院:自动化工程学院 教 学 系:自动化 班 级:13电气 学生姓名:郭佳禹 指导教师:李晖 教研室主任审核: 二一六年4月 1 日7 北京电子科技职业学院自动化工程学院课程设计论文 摘要 智能作为现代的新发明,是以后的发展方向,它可以按照预先设定的模式在一个环境中运行,不需要人为的管理,可应用于科学勘探等等用途。智能电动车就是其中一个体现。本次设计的简易智能电动车,采用AT89S5单片机作为小车的检测和控制核心;采用金属感应器TL-Q5MC来检测路上感应到
2、的贴片,从而把反馈到的信号传到单片机中,使单片机按照预定的工作模式控制小车在各区域按预定的速度行驶;采用霍尔元件A44E检测小车行驶速度;采用1602LCD实时显示小车的行驶时间,小车停止行驶后,轮流显示小车行驶时间、行驶距离、平均速度以及各速度区行驶的时间。本设计结构简单,较容易实现,但具有较高的智化、人性化,一定程度体现了智能。 目录 1 设计任务. 1.1 要求. 2 方案比较与选择. 2.1路面检测模块. 2.2 LCD显示模块. 2.3测速模块. 2.4控速模块. 2.5模式选择模块. 3 程序框图. 4 系统的具体设计与实现. 4.1路面检测模块. 4.2 LCD显示模块. 4.3
3、测速模块. 4.4控速模块. 2 北京电子科技职业学院自动化工程学院课程设计论文 4.5复位电路模块. 4.6模式选择模块. 5 最小系统图. 6 最终PCB板图. 7 系统程序. 8 参考文献. 9 附录. 1. 设计任务: 设计并制作了一个智能电动车,其行驶路线满足所需的要求。 1.1 要求: 1.1.1 基本要求: 分区控制: 如所示: 车辆从起跑线出发。在第一个路程CD区以低速行驶,通过时间不低于10s;第二个路程DE区以高速行驶,通过时间不得多于4秒;第三个路程EF区以低速行驶,通过3 北京电子科技职业学院自动化工程学院课程设计论文 时间不低于10s。 小车能自动记录、显示行驶时间、
4、行驶距离以及行驶速度,还能记录每段所走的时间,从而判断是否符合课程设计要求。 1.1.2 发挥部分: S型控制:如所示: 车辆沿着S形铁片行驶,自动转弯,自动寻找正确方向和铁片。当离开S型铁片跑道或者感应不到铁片一段时间的时候,小车自动停止,并记录行驶时间,路程,平均速度并通过LCD显示出来。 2. 方案比较与选择: 根据设计任务要求,并且根据我们自己的需要而附加的功能,该电路的总体框图可分为几个基本的模块,框图如所示: 2.1 路面检测模块: 4 北京电子科技职业学院自动化工程学院课程设计论文 采用铁片感应器TL-Q5MC来检测路面上的铁片从而给单片机中断脉冲。原理图接线如所示: 2.2 L
5、CD显示模块: 采用1602LCD,由单片机的总线模式连接。为节约电源电量并且不影响LCD的功能,LCD的背光用单片机进行控制,使LCD的背光在小车行驶的过程中不亮,因为我们不必看其显示;在其它我们需要看显示的内容的时候LCD背光亮。 2.3 测速模块: 2.3.1 方案1: 采用霍尔开关元器件A44E检测轮子上的小磁铁从而给单片机中断脉冲,达到测量速度的作用。霍尔元件具有体积小,频率响应宽度大,动态特性好,对外围电路要求简单,使用寿命长,价格低廉等特点,电源要求不高,安装也较为方便。霍尔开关只对一定强度的磁场起作用,抗干扰能力强,因此可以在车轮上安装小磁铁,而将霍尔器件安装在固定轴上,通过对
6、脉冲的计数进行车速测量。 2.3.2 方案2: 采用红外传感器进行测速。但无论是反射式红外传感器还是对射式红外传感器,他们对都对外围环境要求较高,易受外部环境的影响,稳定性不高,且价格较为昂贵。 通过对方案1、方案2的比较其优缺点,综合多方面因素决定选用方案1,其原理图接线如所示: 5 北京电子科技职业学院自动化工程学院课程设计论文 2.4 控速模块: 2.4.1 方案1: 使用功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻R的电流大,发热厉害,损耗大,对于小车的长时间运行不利。 2.4.2 方案2
7、: 采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。 2.4.3 方案3: 采用由双极性管组成的H桥电路。用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高;H桥电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。 综合3种方案的优缺点,决定选择方案3,其电路原理图如所示: 2.5 模式选择模块: 模式选择模块通过一个74LS00与非门和两个不带锁按钮来控制单片机单片机的
8、 6 北京电子科技职业学院自动化工程学院课程设计论文 两个中断口,从而按动按钮来选择小车走动的路型、来选择小车的速度是快速、中速、慢速;走完路程小车停止后还可以通过按钮选择想要在LCD上想看的信息,比如总时间、走过各段路程的时间、平均速度、总路程等。 小车走动的模式选择有: 直线型:满足设计任务的基本要求,能稳定的走完全程。之后按顺序循环不断的显示走完全程所用的时间、走完高速区所用的时间和走完低速区所用的时间这三个时间;或者可以通过两个按钮以及LCD显示的菜单选择所要看的内容如平均速度、全程距离以及那三个时间。 S型:满足设计任务的发挥部分的要求,小车能自动的感应到在前面或在后面铁片,即第一次
9、转弯后若感应到的是错误的方向,则小车会后退自动调整方向,沿着S型的铁片走。当走完S型铁片后的一定时间里,小车自动停止。之后自动进入菜单由我们自己选择要看的内容时间、平均速度和所走的距离。 自动型:小车先以一定的速度走完全程,之后再以一定的速度倒退回起点,再调整速度在一定的时间内走完全程。走完后LCD显示的内容与直线型显示的内容一样。 3. 程序框图: 单片机主程序框图、速度感应程序框图和铁片感应程序框图分别如所示。 7 北京电子科技职业学院自动化工程学院课程设计论文 8 北京电子科技职业学院自动化工程学院课程设计论文 (图7) 4系统的具体设计与实现: 4.1 路面检测模块: 应用一个金属感应
10、器,安装在车盘下,离地略小于或约四毫米。当金属传感器检测到铁片时将对单片机发送中断信号,单片机运行中断,改变输给电机驱动信号的电压占空比来控制小车的速度。 4.2 LCD显示模块: 采用1602LCD,由单片机的总线模式连接。为节约电源,LCD的背光用单片机进行控制。 4.3 测速模块: 通过霍尔元件感应磁铁来产生脉冲(当霍尔元件在离磁场较近时输出会是高电平,其它时候是低电平),一个车轮均匀放四个小磁铁,计算一秒所得的脉冲数,从而计算出一秒小车轮子转动圈数,再测量出小车车轮周长即可计算出小车当前速度,累加可得到当前路程。 4.4 控速模块: 考虑到元器件的缺少以及我们所用的电路的驱动电机的电路
11、原理图和和小车自带的电路的电机驱动原理图一样,所以暂时使用小车自带的电机驱动电路图。 4.5 复位电路模块: 单片机的复位电路通过手动来实现,复位电路图如所示。 4.6 模式选择模块: 两个中断口使用和感应铁片、感应速度所使用的中断口一样,通过一个与非门和按钮控制。原理图如所示: 9 北京电子科技职业学院自动化工程学院课程设计论文 5最小系 该系统主机,所以主要的部分最小系统图如所示: 北京电子科技职业学院自动化工程学院课程设计论文 6. 最终PCB板图: 该最小系统的最终PCB板图分别如、所示: 11 北京电子科技职业学院自动化工程学院课程设计论文 7系统程序: 按照预定的功能,系统实现预定
12、的功能的程序如下所示: #include #include /* * * 宏定义区 */ 12 北京电子科技职业学院自动化工程学院课程设计论文 /*- LCD模块 -*/ #define LCD_RW P2_6 #define LCD_RS P2_7 #define LCD_E P2_5 #define LCD_Data P1 #define Write 0x00 #define Read 0x01 #define Data 0x01 #define Cmd 0x00 #define Enable 0x00 命令 #define Disable 0x01 #define True 0x01 #
13、define False 0x00 #define LCD_Init 0x38 #define LCD_DispCtr 0x0C 设置 #define LCD_CloseCtr 0x08 #define LCD_CLS 0x01 13 /读写控制端 /数据命令选择端 /执行使能端 /P1口 /低电平写入 /高电平读出 /高电平选择数据 /低电平选择命令 /跃变到低电平时执行/初始化模式 /开显示及光标 /关显示 /清屏幕 北京电子科技职业学院自动化工程学院课程设计论文 #define LCD_EnterSet #define Busy 0x06 /显示光标 P1_7 /忙信号 /*- 测速/测
14、距/测时模块 -*/ #define CircleLength 为.132m /*- 控速模块 -*/ #define P03 #define P04 P0_3 P0_4 /后电机 /后电机 /前电机 0.132 /小车转一轮的长度#define P01 #define P02 #define P31 #define P33 P0_1 P0_2 /前电机 /控制液晶背光 P0_5 P3_3 /*- 菜单选择模块 -*/ #define Line #define Curve 0x00 /0代表直线模式 /1代表S型模式 0x01 14 #define Normal #define Low 0x0
15、0 0x01 /0 代表正常速度 /1 代表低速 北京电子科技职业学院自动化工程学院课程设计论文 #define High 0x02 /2 代表高速 /* * 全局函数声明区 * */ /*- LCD模块 -*/ void LCDInit(void); /LCD初始化 /设置写命令模void SetWriteCmd(void); 式 void SetReadCmd(void); 式 void SetWriteData(void); /设置读命令模/设置写数据模式 /写命令 /写数据 /执行命令 /定位显示地址 /显示单个字符 void WriteCmd(char cmd); void Writ
16、eData(char ddata); void ExecuteCmd(void); void SetXY(char x,char y); void DisplaySingleChar(char x,char y,char cchar); 15 北京电子科技职业学院自动化工程学院课程设计论文 void DisplayString(char x,char y,char *str); 串 void Delay(unsignedint time); void DelayUs(unsignedint time); bit IsBusy(void); /显示一段字符/延时主程序 /延时子程序 /判断忙标志
17、函数 /显示时间 /显示平均速度 void DisplayTime(void); void DisplayAVGSpeed(void); void DisplayDistance(void); /显示路程 /*- 测速/测距/测时模块 -*/ void INTInit(void); /所有中断初始化 /测速中断 void SpeedINT(void); void ComputeTime(void); void ComputeSpeedANDDistance(void); 距离 /计算速度和/*- 控速模块 -*/ void CtrSpeedINT(void); void Time0INT(vo
18、id); void Time1INT(void); void Clock0_Init(void); /控速中断 16 /控速单位时间中断 /时钟中断初始化 北京电子科技职业学院自动化工程学院课程设计论文 void Clock1_Init(void); 始化 void CtrSpeed(void); /时钟中断初/* * * 全局变量区 */ float SpeedCount = 0; float Speed = 0.0; /T1中断时间计/测速计数脉冲 float Distance = 0.0; char Time1INTCount=0; 时 float PassTime=0.00; shor
19、t IsT0INT=1; bit 应中断 short IsT0INT2=1; 17 /小车行走的时间 /判断T1是否已经响 IsT1INT; 北京电子科技职业学院自动化工程学院课程设计论文 char Thx5=0xf4,0xf4,0xc5,0xf4,0xff; /3ms,3ms,15ms,3ms char Tlx5=0x48,0x48,0x68,0x48,0xff; char Thx0=0xd8; char Tlx0=0xf0; char Thx1=0xb1; char Tlx1=0xe0; short Round=0; short Back=0; short Back0=0; bit Bac
20、kid; bit Stop=0; char Area0=0; char Area1=0; char LowSpeedArea1StartTime; char LowSpeedArea1EndTime; char HighSpeedAreaEndTime; char LowSpeedArea2EndTime; 18 /20ms /区域变量 北京电子科技职业学院自动化工程学院课程设计论文 char LowSpeedArea1PassTime=0; 区通过时间 char HighSpeedAreaPassTime=0; 时间 char LowSpeedArea2PassTime=0; 区通过时间 c
21、har ReadyToGo=4; char flag; bit Roundid=0; char Nocurve=0; char ChangeFlag; char Mode; bit Running; bit SelectedAll; 完毕标志 bit IsSelectingMode; bit IsSelectingSpeed; bit ModeSelected; 标志 char SelectedMode=10; 19 /第一个低速 /高速区通过 /第二个低速 /倒计时 /模式和速度是否选择 /模式选择标志 /速度选择标志 /已经被选择的模式 /模式选择是否北京电子科技职业学院自动化工程学院课程
22、设计论文 完毕标志 bit Next; /Next键标志 /已经被选中的速度bit SpeedSelected; 方案标志 char SelectedSpeed; /速度选择是否完毕标志 bit 开始标志 bit bit bit bit bit 标志 bit bit bit bit bit ChoosingDisplay; SelectedShow; SelectedReturn; Selected; ReturnSelection; AVGSpeedShow; TotalDistanceShow; ReturnMain; AutoDisplay; GoToChoosingDisplay; A
23、utoMode=0; 20 /人工选择菜单 /显示选择标志 /返回选择标志 /确定/返回键选择标志 /返回键启用标志 /平均速度显示 /总路程显示标志 /返回主菜单标志 /自动显示标志 /人工选择标志 北京电子科技职业学院自动化工程学院课程设计论文 char PassLineID=0; char PassLine=0; float PrepareDistance; float FirstDistance; float SecondDistance; float ThirdDistance; int FirstHigh; int SecondHigh; int ThirdHigh; float
24、Rate=1.25; float Count=4; /* * * 全局函数实现区 /5ms时的速度 /时间的倍数 */ 21 北京电子科技职业学院自动化工程学院课程设计论文 /*- 主函数 -*/ void main P01=0; P02=0; P03=0; P04=0; P31=1; Delay(40); LCDInit; DisplayString(0x0,0, Starting. ); DisplayString(0x0,1,Designed By 202); Delay(300); WriteCmd(LCD_CLS); EA=1; EX0=1; IT0=1; EX1=1; IT1=1;
25、 22 /单片机复位,背光开/延时等待LCD启动 /初始化LCD /开总中断 /开INT0中断 /INTO边沿触发 /开INT1中断 /INT1边沿触发 北京电子科技职业学院自动化工程学院课程设计论文 SelectedAll=False; 择 /开始模式和速度选 /*- 模式选择 -*/ DisplayString(0x0,0,Choose The Mode ); DisplayString(0x0,1,you want. ); Delay(50); WriteCmd(LCD_CLS); IsSelectingMode=True; while(1) while (1) /不断检测中断,直到按D
26、elay(300); /延时消除抖动 WriteCmd(LCD_CLS); DisplayString(0x0,0, Line Mode ); DisplayString(0x0,1,Next Yes); 确定键或是NEXT键 if (Next=True) 23 /如果按Next键则直接北京电子科技职业学院自动化工程学院课程设计论文 跳出 break; if (ModeSelected=True) 置模式为Line并跳出 SelectedMode=Line; break; 那么一直显示等待 if (ModeSelected=True) 出模式选择 IsSelectingMode=False;
27、break; if (Next=True) 一个菜单项 Next=False; WriteCmd(LCD_CLS); 24 /如果按确定键则设/如果什么键都没有按下,/按下了确定键,退/按下了Next键,显示下北京电子科技职业学院自动化工程学院课程设计论文 DisplayString(0x0,0, Curve Mode ); DisplayString(0x0,1,Next Yes); Delay(300); while(1) 确定键或是Next键 if (Next=True) 键,则跳出 break; if (ModeSelected=True) 置模式为Curve,并跳出 Selected
28、Mode=Curve; break; if (ModeSelected=True) 式选择 25 /延时消除抖动 /不断检测中断,直到按/如果再一次按下Next/如果按下确定键,则设/按下了确定键,退出模北京电子科技职业学院自动化工程学院课程设计论文 IsSelectingMode=False; break; if (Next=True) /再一次按下了Next键,则循环模式选择 Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0, AutoMode ); DisplayString(0x0,1,Next Yes); Delay(300); /
29、延时消除抖动 while(1) if (Next=True) break; if (ModeSelected=True) AutoMode=1; 26 北京电子科技职业学院自动化工程学院课程设计论文 break; if (ModeSelected=True) IsSelectingMode=False; break; if (Next=True) Next=False; continue; Delay(50); WriteCmd(LCD_CLS); /*- 速度选择 -*/ 27 北京电子科技职业学院自动化工程学院课程设计论文 if (SelectedMode=Line & AutoMode=
30、0) 跳出 DisplayString(0x0,0, Now Choose a ); DisplayString(0x0,1, kind of Speed ); Delay(50); WriteCmd(LCD_CLS); IsSelectingSpeed=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; /如果按确定
31、键则设置速度if (SpeedSelected=True) 28 北京电子科技职业学院自动化工程学院课程设计论文 为Normal并跳出 Thx0=0xec;Tlx0=0x78; Thx1=0xf0;Tlx1=0x60; Thx2=0x8a;Tlx2=0xd0; /5ms /4ms /30ms Thx3=0xf4;Tlx3=0x48; /3ms SelectedSpeed=Normal; break; /如果什么键都没有按下, 那么一直显示等待 度选择 if (SpeedSelected=True) /按下了确定键,退出速 IsSelectingSpeed=False; break; if (N
32、ext=True) Next=False; 29 北京电子科技职业学院自动化工程学院课程设计论文 WriteCmd(LCD_CLS); DisplayString(0x0,0, Low Speed ); DisplayString(0x0,1,Next Yes); Delay(300); /延时消除抖动 while(1) if (Next=True) /如果再一次按下Next键,则跳出 break; /如果按下确定键,则设if (SpeedSelected=True) 置速度为Low,并跳出 SelectedSpeed=Low; /这里没有速度设置,因为默认速度就是Low break; if
33、(SpeedSelected=True) 30 /按下了确定键,退出速北京电子科技职业学院自动化工程学院课程设计论文 度选择 则跳出 break; while(1) if (Next=True) /如果再一次按下Next键,Delay(300); /延时消除抖动 if (Next=True) Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0, High Speed ); DisplayString(0x0,1,Next Yes); IsSelectingSpeed=False; break; if (SpeedSelected=True) /如果按下确定键,则设置速度为High,并跳出 31 北京电子科技职业学院自动化工程学院课程设计论文 度选择 Thx0=0xe0;Tlx0=0xc0; /8ms Thx1=0xe0;Tlx1=0xc0; /8ms Thx2=0x63;Tlx2=0xc0; /40ms Thx