循迹小车制作过程.docx
《循迹小车制作过程.docx》由会员分享,可在线阅读,更多相关《循迹小车制作过程.docx(19页珍藏版)》请在冰豆网上搜索。
循迹小车制作过程
电子与信息工程系
电子实训
课题:
基于STC89C52RC和TCRT5000光电传感器的自动循迹小车设计
专业:
班级:
学号:
姓名:
指导老师:
完成日期:
摘要
本设计是基于STC89C52单片机控制的简易自动寻迹小车系统,包括小车系统构成软硬件设计方法。
小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。
小车系统以STC89S52单片机为系统控制处理器;采用TCRT5000光电传感器获取赛道的信息,并通过驱动控制电路来对小车的方向和速度进行控制。
此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。
1.任务及要求
1.1任务
设计一个基于直流电机的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色车轨迹行驶。
系统方案方框图如图1-1所示。
图1-1系统方案方框图
2.系统设计方案
2.1小车循迹原理
这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据接收到的反射光的强弱来判断“道路”。
通常采取的方法是红外探测法。
红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。
单片机就是否收到反射回来的红外光为依据来确定黑线的位置和小车的行走路线。
2.2控制系统总体设计
自动循迹小车控制系统由主控制电路模块、稳压电源模块、红外检测模块、电机及驱动模块等部分组成,控制系统的结构框图如图2-1所示。
3.系统方案
3.1寻迹传感器模块
我们采用TCRT5000作为红外检测传感器。
传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。
判断有无黑线我们用的一块比较器LM324,比较基准电压由30K的变阻器调节,各个接收管的参数都不一致,每个传感器的比较基准电压也不尽相同,我们为每个传感器配备了一个变阻器。
3.1.1红外传感器TCRT5000简介
TCRT5000传感器的工作原理与一般的红外传感器一样,一传一感.TCRT5000具有一个红外发射管和一个红外接收管。
通过发射红外信号,看接收信号变化判断检测物体状态的变化。
A、K之间接发光二极管,C、E之间接光敏三极管(二者在电路中均正接,但要串联一定阻值的电阻)
3.1.2比较器LM324简介
LM324为四运放集成电路,采用14脚双列直插塑料封装。
内部有四个运算放大器,有相位补偿电路。
电路功耗很小,工作电压范围宽,可用正电源3~30V,或正负双电源±1.5V~±15V工作。
在黑线检测电路中用来确定红外接收信号电平的高低,以电平高低判定黑线有无。
在电路中,LM324的一个输入端需接滑动变阻器,通过改变滑动变阻器的阻值来提供合适的比较电压。
图3-3LM324内部电路图3-4集成运放的管脚图
3.1.3具体电路
通过TCRT5000检测黑线,输出接收到的信号给LM324,接收电压与比较电压比较后,输出信号变为高低电平,再输入到单片机中,用以判定是否检测到黑线。
图3-5传感器模块电路图
3.1.4传感器安装
在小车具体的循迹行走过程中,为了能精确测定黑线位置并确定小车行走的方向,需要同时在底盘装设4个红外探测头,进行两级方向纠正控制,提高其循迹的可靠性。
这4个红外探头的具体位置如图3-6所示。
图3-6传感器安装图
图中循迹传感器全部在一条直线上。
其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。
小车前进时,始终保持(如图3-6中所示的行走轨迹黑线)在X1和Y1这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。
若小车回到了轨道上,即4个探测器都只检测到白纸,则小车会继续行走;若小车由于惯性过大依旧偏离轨道,越出了第一级两个探测器的探测范围,这时第二级探测器动作,再次对小车的运动进行纠正,使之回到正确轨道上去。
可以看出,第二级方向探测器实际是第一级的后备保护,从而提高了小车循迹的可靠性。
3.2控制器模块
STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。
图3-7时钟电路和复位电路
3.3电源模块
采用7805和7812作为电路的驱动电源,电路图如下:
3.4电机及驱动模块
3.4.1电机
电机采用直流减速电机,直流减速电机转动力矩大,体积小,重量轻,装配简单,使用方便。
由于其内部由高速电动机提供原始动力,带动变速(减速)齿轮组,可以产生较大扭力。
可选用减速比为1:
74的直流电机,减速后电机的转速为100r/min。
若车轮直径为6cm,则小车的最大速度可以达到
V=2πr·v=2*3.14*0.03*100/60=0.314m/s
能够较好的满足系统的要求。
3.4.2驱动
驱动模块采用专用芯片L298N作为电机驱动芯片,L298N是一个具有高电压大电流的全桥驱动芯片,其响应频率高,一片L298N可以分别控制两个直流电机。
以下为L298N的引脚图和输入输出关系表。
图3-9L298N外部引脚表2L298N输入输出关系
驱动电路的设计如图3-10所示:
图3-10L298N电机驱动电路
4.软件设计
4.1PWM控制
本系统采用PWM来调节直流电机的速度。
PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
因此,PWM又被称为“开关驱动装置”。
在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。
只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。
4.2总体软件流程图
小车进入寻迹模式后,即开始不停地扫描与探测器连接的单片I/O口,一旦检测到某个I/O口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态。
软件的主程序流程图如图4-1所示:
4.3小车循迹流程图
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定4个探测器中的哪一个探测到了黑线,如果左面第一级传感器或者左面第二级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是右面第一级传感器或右面第二级传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。
在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。
循迹流程图如图4-2所示
由于第二级方向控制为第一级的后备,则两个等级间的转向力度必须相互配合。
第二级通常是在超出第一级的控制范围的情况下发生作用,它也是最后一层保护,所以它必须要保证小车回到正确轨迹上来,则通常使第二级转向力度大于第一级,即Turn_left2>Turn_left1,Turn_right2>Turn_right1(其中Turn_left2,Turn_left1,Turn_right2,Turn_right1为小车转向力度,其大小通过改变单片机输出的占空比的大小来改变),具体数值在实地实验中得到。
4.4中断程序流程图
这里利用的是51单片机的T0定时计数器,从而让单片机P0口的P0.4和P0.5引脚输出占空比不同的方波,然后经驱动芯片放大后控制直流电机。
定时计数器若干时间(比如0.1ms)比如中断一次,就使P0.4或P0.5产生一个高电平或低电平。
中断程序流程图如图4-3所示
4.5单片机测序
/******************
硬件连接
P1_6接驱动模块ENA使能端,输入PWM信号调节速度
P1_7接驱动模块ENB使能端,输入PWM信号调节速度
P3_4P3_5接IN1IN2当P3_4=1,P3_5=0;时左电机正转驱动蓝色输出端OUT1OUT2接左电机
P3_4P3_5接IN1IN2当P3_4=0,P3_5=1;时左电机反转
P3_6P3_7接IN3IN4当P3_6=1,P3_7=0;时右电机正转驱动蓝色输出端OUT3OUT4接右电机
P3_6P3_7接IN3IN4当P3_6=0,P3_7=1;时右电机反转
P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为OUT1
P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为OUT2
P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为OUT3
P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为OUT4
四路寻迹传感器有信号(白线)为0没有信号(黑线)为1
四路寻迹传感器电源+5VGND取自于单片机板靠近液晶调节对比度的电源输出接口
关于单片机电源:
本店驱动模块内带LDO稳压芯片,当电池输入最低的电压6V时候可以输出稳定的5V
分别在针脚标+5与GND。
这个电源可以作为单片机系统的供电电源。
**************/
#include
#defineLeft_moto_pwmP1_6//接驱动模块ENA使能端,输入PWM信号调节速度
#defineRight_moto_pwmP1_7//接驱动模块ENB
#defineLeft_1_ledP1_0//四路寻迹模块接口第一路
#defineLeft_2_ledP1_1//四路寻迹模块接口第二路
#defineRight_1_ledP1_2//四路寻迹模块接口第三路
#defineRight_2_ledP1_3//四路寻迹模块接口第四路
#defineLeft_moto_go{P3_4=0,P3_5=1;}//P3_4P3_5接IN1IN2当P3_4=0,P3_5=1;时左电机前进
#defineLeft_moto_back{P3_4=1,P3_5=0;}//P3_4P3_5接IN1IN2当P3_4=1,P3_5=0;时左电机后退
#defineLeft_moto_stp{P3_4=1,P3_5=1;}//P3_4P3_5接IN1IN2当P3_4=1,P3_5=1;时左电机停转
#defineRight_moto_go{P3_6=0,P3_7=1;}//P3_6P3_7接IN1IN2当P3_6=0,P3_7=1;时右电机前转
#defineRight_moto_back{P3_6=1,P3_7=0;}//P3_6P3_7接IN1IN2当P3_6=1,P3_7=0;时右电机后退
#defineRight_moto_stp{P3_6=1,P3_7=1;}//P3_6P3_7接IN1IN2当P3_6=1,P3_7=0;时右电机停转
unsignedcharpwm_val_left=0;//变量定义
unsignedcharpush_val_left=0;//左电机占空比N/10
unsignedcharpwm_val_right=0;
unsignedcharpush_val_right=0;//右电机占空比N/10
bitRight_moto_stop=1;
bitLeft_moto_stop=1;
unsignedinttime=0;
/*******************/
voiddelay(unsignedintk)//延时函数
{
unsignedintx,y;
for(x=0;xfor(y=0;y<2000;y++);
}
/********************/
voidrun(void)//前进函数
{
push_val_left=4;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度
push_val_right=4;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度
Left_moto_go;//左电机前进
Right_moto_go;//右电机前进
}
/********************/
voidleft(void)//左转函数
{
push_val_left=3;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度
push_val_right=3;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度
Right_moto_go;//右电机继续
Left_moto_stp;//左电机停走
}
/*******************/
voidright(void)//右转函数
{
push_val_left=3;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度
push_val_right=3;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度
Right_moto_stp;//右电机停走
Left_moto_go;//左电机继续
}
/*******************/
/*PWM调制电机转速*/
/*******************/
/*左电机调速*/
/*调节push_val_left的值改变电机转速,占空比*/
voidpwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
Left_moto_pwm=1;
else
Left_moto_pwm=0;
if(pwm_val_left>=10)
pwm_val_left=0;
}
elseLeft_moto_pwm=0;
}
/**********************/
/*右电机调速*/
voidpwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
Right_moto_pwm=1;
else
Right_moto_pwm=0;
if(pwm_val_right>=10)
pwm_val_right=0;
}
elseRight_moto_pwm=0;
}
/********************/
///*TIMER0中断服务子函数产生PWM信号*/
voidtimer0()interrupt1using2
{
TH0=0XF8;//1Ms定时
TL0=0X30;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/********************/
voidmain(void)
{
TMOD=0X01;
TH0=0XF8;//1ms定时
TL0=0X30;
TR0=1;
ET0=1;
EA=1;
while
(1)/*无限循环*/
{
//四路寻迹传感器有信号(白线)为0没有信号(黑线)为1
switch(P1&0x0f)
{
case0x00:
//全部没有压线,直转
run();
break;
case0x01:
//右压线,左转
left();
break;
case0x02:
//右压线,左转
left();
break;
case0x04:
//左压线,右转
right();
delay(6);//转向延时
break;
case0x08:
//左压线,右转
right();
delay(6);//转向延时
break;
}
}
}
5.参考资料
[1]宋健,姜军生,赵文亮.基于单片机的直流电动机PWM调速系统[J].农机化研究,2006,
(1):
102-103.
[2]边春元李文涛江杰杜平等;C51单片机典型模块设计与应用;机械工业出版社;2008.4
[3]李华.MCS-51系列单片机实用接口技术[M].北京:
航空航天大学出版社,2003
[4]楼然苗.51单片机设计实例[M].北京:
航空航天大学出版社,2005.8
[5]王晶,翁显耀,梁业宗自动寻迹小车的传感器模块设计.武汉理工大学自动化学院 湖北武汉
[6]刘迎春.传感器原理设计与应用[M].长沙:
国防科技大学出版社,1992.