光电循迹小车使用手册
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
光电循迹小车使用手册
1.仿真软件介绍
在做实物之前,可以用仿真软件plastid进行在线仿真。这样不仅可以加快设计进度,同时可以减少实际电路的调试,减少出错,节约成本。
Plastid是为“飞思卡尔”杯全国大学生智能车邀请赛开发的智能车仿真系统,不仅可以针对不同的赛车,赛道,路径识别方案,控制策略等内容进行仿真和相关分析,还增添了许多新的功能,使仿真系统更接近于实际情况,为使用者提供更好,更真实的虚拟仿真平台。
此外,小车由直道渐入弯道时,为防止小车速度过大因惯性作用冲出车道,需要在此时对直流电机进行减速。此外还要找到临界速度,看超过多大速度小车易于冲出赛道,积累一些经验。
附录A
小车实物图
附录B:
小车源程序
#include <reg52.h>
#define Left1 1//宏定义,左转
#define Right1 2//宏定义,右转
if( KeyRight2 == 0 )
{LeftOrRight = Right2;}
}
void main ( void )//主函数
{
InitialTimer();
for(;;)
{ ControlLeftOrRight();}
}
voidTimer1 ( void ) interrupt 3 //定时器中断函数
3.4整体调试
各部分子电路调试结束后,对小车整体进行调试。先另小车以某一较低的速度行驶,通过弯道时保证有较合适的舵机转角。在舵机转角调试过程中得到的经验值的基础上进行修改。利用软件对参数进行修改,提高小车直流电机的转速和修改舵机转角。如此反复进行,直到得到较为合理的经验值。先让小车行驶稳定,在此基础上逐渐提高小车速度。
3)传感器视窗
显示传感器信号,同“赛车测试”。
4)行驶参数区
显示当前时间,赛车车速、加速度、前轮转角、偏差距离、位置等状态参数。偏差距离:赛车中心点到赛道中心线的最短距离。
5)行驶曲线区
显示速度和偏差距离的历史曲线,用于观察两者变化的趋势。是评估控制算法效果的重要依据。
2.小车硬件介绍
2.1系统硬件概述
赛车设计包括:赛车基本参数设置、电机参数设置、舵机参数设置、添加并设置传感器参数四个方面。获得并设置准确的各种参数,是一个好的赛车模型的基础。
图1.5仿真界面
仿真开始之后,系统提供了5块区域显示赛车行驶过程中的各种状态参数:
1)主视窗
显示局部区域的赛车运行姿态,用于细节观察。
2)全局视窗
显示全局信息,用于观察赛车运行全局状态。
赛车设计:在赛车设计子界面中,用户建立自己的小车模型,并根据自己小车的实际情况对相关参数进行设置。同时,我们也提供了一些默认参数供用户调试。
仿真模拟:完成前面的赛道和赛车设计之后,在仿真模拟子界面中,可以完成仿真系统最重要的功能——仿真模拟,为用户编写的算法作一个定性的评估;
结果回放:在结果回放子界面中,可以观看仿真模拟之后保存的结果,用户可以通过播放、暂停、步进、步退等功能操作回放过程,分析回放结果。
void InitialTimer ( void )
{
TMOD=0x10;//定时/计数器1工作于方式1
TH1 = ( 65535 - 115 ) / 256;//0.25ms
TL1 = ( 65535 - 115 ) % 256;
EA=1; //开总中断
ET1=1; //允许定时/计数器1中断
TR1=1; //启动定时/计数器1中断
sbit KeyRight2 = P1^5;//右转按键端口
sbit V=P3^7; //速度信号端口
unsigned char TimeOutCounter = 0,LeftOrRight = 2;dianji=10; //TimeOutCounter:定时器溢出计数LeftOrRight:舵机左右旋转标志
3.3直流电机的调试
舵机和传感器电路调试完成后,将直流电机接入电路,先不将小车放到跑道上,在白纸上稍微将后轮悬空,用黑线在下面移动,用示波器观测电机两端的PWM信号是否按要求改变,确认无误后可以拿到跑道上进行试车。让小车在一段直道行驶后,进入一曲率半径为最大值的曲线。反复试验,即可得出保证小车不驶出轨道的最大占空比。由此计算便得出直流电机的最大转速,此后的软件控制过程中需保证直流电机的转速不大于此值。
舵机本身是一个位置随动系统。它由舵盘、减速齿轮组、位置反馈电位计、直流电机和控制电路组成。通过内部的位置反馈,使它的舵盘输出转角正比于给定的控制信号,因此对于它的控制可以使用开环控制方式。在负载力矩小于其最大输出力矩的情况下,它的输出转角正比于给定的脉冲宽度。
舵机接口一般采用三线连接方法,黑线为电源地线,红线为电源线。一般采用两种标准,4.8V和6V。另外一根连线(蓝色或者黄色)为控制信号线。控制信号为20ms左右的脉冲信号,脉冲信号的宽度决定舵机输出舵盘的角度。
图1.3赛道设计界面
赛道主视窗及全局视窗可即时显示出正在设计的赛道的形状,供用户设计时参考,当坐标停留在主视窗内时,左下角状态栏会有当前鼠标点的坐标显示,方便用户设计赛道时地定位。用户可以通过赛道编辑来实现赛道地设计,右下角的数据列表还有当前赛道地数据信息显示,这样使赛道设计更加方便、直观。
图1.4赛车设计界面
else
{ControlPort = 0; }
break;}
case 1 : //为1时,舵机左转30度
{
if( TimeOutCounter <= 6)
{ ControlPort = 1;}
else
{ ControlPort = 0; }
break;}
case 2 : //为2时,舵机右转30度
{
3.2舵机的调试过程
调试舵机时,可以先不使用直流电机,将小车放在白纸上,用25mm宽的黑线在传感器下方移动,看舵机的转向与设备的角度是否一致。然后在跑道上,用手推车的方法,让车经过符合比赛规则中要求的不同曲率半径的轨迹。对于不同曲率半径的轨迹,不同的传感器会检测到不同的信号。记下针对不同的传感器的不同方向(左右)检测到信号的情况,让其中较为合适的舵机转角,作为一组试验值,供软件使用。
if( TimeOutCounter <= 7)
{ ControlPort = 1; }
else
{ ControlPort = 0;}
break;}
case 3 ://为3时,舵机右转60度
{
TH1 = ( 65535 - 110 ) / 256;
TL1 = ( 65535 - 110) % 256;
TimeOutCounter ++;
switch ( LeftOrRight )
{
case 0 ://为0时,舵机左转60度
{
if( TimeOutCounter <= 5)
{ControlPort = 1; }
图2.3单片机最小系统电路图
第3章开发与调试
在智能车调试的过程中主要采用的工具是keil编程软件,51单片机程序下载器以及Proteus软件,keil软件可以将C++原程序代码生成89C51单片机可以识别的.hex文件;而51单片机程序下载器可以将生成的.hex文件烧录到89C51单片机中,用来处理光电传感器识别的信号以及控制电机、舵机的运行;Proteus软件可以进行电机和舵机的功能模拟,加快设计进程。此外还用到了万用表,电烙铁,数字示波器等试验设备。
Plastid主要有以下几大特点:
1.赛道与赛车环境模拟
系统分别针对赛道与赛车建立模型,使用者可以方便的自行设计直线,弯道等各种形状的赛道,并可根据赛车的实际情况调整赛车的参数,使用方便灵活。在条件限制,没有办法制作试验赛道或智能车尚未制作完成的情况下,更可以在该系统下验证,调试控制算法。
2.控制算法仿真验证
图1.2仿真系统的软件架构
基本模型层包括赛车模型与赛道模型,用户可根据实际情况设定模型参数如赛道参数、赛车参数、电机参数等等,它为整个系统提供了底层的物理模型驱动,仿真结果在此基础上计算而得。传感器层包括传感器种类、数量以及安装位置的设置,用户可以根据自己参赛队的实际的条件选择合适的传感器方案,同时也可以暂时设定一个方案,以后再作进一步的调整。在控制算法层,用户可以提供自己编写的算法以供仿真使用。仿真环境层在各个模型参数设置完毕、初始化成功的条件下,通过前面所设置的赛车、赛道模型以及接受控制算法所输出的控制信号(电机控制、转向控制信号),计算出车的行驶路线及各个运动、机电状态参数,并即时地将数据传回控制算法层。在仿真过程中,系统将仿真过程中的一些重要状态参数记录下来,并可将结果保存为仿真记录文件。在回放模式中,用户可调用仿真保存的仿真记录文件,对其仿真结果进行后期分析和处理,进而改进自己的赛车设置以及控制算法。
舵机输出转角与控制信号脉宽之间的关系如图2.2所示。
图2.2舵机输出转角与控制信号脉宽之间关系
2.3单片机系统模块
单片机模块主要负责道路的识别、获取智能车的速度、输出驱动电机的控制信号和算法的实现,通过串口驱动电路中的RS-232电平转换芯片,单片机可以利用异步通信协议与PC机通信。RS-232电平转换芯片可以实现TTL电平与RS-232电平之间的转换,然后通过9芯串行口与PC进行串口通信。单片机及外围电路如图3.4所示:
}
void ControBiblioteka BaiduLeftOrRight ( void ) //控制舵机函数
{
if( KeyLeft1 == 0 )
{LeftOrRight = Left1;}
if( KeyRight1 == 0 )
{ LeftOrRight = Right1;}
if( KeyLeft2 == 0 )
{ LeftOrRight = Left2;}
智能车调试总共有两个阶段:第一阶段调试自行开发的硬件电路板和各个子程序、主程序,第二阶段自制了不同跑道调试智能车的速度和转向性能等,最后根据试验修改软硬件。
3.1传感器及外围电路的调试
反射式红外传感器的调试分为机械调试和电路调试。机械调试的主要任务是保证传感器组位于小车的最前端,并与地面保持合适的距离。经过多次试验,测得较为合适的距离是12mm。电路调试的目的是使各个传感器的电压输出值均保持在一定值(1.5V)附近。其操作过程是将传感器电路放于白纸上一定高度处,调节电位器使传感器的电压输出端压降为1.5V左右。
图1.1程序主界面
在此界面中,用户可以在菜单工具栏中的“文件”、“工具”、“帮助”等菜单进行操作;同时,也可以操作菜单工具栏下方的选项:“赛道设计”、“赛车设计”、“仿真模拟”、“结果回放”,进入相应的操作子界面进行进一步的操作。
赛道设计:在赛道设计子界面中,可以进行赛道的设计操作,如新建及修改赛道、赛道基本参数设定等。
系统硬件框架图如图2.1所示:
图2.1系统硬件框架图
2.2舵机控制模块
舵机主要是用来控制智能车的运动方向,通过调节小车前轮转动的角度来改变小车运动方向的。智能车的角度控制是通过单片机输出PWM信号对舵机进行控制的,舵机内部有一个基准电路,能产生周期为20ms,宽度为1.5ms的基准信号,当PWM信号输入到舵机时,舵机内部产生一个直流偏置电压,此电压与电位器的电压比较,将获得电压差输出,最后,电压差的正负输出到电机驱动芯片决定舵机的正反转。因此,当单片机输出一定占空比的PWM光电时,舵机就会转动一定的角度。
系统采用纯软件仿真形式,通过将控制程序编写成dll文件,系统调用dll文件来实现仿真。Dll的编写可以使用VC6,VC2005,Delphi7,Delphi2006.使用者可以根据自身情况,选择最适合自己的编程环境来编写程序。验证调试后的算法代码,也可以很方便的移植到单片机中。
3.路径识别方案分析
系统提供了广泛使用的光电传感器和CCD传感器模型,使用者可以自行设计传感器的数量及排列方式,位置,在系统中进行仿真,通过分析比较,从而获得优化方案。很多程度上解决了实地试验中更换传感器麻烦,费时的问题。从而极大提高方案分析效率。
#define Left2 0//宏定义,左转
#define Right2 3//宏定义,右转
sbit ControlPort = P0^0; //舵机信号端口
sbit KeyLeft1 = P1^2;//左转按键端口
sbit KeyRight1 = P1^4;//右转按键端口
sbit KeyLeft2 = P1^1;//左转按键端口
1.仿真软件介绍
在做实物之前,可以用仿真软件plastid进行在线仿真。这样不仅可以加快设计进度,同时可以减少实际电路的调试,减少出错,节约成本。
Plastid是为“飞思卡尔”杯全国大学生智能车邀请赛开发的智能车仿真系统,不仅可以针对不同的赛车,赛道,路径识别方案,控制策略等内容进行仿真和相关分析,还增添了许多新的功能,使仿真系统更接近于实际情况,为使用者提供更好,更真实的虚拟仿真平台。
此外,小车由直道渐入弯道时,为防止小车速度过大因惯性作用冲出车道,需要在此时对直流电机进行减速。此外还要找到临界速度,看超过多大速度小车易于冲出赛道,积累一些经验。
附录A
小车实物图
附录B:
小车源程序
#include <reg52.h>
#define Left1 1//宏定义,左转
#define Right1 2//宏定义,右转
if( KeyRight2 == 0 )
{LeftOrRight = Right2;}
}
void main ( void )//主函数
{
InitialTimer();
for(;;)
{ ControlLeftOrRight();}
}
voidTimer1 ( void ) interrupt 3 //定时器中断函数
3.4整体调试
各部分子电路调试结束后,对小车整体进行调试。先另小车以某一较低的速度行驶,通过弯道时保证有较合适的舵机转角。在舵机转角调试过程中得到的经验值的基础上进行修改。利用软件对参数进行修改,提高小车直流电机的转速和修改舵机转角。如此反复进行,直到得到较为合理的经验值。先让小车行驶稳定,在此基础上逐渐提高小车速度。
3)传感器视窗
显示传感器信号,同“赛车测试”。
4)行驶参数区
显示当前时间,赛车车速、加速度、前轮转角、偏差距离、位置等状态参数。偏差距离:赛车中心点到赛道中心线的最短距离。
5)行驶曲线区
显示速度和偏差距离的历史曲线,用于观察两者变化的趋势。是评估控制算法效果的重要依据。
2.小车硬件介绍
2.1系统硬件概述
赛车设计包括:赛车基本参数设置、电机参数设置、舵机参数设置、添加并设置传感器参数四个方面。获得并设置准确的各种参数,是一个好的赛车模型的基础。
图1.5仿真界面
仿真开始之后,系统提供了5块区域显示赛车行驶过程中的各种状态参数:
1)主视窗
显示局部区域的赛车运行姿态,用于细节观察。
2)全局视窗
显示全局信息,用于观察赛车运行全局状态。
赛车设计:在赛车设计子界面中,用户建立自己的小车模型,并根据自己小车的实际情况对相关参数进行设置。同时,我们也提供了一些默认参数供用户调试。
仿真模拟:完成前面的赛道和赛车设计之后,在仿真模拟子界面中,可以完成仿真系统最重要的功能——仿真模拟,为用户编写的算法作一个定性的评估;
结果回放:在结果回放子界面中,可以观看仿真模拟之后保存的结果,用户可以通过播放、暂停、步进、步退等功能操作回放过程,分析回放结果。
void InitialTimer ( void )
{
TMOD=0x10;//定时/计数器1工作于方式1
TH1 = ( 65535 - 115 ) / 256;//0.25ms
TL1 = ( 65535 - 115 ) % 256;
EA=1; //开总中断
ET1=1; //允许定时/计数器1中断
TR1=1; //启动定时/计数器1中断
sbit KeyRight2 = P1^5;//右转按键端口
sbit V=P3^7; //速度信号端口
unsigned char TimeOutCounter = 0,LeftOrRight = 2;dianji=10; //TimeOutCounter:定时器溢出计数LeftOrRight:舵机左右旋转标志
3.3直流电机的调试
舵机和传感器电路调试完成后,将直流电机接入电路,先不将小车放到跑道上,在白纸上稍微将后轮悬空,用黑线在下面移动,用示波器观测电机两端的PWM信号是否按要求改变,确认无误后可以拿到跑道上进行试车。让小车在一段直道行驶后,进入一曲率半径为最大值的曲线。反复试验,即可得出保证小车不驶出轨道的最大占空比。由此计算便得出直流电机的最大转速,此后的软件控制过程中需保证直流电机的转速不大于此值。
舵机本身是一个位置随动系统。它由舵盘、减速齿轮组、位置反馈电位计、直流电机和控制电路组成。通过内部的位置反馈,使它的舵盘输出转角正比于给定的控制信号,因此对于它的控制可以使用开环控制方式。在负载力矩小于其最大输出力矩的情况下,它的输出转角正比于给定的脉冲宽度。
舵机接口一般采用三线连接方法,黑线为电源地线,红线为电源线。一般采用两种标准,4.8V和6V。另外一根连线(蓝色或者黄色)为控制信号线。控制信号为20ms左右的脉冲信号,脉冲信号的宽度决定舵机输出舵盘的角度。
图1.3赛道设计界面
赛道主视窗及全局视窗可即时显示出正在设计的赛道的形状,供用户设计时参考,当坐标停留在主视窗内时,左下角状态栏会有当前鼠标点的坐标显示,方便用户设计赛道时地定位。用户可以通过赛道编辑来实现赛道地设计,右下角的数据列表还有当前赛道地数据信息显示,这样使赛道设计更加方便、直观。
图1.4赛车设计界面
else
{ControlPort = 0; }
break;}
case 1 : //为1时,舵机左转30度
{
if( TimeOutCounter <= 6)
{ ControlPort = 1;}
else
{ ControlPort = 0; }
break;}
case 2 : //为2时,舵机右转30度
{
3.2舵机的调试过程
调试舵机时,可以先不使用直流电机,将小车放在白纸上,用25mm宽的黑线在传感器下方移动,看舵机的转向与设备的角度是否一致。然后在跑道上,用手推车的方法,让车经过符合比赛规则中要求的不同曲率半径的轨迹。对于不同曲率半径的轨迹,不同的传感器会检测到不同的信号。记下针对不同的传感器的不同方向(左右)检测到信号的情况,让其中较为合适的舵机转角,作为一组试验值,供软件使用。
if( TimeOutCounter <= 7)
{ ControlPort = 1; }
else
{ ControlPort = 0;}
break;}
case 3 ://为3时,舵机右转60度
{
TH1 = ( 65535 - 110 ) / 256;
TL1 = ( 65535 - 110) % 256;
TimeOutCounter ++;
switch ( LeftOrRight )
{
case 0 ://为0时,舵机左转60度
{
if( TimeOutCounter <= 5)
{ControlPort = 1; }
图2.3单片机最小系统电路图
第3章开发与调试
在智能车调试的过程中主要采用的工具是keil编程软件,51单片机程序下载器以及Proteus软件,keil软件可以将C++原程序代码生成89C51单片机可以识别的.hex文件;而51单片机程序下载器可以将生成的.hex文件烧录到89C51单片机中,用来处理光电传感器识别的信号以及控制电机、舵机的运行;Proteus软件可以进行电机和舵机的功能模拟,加快设计进程。此外还用到了万用表,电烙铁,数字示波器等试验设备。
Plastid主要有以下几大特点:
1.赛道与赛车环境模拟
系统分别针对赛道与赛车建立模型,使用者可以方便的自行设计直线,弯道等各种形状的赛道,并可根据赛车的实际情况调整赛车的参数,使用方便灵活。在条件限制,没有办法制作试验赛道或智能车尚未制作完成的情况下,更可以在该系统下验证,调试控制算法。
2.控制算法仿真验证
图1.2仿真系统的软件架构
基本模型层包括赛车模型与赛道模型,用户可根据实际情况设定模型参数如赛道参数、赛车参数、电机参数等等,它为整个系统提供了底层的物理模型驱动,仿真结果在此基础上计算而得。传感器层包括传感器种类、数量以及安装位置的设置,用户可以根据自己参赛队的实际的条件选择合适的传感器方案,同时也可以暂时设定一个方案,以后再作进一步的调整。在控制算法层,用户可以提供自己编写的算法以供仿真使用。仿真环境层在各个模型参数设置完毕、初始化成功的条件下,通过前面所设置的赛车、赛道模型以及接受控制算法所输出的控制信号(电机控制、转向控制信号),计算出车的行驶路线及各个运动、机电状态参数,并即时地将数据传回控制算法层。在仿真过程中,系统将仿真过程中的一些重要状态参数记录下来,并可将结果保存为仿真记录文件。在回放模式中,用户可调用仿真保存的仿真记录文件,对其仿真结果进行后期分析和处理,进而改进自己的赛车设置以及控制算法。
舵机输出转角与控制信号脉宽之间的关系如图2.2所示。
图2.2舵机输出转角与控制信号脉宽之间关系
2.3单片机系统模块
单片机模块主要负责道路的识别、获取智能车的速度、输出驱动电机的控制信号和算法的实现,通过串口驱动电路中的RS-232电平转换芯片,单片机可以利用异步通信协议与PC机通信。RS-232电平转换芯片可以实现TTL电平与RS-232电平之间的转换,然后通过9芯串行口与PC进行串口通信。单片机及外围电路如图3.4所示:
}
void ControBiblioteka BaiduLeftOrRight ( void ) //控制舵机函数
{
if( KeyLeft1 == 0 )
{LeftOrRight = Left1;}
if( KeyRight1 == 0 )
{ LeftOrRight = Right1;}
if( KeyLeft2 == 0 )
{ LeftOrRight = Left2;}
智能车调试总共有两个阶段:第一阶段调试自行开发的硬件电路板和各个子程序、主程序,第二阶段自制了不同跑道调试智能车的速度和转向性能等,最后根据试验修改软硬件。
3.1传感器及外围电路的调试
反射式红外传感器的调试分为机械调试和电路调试。机械调试的主要任务是保证传感器组位于小车的最前端,并与地面保持合适的距离。经过多次试验,测得较为合适的距离是12mm。电路调试的目的是使各个传感器的电压输出值均保持在一定值(1.5V)附近。其操作过程是将传感器电路放于白纸上一定高度处,调节电位器使传感器的电压输出端压降为1.5V左右。
图1.1程序主界面
在此界面中,用户可以在菜单工具栏中的“文件”、“工具”、“帮助”等菜单进行操作;同时,也可以操作菜单工具栏下方的选项:“赛道设计”、“赛车设计”、“仿真模拟”、“结果回放”,进入相应的操作子界面进行进一步的操作。
赛道设计:在赛道设计子界面中,可以进行赛道的设计操作,如新建及修改赛道、赛道基本参数设定等。
系统硬件框架图如图2.1所示:
图2.1系统硬件框架图
2.2舵机控制模块
舵机主要是用来控制智能车的运动方向,通过调节小车前轮转动的角度来改变小车运动方向的。智能车的角度控制是通过单片机输出PWM信号对舵机进行控制的,舵机内部有一个基准电路,能产生周期为20ms,宽度为1.5ms的基准信号,当PWM信号输入到舵机时,舵机内部产生一个直流偏置电压,此电压与电位器的电压比较,将获得电压差输出,最后,电压差的正负输出到电机驱动芯片决定舵机的正反转。因此,当单片机输出一定占空比的PWM光电时,舵机就会转动一定的角度。
系统采用纯软件仿真形式,通过将控制程序编写成dll文件,系统调用dll文件来实现仿真。Dll的编写可以使用VC6,VC2005,Delphi7,Delphi2006.使用者可以根据自身情况,选择最适合自己的编程环境来编写程序。验证调试后的算法代码,也可以很方便的移植到单片机中。
3.路径识别方案分析
系统提供了广泛使用的光电传感器和CCD传感器模型,使用者可以自行设计传感器的数量及排列方式,位置,在系统中进行仿真,通过分析比较,从而获得优化方案。很多程度上解决了实地试验中更换传感器麻烦,费时的问题。从而极大提高方案分析效率。
#define Left2 0//宏定义,左转
#define Right2 3//宏定义,右转
sbit ControlPort = P0^0; //舵机信号端口
sbit KeyLeft1 = P1^2;//左转按键端口
sbit KeyRight1 = P1^4;//右转按键端口
sbit KeyLeft2 = P1^1;//左转按键端口