简易智能小车.docx
《简易智能小车.docx》由会员分享,可在线阅读,更多相关《简易智能小车.docx(15页珍藏版)》请在冰点文库上搜索。
简易智能小车
简易智能小车制作报告
指导教师:
张新莲
作者:
锡林邱科鹏杨明
北京化工大学测控技术与仪器专业
摘要
本小车以STC89C52RC单片机为核心,完成循迹、避障、测速等功能,本小车在结构上一个电机驱动一个车轮,在转弯时灵敏度较高。
采用PWM驱动芯片L298N控制直流电机,光电传感器TCRT5000完成小车在直道区、弯道区的循迹,霍尔传感器实现速度测量并通过LCD夜间屏实时显示小车行驶的时间和距离,超声波发射和接收一体化超声波传感器HC-SR04实现小车避障。
关键词:
STC89C52RC、L298N、循迹、HC-SR04
Abstract
ThetrolleytoSTC89C52RCmicrocontrollercore,completetracking,obstacleavoidance,speedandotherfunctions,thestructureofacarinamotor-drivenwheelswhencorneringhighersensitivity.UsingPWMcontrolledDCmotordriverchipL298N,photoelectricsensorsTCRT5000completedcarinastraightarea,thetrackingcurvearea,Hallsensorsforspeedmeasurementandreal-timedisplaythroughtheLCDscreencardrivingatnighttimeanddistance,oneultrasonictransmitterandreceiverHC-SR04ultrasonicsensortechnologytoachievecarobstacleavoidance.
Keywords:
STC89C52RC,L298N,tracking,HC-SR04
1.方案论证
1.1、设计要求
本系统要求电动车按照给出的行使路线,在直道区能够按正确的轨迹行驶;通过弯道区后能够到达指定的地点并暂停5秒;在障碍区能够准确的躲避障碍物;在行驶过程中实时显示行驶时间和行驶路程。
1.2、各部分方案论述
(1)调速模块
方案一:
采用电阻网络或数字电位器调整电动机的分压来调速。
但电阻网络只能实现有级调速,而且数字电阻的元器件价格比较昂贵。
尤其是所使用的电动机电阻很小,但电流很大,分压不仅会降低效率,实现也很困难。
方案二:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调节。
此方案电路较简单,但继电器的响应时间有限,机械结构易损坏,寿命不长,可靠性也不太好。
方案三:
采用脉冲宽度调制电路。
用单片机控制信号的高低电平时间完成调速,用对两个信号的不同控制完成电机的转向和起停的控制。
这种电路由于工作在管子的饱和截止状态下,效率非常高,经试验发现,此方法调速简单可行,方便可靠。
基于上述理论分析,拟选择方案三。
(2)转向装置选择
方案一:
双电机控制。
采用两个直流电机控制小车后轮,直行时两轮转速相等,需要向左转时,增加右轮转速,降低左轮转速;需要向右转时,增加左轮转速,降低右轮转速。
但此种方法必须精确控制两车轮转速直行时相等,否则将会出现小摇摆及抖动,达不到平滑运动的效果。
方案二:
步进电机控制前轮。
步进电机将电脉冲信号转换成相应的角位移的特种电机,步进电机的显著特点是快速启动能力,测到障碍物时能够快速转向;另外步进电机的精度高,每步可以小至0.72度,不会失步,在负荷不超过动态转矩值时,可以瞬间启动和停止。
逆转时能够精确返回原始位置。
外加机械机构可以把角度变成直线位移。
小车结构原因,采用双电机控制转向。
(3)外部传感器选择
校正车行方向即寻迹传感器:
采用红外线光电反射传感器,由于车底盘较低,采用近距离(1――6mm)有效的光电传感器。
使CPU根据光电信息精确调整小车的行车方向,使小车运行时达到最小的横向抖动。
CPU根据信号发出前轮左转,右转和保持方向的指令,实现自动校正行车方向的目的。
检测两个障碍物传感器:
有两种方案可供选择。
方案一:
采用超声波测距。
超声波传感器测距时有足够的精度,可以达到1cm的近距离,对远距离也有较快的响应信号。
但是,本题目的要求是绕过障碍物,这就要求小车在较远距离时即做出绕障的反应,因此没有必要采用精确近距的超声波传感器。
方案二:
采用反射式红外线光电开关。
本设计采用的光电开关有效距离为1——13cm(对白色障碍物),小车前方只要有障碍,即输出一个开关量,向CPU申请中断,CPU响应中断即控制电机做出转向反应。
所以拟采用此方案。
测车行程传感器:
为使小车可以测量并显示小车中心至起点的距离,测小车的圈数换算即可得到。
方案一是采用投射式光电传感器如光电码盘,但对轮子的机械加工较难精确实现。
方案二是采用开关式光电传感器,在车轮上安装一个小磁铁即可实现测圈数,进而得到距离值,为此采用此方案。
2.系统设计与硬件电路
2.1总体设计
2.2硬件各模块设计
(1)电机转速控制
本系统使用L298N电机驱动模块来控制转速,使用STC89C52RC单片机通过定时器产生PWM脉冲信号,将PWM脉冲信号接至L298N的使能端口ENA、ENB便可控制电机转速,
通过单片机可调节PWM脉冲信号的占空比。
可实现在一定范围内的转速调节。
(2)电机转向控制
这个设计中电机的转向主要有两个作用,一是在直道区和弯道区根据地面黑线使小车按照指定的路线行使,不偏离跑道,并到达要求的位置;二是在障碍区控制小车前轮转向使其准确地躲避障碍物。
将前轮A和后轮C接在一起在接到L298N的OU1和OUT2端口,将前轮B和后轮D接在一起在接到L298N的OU3和OUT4端口。
当需要小车左转的时候只需减慢A和C轮的转速即可,B和D轮的速度比A和C轮速到快;当需要小车右转的时候只需减慢B和D轮的转速即可,A和C轮的速度比B和D轮速到快。
(3)循迹控制
本小车循迹模块采用3个光电传感器TCRT5000模块来实现循迹控制。
传感器阵列
通过三个光电传感器的输出来控制小车前进、左转、右转。
(4)避障控制
本小车采用2个超声波传感器模块HC-SR04来测量障碍物与小车之间的距离,从而实现小车避障,当检测到障碍物时通过L298N电机驱动模块来控制小车转向,进而到达避障目的。
通过STC89C52产生一个10uS以上脉冲触发信号,将该信号接到HC-SR04的Tr1g端口,该
模块内部将发出8个40kHz周期电平并检测回波。
一旦检测到有回波信号则Echo输出回响信号。
回响信号的脉冲宽度与所测的距离成正比。
公式:
S/58=厘米或者S/148=英寸;或是:
距离=高电平时间*声速(340m/s)/2。
3.软件设计
控制程序的主要任务是:
(1)判别旋转方向;
(2)检测障碍物;(3)寻地面黑线;(4)速度快慢控制。
各部分程序流程如下:
以上程序全部用C语言来编写,调试时,经过语法查错和逻辑查错,与硬件联合调试,先单独调试好每一个模块,然后再连接成一个完整的系统。
经过最后的调试,总程序可以顺利执行。
4.测试
4.1测试所用仪器设备:
PC机
数字式万用表:
Fluke175
示波器:
InstekGOS-620
51单片机开发板
模拟跑道:
直道长2m,弯道半径0.8m
卷尺:
精度0.001m
秒表:
精度0.01s
障碍物:
用白纸包裹的纸盒两个。
小车部件:
4.2小车各部分代码分析
(1)LCD夜间屏显示模块
/******************************
1602显示模块
功能:
显示小车运行时间和距离
说明:
包括写命令操作和写数据操作
********************************/
voidwrite_com(ucharcom)//写命令函数
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)//写数据函数
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidlcdinit()//1602初始化
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
voidT1_time()interrupt3//T1定时1s刷新
{
TH1=(65536-45872)/256;
TL1=(65536-45872)%256;
num1++;
if(num1==20)
{
num1=0;
j++;
bai=j/100;
shi=j%100/10;
ge=j%10;
}
}
(2)速度测量部分
voidINT0_M()interrupt0//外部中断0测量轮子转数
{
M++;
N=88*M;
qian1=N/10000;
bai1=N/1000%10;
shi1=N/100%10;
ge1=N/10%10;
houyi=N%10;
}
(3)电机部分控制
/******************************
电机控制模块
功能:
前进,左转,右转
说明:
通过PWM脉冲调制速度
********************************/
voidqianjin()//小车前进
{
IN1=1;
IN2=0;
IN3=1;
IN4=0;
dj1=90;
dj2=90;
}
voidright()//小车右转
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
dj1=60;
dj2=80;
}
voidleft()//小车左转
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
dj1=80;
dj2=60;
}
(4)PWM脉冲信号
voidtimer0()interrupt1using1//PWM控制
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t++;
if(telseENA=0;
if(telseENB=0;
if(t>50)
{
t=0;
}
}
4.3误差分析及改善措施
小车转向控制采用二相步进电机不同步的思想,由于寻线,测障有不同的精度要求,所以按照寻线,测障,将校车的转弯时的偏转角度改为较小,较大。
这通过在多次试验中确定小车前轮的步进电机的步数而得到。
当小车一旦检测到偏离中间黑先后STC89C52RC并会送给L298N的两个使能端不同的PWM信号,一致达到转向目的。
一开始时我们所给的PWM脉冲信号占空比都很高,这样小车在转弯过程中根本就来不及转弯,后来通过降低占空比,并实现了小车转弯。
5.结论与心得
5.1结论
我们采用STC89C52RC单片机进行电动车的脉冲宽度调速控制和步进电机的转向控制,用3个TCRT-5000光电传感器模块进行循迹。
但是由于小车前轮与横杆之间有一定的间隙,所以小车在行驶过程中车轮难免会有一定的晃动,但是,我们在程序中进行实时的黑线检测,使小车一离开黑线前轮便小幅转向,这样便使小车始终不离开黑线。
在测障方面我们采用了两个放在车两侧的传感器,可以使小车检测的前方障碍物,从而倒车并继续检测,直到绕过障碍物。
测速方面用了霍尔传感器,便用LCD实时显示小车行驶的时间和距离。
在整个过程中小车行驶稳定,基本满足要求。
5.2心得
经过两周的努力,我们较好的完成了任务,不仅基本部分完成,而且对小车的功能进行了我们感兴趣的扩展,如安装行驶指示灯、显示行使时间等。
虽然在制作过程中遇到很多困难,很多知识都市我们在课堂上没有学过的,在有限的时间之内我们得从认识到熟悉
。
在以前我们都很少接触这种将理论知识真正用到实践的场合,虽然这次花了很多时间,在制作过程中也犯了一些错误,但经过我们的团结合作,终于完成了制作。
(注:
可编辑下载,若有不当之处,请指正,谢谢!
)