雷永锋 刘 勇 黄喜恒
(成都理工大学 工程技术学院,四川 乐山 614007)
随着科技的进步和高等教育的发展,培养应用型人才成为高校人才培养的主要目标。让在校大学生参与更多的实践活动不但能够增加动手和思考的能力,而且对于适应毕业后的工作有很大的益处。全国大学生智能汽车竞赛就为在校学生提供了一个展示自己的平台,也促进了专业理论知识和实践能力的结合。本论文设计的基于线性CCD的智能巡线小车控制系统就是利用学院大学生科技创新基金针对竞赛而开展的一项创新项目。由于线性CCD的优良特性,使得在小车控制方面得到较好的应用,实现小车平稳、快速的行走。
本智能循迹小车由电源模块、单片机模块、舵机模块、线性CCD图像采集模块、显示和按键、无线通讯模块等模块组成,系统硬件结构框图如图1所示。
图1 智能循迹小车硬件结构框图
本系统采用线性CCD作为传感器,采集来自前方赛道的信息,并将此信息处理后传送至单片机,通过软件处理,由舵机调整角度,驱动电机带动车轮行走。单片机通过串口通讯模块实现和上位机之间的通讯,由按键实现现场参数调整,并可通过LCD实时显示运行参数。下面对系统主要硬件模块进行阐述。
本系统采用Freescal半导体公司生产的16位单片机MC9S12XS128作为控制器。MC9S12XS128是一款针对汽车电子市场的高性能16位单片机,具有速度快、功能强、成本低、功耗低等特点。MC9S12XS128总线速度 40MHz,拥有 128KB程序 Flash和 8KB DataFlash,用于实现程序和数据存储,均带有错误校正码(ECC),可配置8位、10位或12位ADC,3μs的转换时间,内嵌MSCAN模块用于CAN节点应用。内嵌支持LIN协议的增强型SCI模块及SPI模块,4通道16位计数器,出色的低功耗特性,带有中断唤醒功能的I/O,实现唤醒休眠系统的功能;拥有8通道PWM,易于实现电机控制。作为专业的汽车电子控制芯片,能够更加适应智能控制。
本系统采用的线性CCD图像采集传感器TSL1401-DK是岱默科技公司生产的一款具有128个有效像素点的线性CCD,尺寸为26mm×26mm,重量轻,可以直接任意系列MCU相连接进行数据采集处理。TSL1401-DK有2个电源口,3个数据口;数据口直接与MCU的I/O口相接。
赛道为450mm宽的白色KT板,两边有各宽15mm的边界,赛道外为蓝色的底版。环境光源的变化对CCD数据的采集有十分大的影响,所以需要使用软件技术对采集到的数据进行二值化处理,使其明确路况信息,不至于出现判断紊乱而小车失控的现象。本次设计的小车CCD的数据采集距离前瞻为70cm,通过排列成一条线的128个有效像素点的数值信息判别前方道路的信息。单个像素点数值的变化范围为0-255。根据实际外界光照情况,实际采集白色的底板时数值为110左右,黑色边界的数值为40左右。通过阈值处理,区分赛道和边界。由于小车在前进的过程中,光线强度在随时变化,采集数据也在变化,就需要对白色和黑色对应的电压值进行特殊处理,这样就增强了小车对赛道的适应性。
舵机主要用来控制单片机的PWM模块,通过调节脉冲的宽度和周期来控制舵机和电机的工作。通过输入占空比一定的脉冲,内部电机将转过一个固定的角度,所以要让舵机转到某一个位置,只需要改变脉冲的占空比就可以实现舵机在一定角度内的任意转动。
智能小车采用RS-540SH直流电机,由于单片机输出电流不够,驱动能力不足,电机的反向电动势也会损坏单片机,所以必须添加电机驱动模块。本设计采用大功率MOS管IRF4905和IRF3205搭成H桥驱动电机。
电机转速的控制通过调节PWM的占空比来实现,采用定频调宽法,PWM波形频率固定,占空比跟随速度变化调节。
智能小车的优点在于能够根据路况的改变和自动实现转弯等功能,这就对软件程序的设计要求很高。本设计采用CodeWarrior编程软件进行程序编写,并通过串口总线下载到单片机中,进行参数修改与调试。系统软件流程图如图2所示。
图2 系统软件流程图
void GetPixel01()
{
unsigned char ii;
Init_Black=0;
L1=L2=Z0=R1=R2=0;
AverageValueold=Pixelaverage(Pixel);
for(ii=0;ii<128;ii++)
{
if(Pixel[ii]>AverageValueold)
{
Pixel01[ii]=1;
}else
Pixel01[ii]=0;
}
L1=Pixel[9]+Pixel[10]+Pixel[11]+Pixel[12]+Pixel[13];
L1=L1/5;
L2=Pixel[39]+Pixel[40]+Pixel[41]+Pixel[42]+Pixel[38];
L2=L2/5;
Z0=Pixel[62]+Pixel[61]+Pixel[63]+Pixel[60]+Pixel[64];
Z0=Z0/5;
R1=Pixel[92]+Pixel[91]+Pixel[93]+Pixel[90]+Pixel[94];
R1=R1/5;
R2=Pixel[115]+Pixel[116]+Pixel[117]+Pixel[118]+Pixel[119];
R2=R2/5;
void SpeedCtrol(void)
{
int SKP,KI,KD;
static int ek1=0,ek2=0;
angle_erro=8970-angle_Old;
angle_erro=abs(angle_erro);
ExpectSpeed=MAX_speed-angle_erro;
//if(ExpectSpeed<250)
//ExpectSpeed=250;
ek0=ExpectSpeed-puls_num;
ek1=ek0;
ek2=ek1;
if(ek0>50) //加速,启动
{
SKP=20000;
KI=0;
KD=0;
}
else if(ek0>=0) //加速 PID 参数
{
SKP=1000;
KI=120;
KD=250;
}
else //减速PID参数
{
SKP=800;
KI=100;
KD=200;
}
car_speed=25000+SKP*ek0+KI*(ek0-ek1)+KD*(ek0-2*ek1+ek2);
if(car_speed>25000)
car_speed=25000;
if(car_speed<0)
car_speed=0;
(void)PWM9_SetRatio16(car_speed);
}
本设计分别进行了CCD传感器信号采集处理模块设计、动力电机驱动模块设计、控制算法的编制及执行和调试、舵机控制设计与安装。通过系统硬件平台搭建和软件设计,并反复调试,该智能循迹小车基本达到了设计要求,能够实现快速直行,最高速度可达4m/s,能够比较平稳地度过大S弯、小S弯、连续S弯、Ω弯道、十字、坡道等复杂路况,平均速度可以达到3.5m/s。智能小车的设计与开发,对于推动汽车工业的发展具有一定的现实意义和实用价值。
[1]赵万欣,陈思屹.基于TSL1401线性CCD的智能巡线小车[J].工业控制计算机,2014,27(2):121-122.
[2]李孟桃.基于线性TSL1401CCD的直立智能小车设计[J].电子设计工程,2013,21(21):86-88.
[3]鲁小雨.基于MC9S12XS128单片机的智能小车控制系统设计与实现[J].成都大学学报,2011,30(3):164-247,273.
[4]蔡述庭.“飞思卡尔”杯智能汽车竞赛设计与实践[M].北京:北京航空航天大学出版社,2012.
[5]韩建文.基于飞思卡尔单片机智能车的设计[J].电子制作,2014(1):59-60.
[6]郭玉龙,于永会,何志琴.基于 MC9S12XS128的直立轮式智能小车设计[J].现代机械,2013(5):31-34.