基于STC89C52单片机的智能循迹小车设计_精品文档.pdf
《基于STC89C52单片机的智能循迹小车设计_精品文档.pdf》由会员分享,可在线阅读,更多相关《基于STC89C52单片机的智能循迹小车设计_精品文档.pdf(4页珍藏版)》请在冰豆网上搜索。
ComputerKnowledgeandTechnology电脑知识与技术人工智能及识别技术本栏目责任编辑:
唐一东第7卷第31期(2011年11月)第7卷第31期(2011年11月)7基于STC89C52单片机的智能循迹小车设计朱涛(陕西理工学院计算机科学与技术系,陕西汉中723000)摘要:
智能循迹小车是一种在控制系统的作用下,可以准确沿既定路线自动行驶的系统。
本设计中,采用STC89C52单片机为主控制芯片,结合直流电机、传感器、电源电路及其他外围电路,设计实现了小车沿黑色轨迹行走的智能循迹小车,其中小车循迹功能由红外式光电传感器完成,小车的驱动功能由L293D驱动电路完成。
关键词:
智能循迹小车;直流电机;红外光电传感器中图分类号:
TP18文献标识码:
A文章编号:
1009-3044(2011)31-7751-02随着计算机和信息技术的飞速发展,智能技术的开发受到越来越广泛的重视,其开发速度也在快速增加。
由于智能化的程度越来越高,使得其应用范围也在不断的扩展。
与此同时,机器人技术的发展势头迅猛,其应用领域众多,智能循迹小车就是机器人技术与智能控制技术相结合的一个应用典范。
通俗来讲,智能循迹小车就是智能机器人的另一种形式,它用轮子代替了机器人的双腿,因而在机械设计和电路方面都要比智能机器人简单,另外,其控制系统和智能机器人相比也较为简单,可是其对行车速度和行驶方向的配合则要求较严格,它首先通过传感器获取目标道路信息,然后结合智能车当前的行驶状态智能地做出决策,对其行驶方向与行车速度进行调整,从而达到准确快速跟踪道路的目的。
本文介绍了一种基于STC89C52单片机为控制核心的智能循迹小车的设计,该智能小车能自动沿黑色固定轨迹运行。
1智能循迹小车总体硬件结构设计及工作原理简介1.1智能循迹小车总体硬件结构设计本设计中,智能循迹小车是由主控制模块、循迹模块、电机驱动模块、电源模块和其他外围电路组成,其总体硬件结构框图如图1所示。
在本设计中,是以STC89C52为主控模块,采用模块化设计的方法,以红外光电传感器作为循迹模块,并采用L293D芯片控制输出直接驱动直流电机作为电机驱动模块。
电源模块用4节1.5V的电池供电,经L7805稳压模块后,输出电压稳定在+5V,从而向各个模块供电。
1.2智能小车工作原理简介本设计中,循迹指的是小车在白色地板上沿着2cm宽的黑线行走。
红外传感器的发射管发出红外线,由接收管接收。
同时,接收的物理量被转化成电信号,经过信号放大电路处理,由单片机的P0,P1,P2口输入,经过处理后,信号由P20,P21,P22,P23,P24,P25口输出给电机驱动电路的L293D芯片,从而达到驱动小车行走和循迹的目的。
循迹时,由于红外线在白色地板和黑线上的反射系数不同,所以可以根据三极管接收红外线的强弱来决定小车的走向。
本设计采用三对红外传感器,采用“一字型”1分布。
中间传感器接收不到反射回来的红外线,而左右两个传感器能接收到反射回来的红外线,则小车直线前进;当左边和中间(或只有左边)的传感器接收不到反射回来的红外线,只有右边传感器能接收到时,说明小车向右偏离黑色轨道,则小车向左转动;同理,当中间和右边(或只有右边)的传感器接收不到反射回来的红外线,只有左边传感器能接收到时,说明小车向左偏离黑色轨道,则小车向右转动,从而实现自动循迹。
本设计中红外传感器离地面垂直距离为8cm,能在没有强烈日光干扰或在有日光灯的房间里,完全能满足探测要求,具有很好的可靠性与抗干扰能力2-3。
2智能循迹小车所用芯片器件简介上文已经介绍,本设计一共分为主控制模块、循迹模块、电机驱动模块和电源模块等模块。
下面对主要模块的工作原理作简单说明。
2.1主控模块STC89C52简介该模块是整个设计的大脑。
传感器的输出端SEN1,SEN2,SEN3将信号通过P1.0,P1.1,P1.2口输入单片机,经过处理后,由P20,P21,P22,P23,P24,P25口输出给L293D的EN1,EN2,IN1,IN2,IN3,IN4引脚,从而完成对小车的控制。
该模块的主要由STC89C52单片机及其外围电路组成,如图2所示。
本设计中,STC89C52芯片的40引脚VCC接+5V电源,20引脚GND接地。
18引脚XTAL1和19引脚XTAL2接在频率为11.0592MHZ的晶振上,并接了20PF的电容。
9引脚RST外接复位电路,为单片机提供上电复位。
作为P3口的第二功能,10引脚收稿日期:
2011-08-17基金项目:
陕西理工学院教学改革项目(XJG1135)图1智能循迹小车总体硬件结构图E-mail:
http:
/Tel:
+86-551-56909635690964ISSN1009-3044ComputerKnowledgeandTechnology电脑知识与技术Vol.7,No.31,November2011.751ComputerKnowledgeandTechnology电脑知识与技术本栏目责任编辑:
唐一东人工智能及识别技术第7卷第31期(2011年11月)第7卷第31期(2011年11月)7P3.0和11引脚P3.1被作为单片机的通信端,即串行输入口和串行输出口,用以完成程序下载所需。
1引脚P1.0,2引脚P1.1,3引脚P1.2分别和三对红外传感器的输出端SEN1,SEN2,SEN3相连,以完成电信号的输入。
21引脚P2.0,22引脚P2.1,23引脚P2.2,24引脚P2.3,25引脚P2.4,26引脚P2.5分别和L293D芯片的EN1,EN2,IN1,IN2,IN3,IN4引脚相连,以完成将经过单片机处理过的信号输入给电机驱动电路。
2.2TCRT5000红外光电传感器模块简介本设计中,采用三对TCRT5000型号的红外光电传感器。
这三对传感器呈均匀“一字型”分布。
这种方法检测连贯简单,程序控制算法简单,使小车控制稳定。
但是这种均匀一字型分布不利于对弯道信号采集的准确性。
图3为其中一对传感器及其外围电路的原理图。
TCRT5000型红外光电传感器由一个高发射功率的红外光电二极管和一个接收红外线的高度灵敏的光电三极管(NPN型)组成。
其中滑动变阻器R3是一个蓝白电位器,通过调整R3的阻值从而达到调整光敏三极管对反射光的灵敏度。
红外发射二极管不断的发射出红外线。
当反射回来的红外线强度足够大时,光敏三极管饱和,则该模块输出为高电平;当反射回来的红外线强度不够大或者没有反射回来红外线时,光敏三极管一直处于关断状态,则该模块的输出为低电平。
光敏三极管除了具有将光信号转换成电信号的功能外,还具有对电信号放大的功能。
2.3电信号放大模块简介传感器所产生的电信号较为微弱,不能作为单片机的输入,因此要接一个放大电路进行处理。
本模块采用SN74HC04N芯片及其外围电路用作放大电路。
SN74HC04N芯片的引脚图如图4所示。
首先,SN74HC04N芯片内部有六组相同的反相器。
因此,当三组红外传感器产生的电信号传给SN74HC04N后,会变成与其相反的电平。
本设计中,引脚1,3,5为红外传感器输入SN74HC04N芯片的接口,引脚2,4,6为经SN74HC04N处理后的输出口,对应图2中SEN1,SEN2,SEN3这三个接口。
另外,74HC04N内部有6个施密特触发器电路。
施密特触发器的重要特点是能够把缓慢变化的输入信号整形成边沿陡峭的矩形脉冲。
同时,施密特触发器还可以利用其回差电压来提高电路的抗干扰能力。
2.4电机驱动模块简介本模块选用L293D芯片进行控制。
该芯片驱动方式比较简单,直接驱动两个直流电机。
控制每一路电机,都有三个信号,分别为EN1,IN1,IN2和EN2,IN3,IN4。
这六个引脚分别同STC89C52单片机的P2.0P2.5口相连。
这里芯片的工作电压为+5V。
本设计中,采用两个输出控制一个电机的方式。
即OUT1和OUT2控制电机1,OUT3和OUT4控制电机2。
图5中的D1D8为箝位二极管。
电机在停止的瞬间会产生一个逆向的电流,切割磁场后会产生一个逆向的电动势。
设置这些箝位二极管,就是为了防止逆电动势烧坏芯片,从而它们起到保护作用。
3智能循迹小车的软件设计单片机完成对智能小车的自动控制功能,主要是执行相应软件来实现。
本设计中,利用结构化设计方法,采用C语言实现相应功能软件。
下面对程序中的主要几个功能模块进行说明。
3.1主程序函数voidmain(void)图2STC89C52单片机个引脚图图3TCRT5000传感器电路图图4SN74HC04N引脚图图5电机驱动模块图752ComputerKnowledgeandTechnology电脑知识与技术人工智能及识别技术本栏目责任编辑:
唐一东第7卷第31期(2011年11月)第7卷第31期(2011年11月)7delay(10);while
(1)switch(sensor_inp()case0x02:
forward();break;case0x04:
turn_left();break;case0x01:
turn_right();break;default:
break;程序开始,进入主函数。
调用延迟函数delay(),用以使系统达到稳定状态。
在KEIL软件下进行断点运行,测得这里的delay(10)在11.0592MHz的晶振下可以延迟100ms。
之后进入while循环,条件始终为真,表示小车将一直运行while函数中的语句,直至外界迫使小车停下。
在switch分支语句中,case0x02将使程序跳转至forward();,其中0x02即为二进制的00000010,这表示三个传感器中,只有中间的传感器输出的是高电平,左右两个传感器都输出低电平,故小车沿直线行走。
case0x04将使程序跳转至turn_left();,其中0x04即为二进制的00000100,这表示三个传感器中,只有左边的传感器输出的是高电平,中间和右边的传感器输出的均为低电平,故小车左拐。
case0x01将使程序跳转至turn_right();,其中0x01即为二进制的00000001,这表示三个传感器中,只有右边的传感器输出的是高电平,左边和中间的传感器均输出低电平,故小车右拐。
3.2小车前进子程序模块voidforward()IN1=1;IN2=0;IN3=1;IN4=0;EN1=1;EN2=1;该程序中,L293D芯片的两个使能端EN1和EN2一直保持高电平。
IN1=1,IN2=0说明右边电机向前转动;IN3=1,IN4=0说明左边电机也向前转动。
故两个电机同时向前转动,从而驱动小车向前行进。
3.3小车左转子程序模块voidturn_right()IN1=1;IN2=0;IN3=0;IN4=0;EN1=1;EN2=1;该程序中,使能端EN1和EN2仍然保持高电平。
IN1=0,IN2=0,表明右边电机向前转动;而IN3=0,IN4=0,说明左边电机不动。
左轮不转右轮转,这样就实现了小车向左转3.4小车右转子程序模块voidturn_left()IN1=0;IN2=0;IN3=1;IN4=0;EN1=1;EN2=1;该程序中,使能端EN1和EN2仍然保持高电平。
IN1=0,IN2=0表明右边电机停止不转动;IN3=1,IN4=0说明左边电机向前转动。
右轮不转左轮转,这样就实现了小车右转。
3.5延时子程序模块voiddelay(intn)unsignedchari,j,k;for(i=n;i0;i-)for(j=50;j0;j-)for(k=100;k0;k-);该延时子程序主要是让系统初始化到最佳状态。
经由KEIL软件的断点测试,在晶振频率为11.0592MHz时,当n=10时,可延时100ms。
(下转第7758页)753ComputerKnowledgeandTechnology电脑知识与技术本栏目责任编辑:
唐一东人工智能及识别技术第7卷第31期(2011年11月)第7卷