1
对于我们组的小车,我们采用单片机进行控制。我们队的小车选用的是飞思卡尔系列
MK60(32 位)单片机,使用的编程软件为 IAR Embedded Workbench。
程序部分的主要功能是协调机械结构与电路,使之能够相配合,从而实现智能车沿规
定赛道快速前进。
小车的控制时序为:开机→检测赛道信号→控制舵机转向→给定速度→检测终点线→
停车。
控制时序部分主要包括以下几个部分:
(1) 速度控制:用于控制智能车的加速、减速、以及停车;
(2) 舵机控制:用于控制智能车的转向,是智能车程序的核心部分;
(3) 调试模块:用于查看智能车瞬时的状态以及参数,发现小车在运行过程中存在的问
题,同时用于修改某些参数,使调车更加方便和快捷。
下面就这几个部分对程序进行详细说明:
一、速度控制部分:
在速度控制中,采用欧姆龙编码器(200p/r)传感器,实现闭环控制。
在小车运行过程中,对于速度而言,对快速性要求较高,而对于准确性要求较低,但也
不能产生太大的误差。基于这个原因,在速度控制上采用 PI 控制,快速响应,同时减小静
差。而就 PI 控制而言有位置式 PI 和增量式 PI 两种,通过对这两种形式的 PI 控制进行尝试,
我们最终采用的是位置式的 PI 控制,其控制程序如下:
sub_speed=speed-pulse; //比例部分,speed 为要求的速度,pulse 为编码器返回的速度
add_sub_speed+=sub_speed; //积分部分,对误差进行累积
limit_add_sub_speed=speed_i*add_sub_speed;
if(limit_add_sub_speed>4000)
limit_add_sub_speed=4000;
else if(limit_add_sub_speed<-4000)
limit_add_sub_speed=-4000; //以上部分为对积分进行限幅,防止转弯或是突然停止
//后积分量过大,使速度过大而不可控
give_speed_forward=speed_p*sub_speed+limit_add_sub_speed;
//PI 计算
速度控制是通过脉宽调制技术(PWM)来实现的。上面 PI 计算所得值用于控制单片机
相应管脚产生相应的波形(改变波形的占空比),将该 PWM 波形输入到电机控制芯片中(我
们选用的是 BTS79xx 系列),电机控制芯片将会产生相应的响应来改变电机两端的电压,从
而实现变压调速。
波形占空比的计算公式如下:
波形占空比= PI计算值 /FTM_PRECISON
式中:FTM_PRECISON 为精度宏定义(#define FTM_PRECISON 10000),定义为 10000。
产生 PWM 波的程序如下:
if(give_speed_forward>0 && give_speed_forward<=10000)
{
give_speed_back=0;
give_speed_forward=give_speed_forward;
}
else if(give_speed_forward > 10000) //由于精度宏定义为 10000,故计算所得的 PI 计
{ //算值不能大于 10000,用该语句限制;
give_speed_forward = 10000;