自动巡迹小车.docx
- 文档编号:10286079
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:23
- 大小:643.67KB
自动巡迹小车.docx
《自动巡迹小车.docx》由会员分享,可在线阅读,更多相关《自动巡迹小车.docx(23页珍藏版)》请在冰豆网上搜索。
自动巡迹小车
计算机科学与技术学院
课程设计报告
(2014—2015学年第二学期)
课程名称:
自动巡迹小车
班级:
学号:
姓名:
指导教师:
2015年7月
自动循迹小车
摘要:
本设计是一种基于单片机控制的简易自动寻迹小车系统,包括小车系统构成软硬件设计方法。
小车以AT89C51为控制核心,用单片机产生PWM波,控制小车速度。
利用四路红外线多用探测系统对路面黑色轨迹进行检测,并将路面检测信号反馈给单片机。
单片机对采集到的信号予以分析判断,及时控制驱动电机以调整小车转向,从而使小车能够沿着黑色轨迹自动行驶,实现小车自动寻迹的目的。
1.任务及要求
设计一个基于直流电机的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色车轨迹行驶。
系统方案方框图如图1-1所示。
图1-1系统方案方框图
2.系统设计方案
2.1小车循迹原理
我们选择四路红外线多用探测系统。
此系统是为智能小车等自动化机械装置提供一种多用途的红外探测系统的解决方案。
使用红外线发射和接收管等分立元器件组探头,并使用LM339电压比较器作为核心器件构成中控电路。
此系统具有的多种探测功能能极大地满足各种自动化、智能化的小型系统的应用。
2.2控制系统总体设计
自动循迹小车控制系统由主控制电路模块、稳压电源模块、红外检测模块、电机及驱动模块等部分组成,控制系统的结构框图如图2-1所示。
图2-1控制系统的结构框图
1、主控制电路模块:
用STC89C51单片机、复位电路,时钟电路
2、红外检测模块:
循迹传感模块,比较器LM339
3、电机及驱动模块:
电机驱动芯片L298N、两个直流电机
4、电源模块:
稳压电源
3.系统方案
3.1循迹模块
循迹模块我们选择四路红外线多用探测系统。
如下图所示。
测试:
测试探头:
一开探头前面的所有的物体,且探头不要指向阳光的方向。
将探头板接在电源后用万用表测输出端电压。
此时的电源电压应在1
伏特左右。
用白纸挡在探头前。
用万用表测输出端电压差应当接近电源电压。
测试中探板:
将测试好的探头按板上所标示的接入输入端子,移开探头前面的所有物体,且探头不要指向阳光的方向,将中探板接上电源后用万用表测输出端子,此时输出端输出的电压应当接近电源电压,用白纸挡在探头前,万用表测输出端电压应当接近0伏特,调整所在通道的电位器可以改变探测的距离。
特性:
1、易于安装,使用简便
2、4路分别独立工作,工作时不受数量限制
3、中控板与探头分开,安装位置不受限制
4、模块高度<=10毫米
5、安全工作电压范围在3伏特至6伏特之间
6、4路全开工作电流在30毫安至55毫安之间
VCC、GND:
电源接线端
IN(1—4)、OUT:
探头与中控板连接端
OUT1、OUT2、OUT3、OUT4:
对应输出端
LED1、LED2、LED3、LED4:
对应输出指示
R1、R2、R3、R4:
对应比较电压调节
输出端为集电集开路,板载5.1千欧上拉电阻
3.1.1循迹传感器
原理图
图3-1
图3-2
3.1.2比较器LM339简介
LM339电压比较器的特点和一些参数:
1)电压失调小,一般是2mV;
2)共模范围非常大,为0v到电源电压减1.5v;
3)他对比较信号源的内阻限制很宽;
4)LM339vcc电压范围宽,单电源为2-36V,双电源电压为±1V-±18V;
5)输出端电位可灵活方便地选用。
6)差动输入电压范围很大,甚至能等于vcc;
图3-3LM339内部电路图3-4集成运放的管脚图
3.1.3具体电路
通过循迹传感模块检测黑线,输出接收到的信号给LM339,接收电压与比较电压比较后,输出信号变为高电平,再输入到单片机中,用以判定是否检测到黑线。
图3-5传感器模块电路图
3.1.4传感器安装
在小车具体的循迹行走过程中,为了能精确测定黑线位置并确定小车行走的方向,需要同时在底盘装设4个红外探测头,进行两级方向纠正控制,提高其循迹的可靠性。
这4个红外探头的具体位置如图3-6所示。
图3-6传感器安装图
图中循迹传感器全部在一条直线上。
其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制传感器,并且黑线同一边的两个传感器之间的宽度不得大于黑线的宽度。
小车前进时,始终保持(如图3-6中所示的行走轨迹黑线)在X1和Y1这两个第一级传感器之间,当小车偏离黑线时,第一级传感器就能检测到黑线,把检测的信号送给小车的处理、控制系统,控制系统发出信号对小车轨迹予以纠正。
若小车回到了轨道上,即4个探测器都只检测到白纸,则小车会继续行走;若小车由于惯性过大依旧偏离轨道,越出了第一级两个探测器的探测范围,这时第二级探测器动作,再次对小车的运动进行纠正,使之回到正确轨道上去。
可以看出,第二级方向探测器实际是第一级的后备保护,从而提高了小车循迹的可靠性。
3.2控制器模块
采用Atmel公司的AT89C51单片机作为主控制器。
它是一个低功耗,高性能的8位单片机,片内含32k空间的可反复擦写100,000次Flash只读存储器,具有4K的随机存取数据存储器(RAM),32个I/O口,2个8位可编程定时计数器,且可在线编程、调试,方便地实现程序的下载与整机的调试。
时钟电路和复位电路如图3-7(与单片机构成最小系统)
1)采用外部时钟,晶振频率为12MHZ
2)采用按键复位
图3-7时钟电路和复位电路
3.3电源模块
使用4节1.5V的干电池串联形成6V的直流稳压电源
3.4电机及驱动模块
3.4.1电机
功能简介:
1、采用性能稳定和价格昂贵的L298N芯片
2、可以控制两路的直流减速电机
3、增加为外面电路5V供电的功能
3.4.2驱动
驱动模块采用专用芯片L298N作为电机驱动芯片,L298N是一个具有高电压大电流的全桥驱动芯片,其响应频率高,一片L298N可以分别控制两个直流电机。
以下为L298N的引脚图和输入输出关系表。
图3-8L298N外部引脚实物图
表1L298N输入输出关系
L289N可接受标准TTL逻辑电平信号Vss,Vss可接4.5到7V电压。
4脚Vs接电源电压,Vs电压范围为+2.54到6V。
输出电流可达2.5A,可驱动电感性负载。
1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。
L298N可驱动2个电动机,OUT1,OUT2,OUT2,OUT3,OUT4之间可分别接电动机,本实验装置我们驱动两台电机。
5,7,10,12脚接输入控制电平,控制电机的正反转。
EnA,EnB接控制使能端,控制电机的停转。
驱动电路的设计如图3-10所示:
图3-9L298N电机驱动电路
L298N的5、7、10、12四个引脚接到单片机上,通过对单片机的编程就可实现两个直流电机的正反控制。
3.5自动循迹小车总体设计
3.5.1总体电路图
图3-10总体电路图
3.5.2系统总体说明
如图3-11所示,当光电传感器开始接受信号,通过比较器将信号传如单片机中。
小车进入寻迹模式,即开始不停地扫描与探测器连接的单片I/O口,一旦检测到某个I/O口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态。
单片机通过控制管脚的高低电平,控制电机正反转动。
单片机采用T0定时计数器,通过来产生PWM波,控制电机转速。
4.软件设计
4.1PWM控制
本系统采用PWM来调节直流电机的速度。
PWM是通过控制固定电压的直流电源开关频率,从而改变负载两端的电压,进而达到控制要求的一种电压调整方法。
PWM可以应用在许多方面,如电机调速、温度控制、压力控制等。
在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开电源,并根据需要改变一个周期内“接通”和“断开”时间的长短。
通过改变直流电机电枢上电压的“占空比”来改变平均电压的大小,从而控制电动机的转速。
因此,PWM又被称为“开关驱动装置”。
在脉冲作用下,当电机通电时,速度增加;电机断电时,速度逐渐减少。
只要按一定规律,改变通、断电的时间,即可让电机转速得到控制。
本系统中通过控制51单片机的定时器T0的初值,从而可以实现P0.4和P0.5输出口输出不同占空比的脉冲波形。
定时计数器若干时间中断一次,就使P0.4或P0.5产生一个高电平或低电平。
将直流电机的速度分为100个等级,因此一个周期就有个100脉冲,周期为100个脉冲的时间。
速度等级对应一个周期的高电平脉冲的个数。
占空比为高电平脉冲个数占一个周期总脉冲个数的百分数。
一个周期加在电机两端的电压为脉冲高电压乘以占空比。
占空比越大,加在电机两端的电压越大,电机转动越快。
电机的平均速度等于在一定的占空比下电机的最大速度乘以占空比。
当我们改变占空比时,就可以得到不同的电机平均速度,从而达到调速的目的。
精确地讲,平均速度与占空比并不是严格的线性关系,在一般的应用中,可以将其近似地看成线性关系。
4.2总体软件流程图
小车进入寻迹模式后,即开始不停地扫描与探测器连接的单片I/O口,一旦检测到某个I/O口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态。
软件的主程序流程图如图4-1所示:
图4-1主程序流程图
4.3小车循迹流程图
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信号,即进入判断处理程序,先确定4个探测器中的哪一个探测到了黑线,如果左面第一级传感器或者左面第二级传感器探测到黑线,即小车左半部分压到黑线,车身向右偏出,此时应使小车向左转;如果是右面第一级传感器或右面第二级传感器探测到了黑线,即车身右半部压住黑线,小车向左偏出了轨迹,则应使小车向右转。
在经过了方向调整后,小车再继续向前行走,并继续探测黑线重复上述动作。
循迹流程图如图4-2所示
Y
N
由于第二级方向控制为第一级的后备,则两个等级间的转向力度必须相互配合。
第二级通常是在超出第一级的控制范围的情况下发生作用,它也是最后一层保护,所以它必须要保证小车回到正确轨迹上来,则通常使第二级转向力度大于第一级,第三级作用同上,即Turn_left3>Turn_left2>Turn_left1,Turn_right3>Turn_right2>Turn_right1(其中Turn_left3,Turn_left2,Turn_left1,Turn_right3,Turn_right2,Turn_right1为小车转向力度,其大小通过改变单片机输出的占空比的大小来改变),具体数值在实地实验中得到。
4.4中断程序流程图
这里利用的是51单片机的T0定时计数器,从而让单片机P0口的P0.4和P0.5引脚输出占空比不同的方波,然后经驱动芯片放大后控制直流电机。
定时计数器若干时间,比如中断一次,就使P0.4或P0.5产生一个高电平或低电平。
中断程序流程图如图4-3所示
4.3单片机程序
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharzkb1=0;//**左边电机的占空比**//
unsignedcharzkb2=0;//**右边电机的占空比**//
unsignedchart=0;//**定时器中断计数器**//
//*********传感器管脚位声明*******//
sbitLSEN1=P1^0;//左侧第一个传感器
sbitLSEN2=P1^1;//左侧第二个传感器
sbitRSEN1=P1^2;//右侧第一个传感器
sbitRSEN2=P1^3;//右侧第二个传感器
//*********驱动芯片L298n管脚位声明*****//
sbitIN1=P0^0;
sbitIN2=P0^1;
sbitIN3=P0^2;
sbitIN4=P0^3;
sbitENA=P0^4;
sbitENB=P0^5;
//**********初始化定时器,中断***********//
voidinit()
{TMOD=0x01;
TH0=(65536-500)/256;
TL0=(65536-500)%256;
EA=1;
ET0=1;
TR0=1;
}
//***********中断函数+脉宽调制***********//
voidtimer0()interrupt1
{
TH0=(65536-500)/256;
TL0=(65536-500)%256;
t++;
if(t ENA=1; else ENA=0; if(t ENB=1; else ENB=0; if(t>=20) { t=0; } } //******************直行******************// voidadvance() {zkb1=8; zkb2=8; IN1=1; IN2=0; IN3=1; IN4=0; } //***************左转函数1***************// voidturn_left1() {zkb1=6; zkb2=6; IN1=0; IN2=1; IN3=1; IN4=0; } //***************左转函数2***************// voidturn_left2() {zkb1=8; zkb2=8; IN1=0; IN2=1; IN3=1; IN4=0; } //***************左转函数3***************// voidturn_left3() {zkb1=12; zkb2=12; IN1=0; IN2=1; IN3=1; IN4=0; } //***************右转函数1***************// voidturn_right1() {zkb1=6; zkb2=6; IN1=1; IN2=0; IN3=0; IN4=1; } //***************右转函数2***************// voidturn_right2() {zkb1=8; zkb2=8; IN1=1; IN2=0; IN3=0; IN4=1; } //***************右转函数3***************// voidturn_right3() {zkb1=12; zkb2=12; IN1=1; IN2=0; IN3=0; IN4=1; } //****************主程序****************// voidmain() { init(); zkb1=8; zkb2=8; while (1) { if((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))//未检测到黑线,小车继续前进 { advance(); } elseif((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==0))//左轮1检测到黑线,左转 { turn_left1(); } elseif((RSEN1==0)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))//左轮1、2检测到黑线,左转 { turn_left2(); } elseif((RSEN1==1)&&(RSEN2==0)&&(LSEN1==1)&&(LSEN2==1))//左轮1、2,右轮1检测到黑线,左转 { turn_left2(); } elseif((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==1))//左轮2检测到黑线,左转 { turn_left3(); } elseif((RSEN1==1)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))//右轮1检测到黑线,右转 { turn_right1(); } elseif((RSEN1==1)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))//右轮1、2检测到黑线,右转 { turn_right2(); } elseif((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==0))//右轮1、2,左轮1检测到黑线,右转 { turn_right2(); } elseif((RSEN1==0)&&(RSEN2==1)&&(LSEN1==0)&&(LSEN2==0))//右轮2检测到黑线,右转 { turn_right3(); } } } 硬件连接 P0^4接驱动模块ENA使能端,输入PWM信号调节速度 P0^5接驱动模块ENB使能端,输入PWM信号调节速度 P0^0,P0^1接INA,INB,驱动蓝色输出端OUTA,OUTB接左电机,当P0^0=1,P0^1=0时,左电机正转,当P0^2=0,P0^3=1,时左电机反转 P0^2,P0^3接INC,IND,驱动蓝色输出端OUTC,OUTD接右电机,当P0^2=1,P0^3=0时,右电机正转,当P0^2=0,P0^3=1;时右电机反转 5.小结 实验程序设计比较简单,程序思路框架容易理清,比较费时间的是小车寻迹效果的调试。 其中主要通过改变占空比的配合来改善小车的寻迹性能,另外当红外检测模块的扫描频率较小时,小车容易来回扭动难以实现稳定寻迹。 为了实现小车较快速行进,可提高直行时的占空比,转弯时的相对转速差相对较大从而实现平稳转向,并提高行进的平均速度。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 自动 小车