自动识别路径的智能小车设计报告
论文 关键字:智能小车 电机 驱动 l298 自动循迹 传感器 算法
论文摘要:本系统采用存储空间较大的at89s52作为主控制芯片,电动车电机驱动采用l298n芯片;结合gp2a25光电开关,能较有效的控制其在特定位置转弯角度及行驶出错处理;采用ld-5461as数码管来显示系统分阶段运行的时间,能够较准确较清晰地显示两个数码管位的显示,三者的结合使电动车更加智能化,自动化,可视化。该系统无论在结构和技术上都具有较好的 科学 性。
一、模块方案比较与论证:
1. 车体设计
方案1:自己制作电动车。一般的说来,自己制作的车体比较粗糙,对于白色基板上的道路面行驶,车身重量以及平衡都要有精确的测量,而且也要控制好小车行驶的路线和转弯的力矩及角度,这些都比较难良好地实现。
方案2:购买玩具电动车。购买的玩具电动车具有组装完整的车架车轮。我们可以保留左右两轮转动动轴,并改换转轴力矩大的电机来精确调节转弯角度,采取保留后方向轮,并使用直流电机进行驱动的方案。玩具电动车具有如下优点:首先,这种玩具电动车由于装配紧凑,使得各种所需电路的安装十分方便,看起来也比较美观。其次,玩具电动车是依靠电机与相关齿轮一起驱动,能适应题目中小车准确前进、后退、转弯的要求,而且这种电动车一般都价格适中。
基于以上分析,我们选择了方案二
2.电机模块
方案1:采用步进电机作为该系统的驱动电机。www.lw881.com由于其转过的角度可以精确的定位,可以实现小车前进路程和位置的精确定位。虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。经综合比较考虑,我们放弃了此方案。
方案 2:直流电机:直流电机的控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。对于直流电机的速度调节,可以采用改变电压的方法,也可采用pwm调速方法。pwm调速就是使加在直流电机两端的电压为方波形式,通过改变方波的占空比实现对电机转速的调节。
基于以上分析,我们选择了方案二,使用直流电机作为电动车的驱动电机。
3.电机驱动模块
方案 1:采用sm6135w电机遥控驱动模块。sm6135w是专为遥控车设计的大规模集成电路。能实现前进、后退、向右、向左、加速五个功能,但是其采用的是编码输入控制,而不是电平控制,这样在程序中实现比较麻烦,而且该电机模块价格比较高。
方案 2:采用电机驱动芯片l298n。l298n为单块集成电路,高电压,高电流,四通道驱动,可直接的对电机进行控制,无须隔离电路。通过单片机的i/o输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。调试时在依照上表,用程序输入对应的码值,能够实现对应的动作。表1是其使能、输入引脚和输出引脚的逻辑关系。
表1 l298n的引脚和输出引脚的逻辑关系
en a(b)
in1(in3)
in2(in4)
电机运行情况
h
h
l
正转
h
l
h
反转
h
同in2(in4)
同in2(in4)
快速停止
l
x
x
停止
基于以上分析,我们选择了方案二,用l298n来做为电机的驱动芯片。
4.寻迹传感器模块
方案1:采用发光二极管+光敏电阻,该方案缺点:易受到外界光源的干扰,有时甚至检测不到黑线,主要是因为可见光的反射效果跟地表的平坦程度、地表材料的反射情况均对检测效果产生直接影响。克服此缺点的方法:采用超高亮度的发光二极管能降低一定的干扰,但这又会增加检测系统的功耗。
方案2:脉冲调制的反射式红外发射接收器。由于采用带有交流分量的调制信号,则可大幅度减少外界的干扰;此外红外发射接收管的工作电流取决于平均电流,如果采用占空比小的调制信号,在平均电流不变的情况下,瞬时电流很大(50~100ma)(st-188允许的最大输入电流为50ma),则大大提高了信噪比。此种测试方案反应速度大约在5us。
方案3:采用ccd传感器,此种方法虽然能对路面信息进行准确完备的反应,但它存在信息处理满,实时性差等缺点,因此若采用ccd传感器,无疑会加重单片机的处理负担,不利于实现更好的控制策略。
根据以上分析我们采用方案2
5.控制器模块
方案1:采用凌阳的spce061a小板作为主控制芯片,而且可以采用凌阳的小车模组,可以很快的完成其基本功能,当是用该小板存在在一定的局限性,较难扩张功能,而且各个模块的拼凑,没有比集成在一块板的稳定性高。
方案2:采用at89s52作为主控制芯片,该芯片有足够的存储空间,可以方便的在线isp下载程序,能够满足该系统软件的需要,该芯片提供了两个计数器中断,对于本作品系统已经足够,采用该芯片可以比较灵活的选择各个模块控制芯片,能够准确的 计算 出时间,有很好的实时性。
基于以上分析,我们选择了方案
二,采用at89s52作为电动车的主控制芯片。
6.电源模块
在本系统中,需要用到的电源有单片机的5v,l298n芯片的电源5v和电机的电源7—15v。所以需要对电源的提供必须正确和稳定可靠。
方案1:用9v的锌电源给前、后轮电机供电,然后使用7805稳压管来把高电压稳成5v分别给单片机和电机驱动芯片供电。这种接法比较简单,但小车的电路功耗过大会导致后轮电机动力不足。
方案2:采用双电源。为了确保单片机控制部分和后轮电机驱动的部分的电压不会互相影响,要把单片机的供电和驱动电路分开来,,即:用6节干电池7.2v来驱动电机芯片,然后用7805稳压管来稳成5v供给单片机,后轮电机的电源用3v供电,这样有助于消除电机干扰,提高系统的稳定性。
基于以上分析,我们选择了方案二。
7.最终方案
二、系统总体设计:
1.系统工作原理及功能简介:本系统利用单片机at89s52单片机作为本系统的主控模块,该单片机可以将从传感器的输出信号得到外界的信息,然后在程序中控制单片机对电动车上的直流电机的输出,从而实现电动车的前进以及转弯等循迹行驶。
2.系统框架图
3.理论分析与计算
4.系统主要模块设计:
(1)电源:
为确保小车在行驶过程中各部件均能正常工作且相互之间不受影响,我们可使用了两个电源为两个主要模块提供电压。分别是由转弯电机、单片机和光电传感器组成的总电路电源模块以及后轮驱动电源模块。
(2)转弯与路径出错识别:
小车在行驶过程中会遇到以下两种路况:
① 当小车由直道高速进入弯道时,转角方向和车速应根据弯道的曲率迅速做出相应的改变,原则是弯道曲率越大则方向变化角度越大。
② 当小车遇到十字交叉路段或是脱离轨迹等特殊情况时,智能车应当保持与上次正常情况一致的方向行驶。
(3)光电传感器:
光电传感分布格局:
路径识别方案:电开关脱离轨道时,等待外面任意一只检测到黑线后,做出相应的转向调整,直到中间的光电开关重新检测到黑线(即回到轨道)再恢复正向行驶。现场实测表明,虽然小车在寻迹过程中有一定的左右摇摆。但只要控制好行驶速度就可保证车身基本上接近于沿靠轨道行驶。
四、系统硬件电路设计
(1)系统整体电路图如下:
(2)光电传感器电路
(3)电源电路
五、软件代码设计
1.软件算法设计:
(1)传感器数据处理及寻迹程序总体流程:
主程序主要起到一个导向和决策功能。其设计思路根据小车所处位置的不同,确定小车的任务。在黑线轨道上走直线时,对传感器的信号进行及时的判断,左边信号为零时控制电机左转,右边为零时控制电机右转。在弯道时,为了不冲出轨道,是左轮一直打偏,直到检测到右边信号为零时控制电机右转,当右信号为1时,继续使左轮一直偏。
(2)具体流程分析:
智能小车采用4个光学传感器置于小车前部,以此判断如何控制舵机转向.
程序不停判断0~3传感器的值,当sensor1==1与sensor0==0时,小车为图(i)情况,此时应控制舵机向右转,调用turnright()函数;当sensor0==1与sensor1==0时,小车为图(ii)情况,此时应控制舵机向右转,调用turnleft()函数.
(i) (ii)
但由于传感器比较灵敏,经实际测试,白色区域中可能存在杂色,传感器有可能扫描到白色区域中的黑色(如下图),为了避免判断错误,再没检测到需要转右或者转左后,进行延时,接着再次判断此时传感器情况,如果仍然为sensor1==1与sensor0==0(或者sensor0==1与sensor1==0)则可能判断在黑色跑道上,接着调用转右(转左)函数.不过,仍然有一定几率判断失误,当延时后,传感器刚好经过另一个杂色的情况,解决方法有待完善.
当前后传感器都为1(黑)时(如下图(iii)),则认为小车在黑色跑道上,不需要进行转向,调recoverbalance()函数,恢复平衡位置.
当前后传感器都为0(白)时(如下图(iv)),则认为传感器将离开跑道范围,为了另小车继续延黑色跑道行走,程序中的pre_dir变量保存最近一次转向方向(1为右,0为左),此时凭此变量来维持小车的转向.
2.主程序流程图:
3. 具体代码分析:
//宏定义电机、舵机的输入端
#define ele_machiner1_in1 p0_0//舵机输入端口1
#define ele_machiner1_in2 p0_1//舵机输入端口2
#define ele_machiner1_en p2_7//舵机使能端
//宏定义光电传感器元件0至3
#define sensor_input p2 //光电传感器总端口(逆时针排序)
#define sensor0 p3_0 //前传感器0
#define sensor1 p3_1 //右传感器1
#define sensor2 p3_2 //左传感器2
#define sensor3 p3_3 //后传感器3
/*平衡函数*/
void recoverbalance()
{
ele_machiner1_in1 = 0;//控制舵机平衡
ele_machiner1_in2 = 0;
}
/*转左函数*/
void turnleft()
{
char i = 50;
while(i--)
{
ele_machiner1_in1 = 1;//控制舵机左转
ele_machin
er1_in2 = 0;
}
}
/*转左函数*/
void turnright()
{
char i = 50;
while(i--)
{
ele_machiner1_in1 = 0;//控制舵机右转
ele_machiner1_in2 = 1;
}
}
/*主函数*/
void main(void)
{
uchar pre_dir=0; //保存先前转向 1为右,0为左
system_initial(); //系统开机初始化
ele_machiner1_in1=0; //舵机输入端口1
ele_machiner1_in2=0; //舵机输入端口2
ele_machiner1_en=1; //舵机使能端
while(1) /* 循环判断 */
{
/* 如果右传感器为1(黑),且左传感器为0(白),则可能需要向右转 */
if(sensor1 == 1 && sensor2 == 0)
{
delay(2); /* 延时,再次判断,防止赛道杂色 */
if(sensor1 == 1 && sensor2 == 0)
{
turnright(); /* 调用右转函数 */
pre_dir = 1; /* 将pre_dir置1(右) */
}
}
/* 如果左传感器为1(黑),且右传感器为0(白),则可能需要向左转 */
else if(sensor2 == 1 && sensor1 == 0)
{
delay(2); /* 延时,再次判断,防止赛道杂色 */
if(sensor2 == 1 && sensor1 == 0)
{
turnleft(); /* 调用左转函数 */
pre_dir = 0; /* 将pre_dir置0(左) */
}
}
/* 如果前传感器为1(黑),且后传感器为1(黑),则小车在黑线路径上,不需要转向 */
else if(sensor0 == 1 && sensor3 == 1)
{
recoverbalance();
}
/* 如果前传感器为0(白),则可知前面弯度比较大或者小车已出黑线,则根据先前转向转向 */
else if(sensor0 == 0)
{
if(pre_dir) /* 定义变量pre_dir保存最近一次转向方向*/
{
turnright();
}
else
{
turnleft();
}
}
}
}
六、系统功能测试
测试设备:自制跑道、比赛方提供跑道、秒表、
过程分析:基本功能,扩展功能及其他功能
自制跑道测试:
自制跑道
完成时间
车体总重
出界次数
电池电压
出现问题
完成与否
试验一
26.3s
425g
1
4.1
在紧急弯上容易出界
y
试验二
27.1s
455g
2
4
在紧急弯上容易出界
y
试验三
27.9s
485g
2
3.8
在紧急弯上容易出界
y
试验四
26.5s
450g
2
3.7
在紧急弯上容易出界
y
试验五
未完成
400g
4
3.7
出界后识别错误
n
自制跑道上的成功率为80%,测试表明在电量偏小,载重中等时成功率最好
比赛使用跑道测试
自制跑道
完成时间
车体总重
出界次数
电池电压
出现问题
完成与否
试验一
26.3s
450g
2
3.9
在360度弯上出界,一个s型弯偏出
y
试验二
27.1s
455g
3
3.7
在360度弯上出界,一个s型弯偏出
y
试验三
27.9s
450g
3
3.6
在360度弯上出界,一个s型弯偏出
y
试验四
未完成
450g
冲出赛道
3.7
在360度弯上出界后冲出赛道
n
在比赛使用赛道上,虽然成功率较低,在一个360度弯上有出界现象,不过真题成功率也有75%。
测试数据与结果分析
通过多次测试数据,本自动识别路径的智能小车的性能指标及实现功能如下:
1、在规定的时间内小车可完成往返全程路;
2、在不同配重物的情况下,小车达到的平衡度有一定的误差;
3、小车可寻迹运行;
调试过程与分析
硬件调试
软件调试
上一篇:18层煤回采工作面顶板控制分析
下一篇:智能刹车系统