智能小车速度测量控制系统设计.docx
- 文档编号:24989822
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:28
- 大小:359.17KB
智能小车速度测量控制系统设计.docx
《智能小车速度测量控制系统设计.docx》由会员分享,可在线阅读,更多相关《智能小车速度测量控制系统设计.docx(28页珍藏版)》请在冰豆网上搜索。
智能小车速度测量控制系统设计
毕业教学环节成果
(2012届)
题目智能小车速度测量控制系统设计
学院信息工程学院
专业电气自动化技术
班级
学号
姓名
指导教师
2012年5月17日
目 录
智能小车速度测量控制系统设计
信息工程学院电气自动化专业
摘要:
智能小车以STC12C5410AD单片机为控制核心,L298芯片作为双电机驱动模块,由单片机输出PWM控制电机转速,通过光电编码器检测脉冲并将信号送入单片机来测量电机的转速与距离,通过1602液晶来显示小车的速度。
本文介绍了该小车的的主控、电机驱动、电源、显示模块等硬件模块和小车的运动控制速度测量与显示的软件设计。
关键词:
STC12C5410AD1602LCDPWM光电编码器
IntelligentVehicleSpeedMeasurementControlSystemDesign
Abstract:
CarSTC12C5410ADsinglechipmicrocomputerintelligenttoascontrolcore,L298chipasdoublemotordrivermodule,outputbysingle-chipmicrocomputercontrolPWMmotorspeed,throughthephotoelectricencoderandwillsignaldetectionpulsetosinglechipmicrocomputertomeasuremotorspeedanddistance,through1602LCDtodisplaythespeedofthecar.Thispaperintroducesthemaincontrolofthecar,motordrive,powersupply,displaymoduleandotherhardwaremoduleandacarmovementcontrolspeedmeasurementanddisplaysoftwaredesign.
Keywords:
STC12C5410AD1602LCDPWMPhotoelectricencoder
引言
近年来,随着我国经济建设的高速发展,机动车辆拥有量也在急剧增长,交通事故也日益增多,车辆超速成为了越来越严重的问题。
而我国生产的汽车、摩托车电机转速测量系统大多使用动圈式模拟测速。
这种测量系统存在精度差、过载能力弱等缺点。
本系统是以STC12C5410AD单片机为控制核心,通过L298芯片控制电机转速,用光电编码器来检测脉冲再将信号送入单片机来测量电机的转速并使用1602液晶来显示小车的速度。
1方案设计与论证
根据要求,确定如下方案:
整个小车系统主要由三轮结构小车、供电电源电路、测速电路、电机驱动电路以及显示电路组成。
这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。
1.1主控系统
根据设计要求,我认为此设计属于多输入量的复杂程序控制问题。
据此,拟定了以下两种方案并进行了综合的比较论证,具体如下:
方案一:
选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。
CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。
但CPLD在控制上较单片机有较大的劣势。
同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。
若采用该方案,必将在控制上遇到许许多多不必要增加的难题。
为此,我们不采用该种方案,进而提出了第二种设想。
方案二:
采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。
充分分析我们的系统,其关键在于实现小车的运动控制,而在这一点上,单片机就显现出来它的优势——控制简单、方便、快捷。
这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。
因此,这种方案是一种较为理想的方案。
针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,在综合考虑了传感器、两部电机的驱动等诸多因素后,我们决定采用STC12C5410AD单片机,充分利用单片机的资源。
1.2电机驱动模块
方案一:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整,此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。
方案二:
采用由集成了双极性管组成的H桥电路芯片L298N。
用单片机控制晶体管使之工作在占空比可调的开关状态,精确调整电机转速。
这种电路由于工作在管子的饱和截止模式下,效率非常高;H桥电路保证了可以简单地实现转速和方向的控制;电子开关的速度很快,稳定性也很高,是一种广泛采用的调速技术。
综合两种方案的优缺点,决定选择方案二。
1.3测速模块
在电机测速中,考虑了两种方案:
一种是使用光电码盘,即透射式光电传感器(凹槽型,类似老式鼠标),另一种是霍尔传感器(适合较高速度)。
两种方案的主要区别如表1-1:
表1-1速度检测系统方案对比
霍尔传感器
关电码盘
抗干扰性
较强
强
实时性
较好
好
易用性
需和磁钢配对使用,较麻烦
较简单
由上表可以看出光电码盘在各方面都具有一定的优势,因此本设计采用关电码盘测速。
1.4显示模块
系统采用1602液晶显示,它可以显示2*16个字符,同时只用11个I/O端口,它不仅节省了单片机的资源,相比较数码管液晶显示更加直观、节能,同时在硬件上面液晶的驱动电路比数码管简单的多,故采用LCD显示。
图1-21602字符型液晶显示
2系统的硬件电路
2.1总体设计
小车本体用有机玻璃制作,有两部分组成,长方体长20cm,宽17cm,半圆为直径为17cm,车架用于支撑控制板、供电电源等。
车体总结构有3个轮子组成,前面两个带有电机驱动,电机的型号为PITTMAN直流测速电机0585,具体参数为电压:
4-150V功率:
4-200w,电机减速比为1:
74,减速后电机的转速为100r/min;后面一个为万向轮,在底板的正中间安装各块电路板(有主板、电机驱动以及显示板)。
搭建小车自行本体,采用左右两轮分别驱动,即左右两轮分别采用两个转速和力矩基本相同的减速进行驱动,车子的后面安装一个万向轮。
图2-1主板设计框图
2.2单片机控制系统设计
采用STC12C5410AD单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。
图2-2STC12C5410AD单片机
STC12C5410AD是通过串口连接到PC机进行在线程序编译的。
由于电脑串口RS232电平是+10v、-10v,而一般的单片机应用系统的信号电压是TTL电平0、+5v,MAX232是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片,该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平MAX232,用来进行电平转换。
本设计MAX232芯片及其功能电路,如图2-3所示:
图2-3单片机MAX232芯片及接口电路
通过串口与计算机相连,使用STC-ISP软件实行在线程序烧写。
电路连接部分如图所示。
MAX232芯片通过两管脚与单片机RXD、TXD端相连,以实现向单片机内部传递程序。
基本工作过程:
发送时MCU的TXD(TTL电平)经过MAX232的11(T1IN)送到MAX232内部,在内部TTL电平被提升为232电平,通过14(T1OUT)发送出去,接收时外部232电平经过MAX232的13(R1IN)进入到MAX232的内部,在内部232电平被降低为TTL电平,经过12(R1OUT)送到MCU的RXD,进入MCU内部。
2.3电机驱动电路设计
系统采用两个直流电机,实现正反转、加减速功能,所以需要使用四个功率元器件的H桥电路,L298是SGS公司的产品,内部包含4通道逻辑驱动电路,即内含二个H桥的高电压大电流双向桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机,所以根据实际需要选择了L298N芯片。
驱动电路的设计如图2-4所示:
图2-4L298N驱动电路
L298N的IN1、IN2、1IN3、IN4四个引脚接到单片机上,通过对单片机的编程就可以实现两个直流电机的PWM调速以及正反转等功能。
电机转动状态编码如表2-5所示:
表2-5电机转动状态编码
左电机
右电机
左电机
右电机
电动车运行状态
1IN1
1IN2
2IN1
2IN2
1
0
1
0
正转
正转
前行
1
0
0
1
正转
反转
左转
1
0
0
0
正转
停
以左电机为中心原地左转
0
1
1
0
反转
正转
右转
0
0
1
0
停
正转
以右电机为中心原地右转
0
1
0
1
反转
反转
后退
1
1
1
1
杀停
杀停
立刻停止
2.4LCD显示电路设计
液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点得到广泛的利用,本模块将RS、RW、E分别接到单片机14、15、16引脚,RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器;RW为读写信号线,高电平为读操作,低电平为写操作;E端为使能端,由高电平跳为低电平时液晶执行命令。
7~14号脚即D0~D7为8位双向数据线;1脚接地电源,2脚接+5v电源;3脚为液晶显示器对比度调整。
在其右边加一个上拉排阻。
如图2-6所示:
图2-61602液晶显示模块
2.5键盘电路设计
系统用到的是独立按键,连接后将其接到单片机STC12C5410I/O端口P1.0~P1.3口,S1为总控制按钮即启动按钮,S2为停止,可将小车停止运行;S3为加速功能,可改变占空比来提升电机的转速;S4为减速功能,可减小占空比起到减速作用。
如图2-7所示:
图2-7独立按键
2.6测速电路设计
系统为了达到小车速的精确测量,采用的是光电码盘设计的方法,基本的原理:
当发射管光照射到接收管时,接收管导通,反之关断。
为此,将制作好的码盘安装在转轴上,当码盘上扇叶经过时便会产生脉冲信号,测速电路原理图如图2-8所示,编码盘如图2-9所示。
图2-8光电传感器开关原理图图2-9测速编码盘
2.7电源电路设计
系统采用12伏转5伏的电源电路,将+5V电源供给单片机;另外因直流电机的驱动电压是12V,所以使用12伏的直流电源电池供给电机。
电路的设计如图2-10所示:
图2-10电源电路
3系统软件设计
根据课题任务的主要内容,整个系统软件由初始化程序、转速控制及显示小车转速测量构成。
程序基本结构图如图3-1所示。
转速控制程序:
通过独立按键来调节占空比从而实现加速、减速、启动及停止功能。
显示子程序:
采用红外对管RP220检测小车速度。
用LCD1602液晶的读写显示小车的当前转速。
实现小车显示转速测量功能。
转速测量程序:
用定时中断计脉冲数,然后再经过数据处理,计算出速度与距离,实现测速测距功能。
图3-1程序基本结构图
3.1测速程序
转速测量程序:
测速是否为高电平,如果是就置标志位为1,不是则判断标志位是否为高电平,如果是,标志位清零,脉冲数加1,不是则返回。
定时1S储存脉冲数,脉冲数清零,速度计算处理。
速度处理程序流程图如图3-2所示,脉冲检测及计数程序流程图如图3-3所示。
智能小车两轮同轴上装有一个12个齿的机械齿轮。
车轮的周长L可以测得,因为一周有12个齿产生12个脉冲,所以可算得接收到一个脉冲车轮实际走的长度L1=L/12。
如果1秒后单片机接收到脉冲的个数为N,就可以计算智能小车行驶了的距离S=N*L1。
因为是1秒走过的距离,所以S的值也就等于速度V的值,实现小车转速测量,即:
V=S/T=N*L1=N*L/12=N*2πr/12=N*2*3.14*0.03/12=0.0157Nm/s=0.05652Nkm/h;
图3-2速度处理程序流程图图3-3脉冲检测及计数程序流程图
3.2显示程序
小车转速测量及里程显示程序:
采用红外对管RP220检测小车速度。
用LCD1602液晶的读写显示小车的当前转速和里程,显示内容如图3-4所示:
图3-4显示内容
实现小车显示转速测量及里程功能。
显示程序的流程图如表3-5所示:
表3-5显示存储单元分配表
显示地址
显示内容
存储单元
80H
S
-
81H
P
-
82H
E
-
83H
E
-
84H
D
-
85H
:
-
86H
速度个位
36H
87H
小数点
37H
88H
速度小数点后百位
38H
89H
速度小数点后十位
39H
8AH
速度小数点后个位
3AH
8BH
M
-
8CH
/
-
8DH
S
-
0C0H
T
-
0C1H
R
-
0C2H
A
-
0C3H
V
-
0C4H
E
-
0C5H
L
-
0C6H
:
-
0C7H
距离百位
47H
0C8H
距离十位
48H
0C9H
距离个位
49H
0CAH
小数点
4AH
0CBH
距离小数点后百位
4BH
0CCH
距离小数点后十位
4CH
0CDH
距离小数点后个位
4DH
0CEH
M
4EH
显示程序的存储单元地址分配如图3-6所示:
图3-6显示程序的流程图
4调试
能在小车行驶的时候显示运行速度,能基本正确的按照按键指令进行启动、左转、右转、停止,在调试时发现通过烧坏单片机,通过排查发现是编程问题,通过不断调试可以基本达到课题要求。
结论与谢辞
时间总是过得很快,在不经意间,大学三年的学习和生活也即将随着毕业设计的完成而画上一个句号,而这也将成为日后的一段美好的回忆。
模拟电路和数字电路知识,涉及到了单片机、AD转换器、显示器等多种器件。
是对大学期间所学知识的一次综合的应用,是一个知识融会贯通的过程。
此外,由于课题要求制作实物,在考察所掌握专业知识的同时也对自身的动手能力提出了挑战。
本系统的设计过程并非一帆风顺,刚开始接触这个课题时,心中并没有一个清晰的框架,通过翻看手册与查阅相关资料后,我渐渐有了设计的思路,对于系统所要用到的元器件类型也有了一定程度的了解。
本设计能够顺利完成,还承蒙老师以及身边的很多同学的指导和帮助。
在设计过程中,老师给予了悉心的指导,最重要的是给了我解决问题的思路和方法,并且在设计环境和器材方面给予了大力的帮助和支持,在此,我对马老师表示最真挚的感谢!
同时感谢所有帮助过我的同学!
参考文献
[1]何小艇.电子系统设计[M].浙江大学出版社,2005,2:
17~21.
[2]郭健华.数字电子技术与实训教程[M].人民邮电出版社,2007,11:
76~79.
[3]杜小平,契桂花,雷道振.单片机初级教程—单片机基础[M].北京航空航天大学出版社,2006,5:
11~15.
[4]楼然苗,李光飞.51系列单片机设计实例[M].北京航空航天大学出版社,2008,6:
12~17.
[5]范立南,谢子殿.单片机原理及应用教程[M].北京大学出版社,2006,3:
65~68.
[6]胡健.单片机原理及接口技术实践教程[M].机械工业出版社,2004,4:
33~35.
[7]黄惠媛,李润国.单片机原理与接口技术[M].海洋出版社,2006,7:
43~46.
附件1.程序清单
#include
#include
//************************************************
//变量的定义
//************************************************
sbitRS=P2^6;
sbitRW=P2^5;
sbitE=P2^7;
sbitBF=P0^7;
unsignedcharcodedigit[]={"0123456789"};//定义字符数组显示数字
unsignedintv;//储存电机转速
unsignedcharcount;//储存定时器T0中断次数
bitflag;//计满1秒钟标志
unsignedintk=4000,//定时变量定时:
250us*k
unsignedchardatapacket,count=0;
sbitremotein=P3^2;
unsignedchardecode_counter=0x00;
charn_1=0,n_2=0,n_3=0,n_4=0;//用于显示字符的选择
sbitP2_0=P2^0;
sbitP2_1=P2^1;
sbitP2_2=P2^2;
sbitP2_3=P2^3;
sbitspk=P2^4;//spk为蜂鸣器使能
voiddelay1ms()//函数功能:
延时1ms
{
unsignedchari,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/***********************************************************/
voiddelay(unsignedcharn)//延时若干毫秒
{
unsignedchari;
for(i=0;i delay1ms(); } /***********************************************************/ unsignedcharBusyTest(void)//判断液晶模块的忙碌状态 { bitresult; RS=0;//根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1;//E=1,才允许读写 _nop_();//空操作 _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 result=BF;//将忙碌标志电平赋给result E=0;//将E恢复低电平 returnresult; } /************************************************************/ voidWriteInstruction(unsignedchardictate)//将模式设置指令或显示地址写入液晶模块 { while(BusyTest()==1);//如果忙就等待 RS=0;//根据规定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_();//空操作两个机器周期,给硬件反应时间 P0=dictate;//将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } /************************************************************/ voidWriteAddress(unsignedcharx)//指定字符显示的实际地址 { WriteInstruction(x|0x80);//显示位置的确定方法规定为"80H+地址码x" } /***********************************************************/ voidWriteData(unsignedchary)//将数据(字符的标准ASCII码)写入液晶模块 { while(BusyTest()==1); RS=1;//RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0;//E置低电平(根据表8-6,写指令时,E为高脉冲, //就是让E从0到1发生正跳变,所以应先置"0" P0=y;//将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=1;//E置高电平 _nop_(); _nop_(); _nop_(); _nop_();//空操作四个机器周期,给硬件反应时间 E=0;//当E由高电平跳变成低电平时,液晶模块开始执行命令 } /*********************************************************/ voidLcdInitiate(void)//对LCD的显示模式进行初始化设置 { delay(15);//延时15ms,首次写指令时应给LCD一段较长的反应时间 WriteInstruction(0x38);//显示模式设置: 16×2显示,5×7点阵,8位数据接口 delay(5);//延时5ms ,给硬件一点反应时间 WriteInstruction(0x38); delay(5); WriteInstruction(0x38);//连续三次,确保初始化成功 delay(5); WriteInstruction(0x0c);//显示模式设置: 显示开,无光标,光标不闪烁 delay(5); WriteInstruction(0x06);//显示模式设置: 光标右移,字符不移 delay(5); WriteInstruction(0x01);//清屏幕指令,将以前的显示内容清除 delay(5); } /***************************************************************/ voiddisplay_sym(void)//显示速度提示符 { WriteAddress(0x00);//写显示地址,将在第1行第1列开始显示 WriteData('v');//将字符常量v写入LCD WriteData('=');//将字符常量=写入LCD } /**************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 智能 小车 速度 测量 控制系统 设计