AD_Code[AD_Number]=1;
}
else{
AD_Code[AD_Number]=0;
}
}
for(AD_Number=0;AD_Number<15;AD_Number++){
AD_WH+=AD_Code[AD_Number]*AD_Weight[AD_Number];
AD_Code_Count+=AD_Code[AD_Number];
}
由上程序段即可以计算出此时模型车传感器的加权平均值,由此可以得到模型车的状态,为下一步控制决策提供必要的信息。
二、转向舵机控制软件设计方案及算法
在这里我们认为舵机转动的角度是和PWM脉宽成线性的正比关系,因此以一次函数来唯一确定PWM脉宽与舵机转动角度之间的关系。
建立的一次函数方程为:
式中,Steer_Control为舵机应转的角度,Steer_Center为车轮摆正时舵机PWM脉宽应赋的PWMDTYx的值,AD_WH为由传感器状态求得的偏离程度,PWMHalf为舵机由中心摆到车轮允许的最大值PWMDTYx的变化值,Factor为影响比例因数。
PWMHalf/Factor即为P控制参数,Kp。
由此,我们求出了在不同的传感器状态下舵机应转的角度。
三、电机驱动控制系统软件设计方案及算法
电机驱动使用飞思卡尔专用电机驱动芯片MC33886。
驱动电路如图7所示。
图7电机驱动模块电路
电机驱动控制中直道利用p控制加速,检测到弯道开始减速,电机反转,减速到一定程度是停止减速,进入弯道状态。
具体程序如下:
switch(Track){
case
(1):
Speed_Line_P(20);
break;
case
(2):
if(Speed<=16){
Track=3;
PWMDTY23=0;
}
else{
PWMDTY01=0;
PWMDTY23=500;
}
break;
case(3):
Speed_Curve_P(16);
break;
default:
break;
}
voidSpeed_Line_P(charSpeed_Line_Wanted){
Speed_Line_Offset=Speed_Line_Wanted-Speed;
PWMDTY01=400+Speed_Line_Kp*Speed_Line_Offset;
}
voidSpeed_Curve_P(charSpeed_Curve_Wanted){
Speed_Curve_Offset=Speed_Curve_Wanted-Speed;
PWMDTY01=600+Speed_Curve_Kp*Speed_Curve_Offset;
}
四、其他辅助系统软、硬件设计方案
4.15V电源电路。
在智能车系统中,单片机供电及使能都需要用到5V电源,我们采用LM2940S5.0来获得5V电压,实际电路如图:
4.2测速模块
由于考虑到成本需要,我们采用了红外对管和黑白码盘作为测速模块的硬件构成。
其中码盘为32格的黑白相间圆盘,如下图8所示:
图8码盘
红外传感器安装在正对码盘的前方,虽然这样做精度比编码器要低很多,但是成本低廉制作容易,如果智能车速度较快,可以考虑再减少码盘上黑白色条的数量即可。
当圆盘随着齿轮转动时,光电管接收到的透过光强弱交替变化,由此可以得到一系列高低电脉冲。
设置9S12的ECT模块,同时捕捉光电管输出的电脉冲的上升沿和下降沿。
通过累计一定时间内的脉冲数,或者记录相邻脉冲的间隔时间,可以得到和速度等价的参数值。
测速电路使用的红外透射式光电测速传感器。
单片机记录两次中断的时间间隔T。
两次中断对应于智能车前进的距离S为:
16.5/24cm,即0.6875cm,其中16.5cm为智能车后轮实测周长。
智能车实时速度V(cm/s)的计算公式如下:
4.3底盘的调整
由于这次比赛有坡度在15度之内的坡面道路,包括上坡与下坡,光电管架的不是很高,过弯时不会发生侧翻的情况,为了上坡和下坡不会接触地面,产生振动,影响光电管的探测,底盘的前轮高度保持不变,后轮稍稍降低了重心。
4.4前轮的调整
前轮的调整包括前轮主销后倾角,主销内倾角,前轮外倾角,前轮前束的调整。
在调试过程中,我们发现这几个参数对赛车直线的稳定性和弯道灵巧性都有很重要的影响。
主销后倾角是前轮主销与前轮垂直中心线之间的夹角,也就是主销上端向后倾斜的角度。
在赛车上是通过四个黄色的小垫片来调整的。
减小主销后倾角可以减小前轮的回正力矩。
也就是如果车轮向右转,后倾角可以产生一个向左的回正力,使车轮回正比较快,但又使转向更为费力。
设黄色垫片2:
2(即前2后2)为0°,1:
3(前1后3)为2°~3°,则我们改为3:
1(前3后1),使其倾角为负2°~3°。
这样则可以减小回正力矩的作用,使转向更为灵活,但也会使回正比原来稍慢。
主销内倾角是前轮主销在赛车水平面内向内倾斜的角度,虽然增大内倾角也可以增大回正的力矩,但增大内倾角会在赛车转向的过程中,增大赛车与路面的滑动,从而加速轮胎的磨损,由于轮胎对地的附着力对防止侧滑有很重要的影响,所以如果轮胎磨损则得不偿失,所以内倾角调整为0°。
前轮外倾角是前轮的上端向外倾斜的角度,如果前面两个轮子呈现“V”字形则称正倾角,呈现“八”字则称负倾角。
由于前轮外倾可以抵消由于车的重力使车轮向内倾斜的趋势,减少赛车机件的磨损与负重,所以赛车安装了组委会配备的外倾角为1°的配件。
前轮前束是前轮前端向内倾斜的程度,当两轮的前端距离小后端距离大时为内八字,前端距离大后端距离小为外八字。
由于前轮外倾使轮子滚动时类似与圆锥滚动,从而导致两侧车轮向外滚开。
但由于拉杆的作用使车轮不可能向外滚开,车轮会出现边滚变向内划的现象,从而增加了轮胎的磨损。
前轮外八字与前轮外倾搭配,一方面可以抵消前轮外倾的负作用,另一方面由于赛车前进时车轮由于惯性自然的向内倾斜,外八字可以抵消其向内倾斜的趋势。
外八字还可以使转向时靠近弯道内侧的轮胎比靠近弯道外侧的轮胎的转向程度更大,则使内轮胎比外轮胎的转弯半径小,有利与转向。
4.5后轮距及后轮差速的调整
由于速度高,赛车在转弯时容易翻倒,为了增加整车的平衡能力,可用组委会提供的配件把后轮改为大轮距。
在拐弯时由于弯道内侧轮比外侧轮的拐弯半径小,则内侧轮比外侧轮的速度小,这就使两轮胎有一定的速度差,称为差速。
而赛车的差速机构安装在后轮轴上的,所以只可以调整后轮的差速。
经多次调试观察发现差速对赛车转弯有很大的影响。
如果差速过紧,即两轮胎的速度很接近时,转弯的时候内侧轮很容易打滑,从而产生侧滑,使赛车滑出赛道。
当差速过松时,会使直道的时候两轮打滑,大大的减小了赛车的驱动能力。
所以差速调整要适当,才会使直道驱动能力强,弯道转弯灵巧。
我们调试差速的经验是把赛车放在赛道上捏住一个轮胎不动让另一个轮胎能在赛道上半滑动时为佳。
五、整车运行控制系统设计方案及算法
竞赛规则规定,智能车系统采用飞思卡尔的16位微控制器MC9S12XS128单片机作为核心控制单元用于智能车系统的控制。
在选定智能车系统采用光电传感器方案后,赛车的位置信号由车体前方的光电传感器采集,经S12MCU的I/O口处理后,用于赛车的运动控制决策,同时内部ECT模块发出PWM波,驱动直流电机对智能车进行加速和减速控制,以及伺服电机对赛车进行转向控制,使赛车在赛道上能够自主行驶,并以最短的时间最快的速度跑完全程。
为了对赛车的速度进行精确的控制,在智能车后轴上安装光电编码器,采集车轮转速的脉冲信号,经MCU捕获后进行PID自动控制,完成智能车速度的闭环控制。
光电式车模总体结构如图9:
图9光电式车模总体结构
系统总体方框图如图10:
图10系统总体方框图
根据以上系统方案设计,赛车共包括六大模块:
MC9S12XS128B主控模块、传感器模块、电源模块、电机驱动模块、速度检测模块和辅助调试模块。
各模块的作用如下:
(1)、MC9S12XS128B主控模块,作为整个智能车的“大脑”,将采集光电传感器、光电编码器等传感器的信号,根据控制算法做出控制决策,驱动直流电机和伺服电机完成对智能车的控制。
(2)、传感器模块,是智能车的“眼睛”,可以通过通过采集赛道上少数孤立点反射亮度进行路经检测,为智能车的“大脑”做出决策提供必要的依据和充足的反应时间。
(3)、电源模块,为整个系统提供合适而又稳定的电源。
(4)、电机驱动模块,驱动直流电机和伺服电机完成智能车的加减速控制和转向控制。
(5)、速度检测模块,检测反馈智能车后轮的转速,用于速度的闭环控制。
(6)、辅助调试模块主要用于智能车系统的功能调试、赛车状态监控等方面,如主板上的数码管显示转弯和速度等。
六、CodeWarrior软件使用心得
我们在制作过程中运行的编译环境为CodeWarrior4.7。
CodeWarrior4.7是Freescale公司一套比较著名的软件集成开发环境(IDE),具有直观,易用的优点。
CodeWarrior4.7IDE支持深入的C语言和汇编语言调试:
启动/停步、单步、设置跟踪触发器、校验/修改存储器和C变量、结构与阵列、以及执行其他的仿真功能。
它包括项目管理,代码生成,语法敏感编辑器等,具有快速下载的特点。
CodeWarrior4.7具有在线调试,单步运行程序的功能,同时能够观察到主程序中定义的所有的变量的值。
这一功能在进行程序错误检查和改正时起到了至关重要的作用。
(1)、创建工程:
第一次打开CodeWarrior会出现如图界面,点击CreateNewProject开始创建工程,单击File菜单下的NewProject也可开始创建工程。
(2)、随后选择芯片,即MC9S12X128旁边是你选择默认的下载方式,我们选TBDML。
(3)、单击下一步,将工程名Project改成自己要命名的工程名,单击选择工程文件放置的位置。
左边默认选择C语言即可。
(4)、此时单击完成可创建完成一个空的工程;也可以单击下一步添加代码文件,添加完文件后可单击完成工程的创建,也可单击下一步进行更多的工程设置。
基本选择默认即可,如下图所示。
(5)、然后可以看到系统自动生成了一些项目文件
main.c是用户需要开发的应用程序文件。
(6)、在工程中新建文件:
也可以自己再创建新的C语言程序文件。
步骤如下:
单击File目录下的“NewTextFile”选项新建一个文件,单击工具栏的保存图标,选择保存文件的位置(一般放在工程下的Source文件夹下),并修改文件名为.c或者以.h结尾的名字(.c或者.h不能丢),单击保存,此时在工程左边并不会看到刚新建的文件。
接着单击菜单栏的可以选择第一项直接将刚新建的文件添加进工程(此时必须保证当前打开的文件是要添加的文件)。
也可以在source文件夹上右击AddFiles,选择要添加的文件点击“打开”即可。
(7)、编译源文件单击
图标即可。
(8)、下载程序到开发板
当BDM连接到电脑上以后,首先在左侧选择下载工具,如图
然后单击debug图标
(带绿色小箭头的图标)即可开始下载程序。
(9)、BDM下载过程中会弹出芯片选择窗口,选择XS128之后单击“OK”
接着会有另一个对话框弹出
单击“确定”继续即可,然后会有一个警告对话框,将勾勾选上并单击“OK”就可以下载。
七、讨论