吴 楠 ,岳俊伟 ,党 立
(1.湖北汽车工业学院 电气与信息工程学院,湖北 十堰442002;2.湖北汽车工业学院 机械工程系,湖北 十堰442002)
智能小车使用统一提供的模型车、电池、直流电机和舵机,以车模为载体,分为几大模块,包括控制核心模块、电源管理模块、路径识别模块、后轮电机驱动模块、转向舵机以及摇头舵机的控制模块、速度检测模块和串口无线通信模块。每一个模块包括硬件和软件两部分内容,硬件为系统工作提供硬件实体,软件为系统提供控制算法。
硬件是智能车良好运行的基础,硬件设计思路是在保证稳定、可靠的基础上尽可能精简电路。硬件电路主要由电源、中央控制电路、激光传感器、速度传感器、电机驱动等部分组成。
由于条件和规则所限,智能车的动力系统与控制系统共用同一电源。而由于电路中不同模块的工作电压各不相同,因此需要将电池电压转换成各个模块所需电压。
电机加减速过程以及激光、红外发射管导通瞬间伴随的超大电流将拉低电池端电压,严重影响控制系统,尤其是单片机的稳定工作。因此,必须设计可靠的稳压模块,使电池端电压下降到一定水平时,供电依然稳定。智能车采用大电流低压差三端稳压芯片LM1084 IS-5.0将电源电压稳压到5 V后,给以上各部分供电。5 V稳压电路如图1所示。
图1 5 V稳压电路图
由于比赛指定的舵机可以承受7.2 V的电池电压,之前采用过电池直接给舵机供电,尽管能够提高舵机的响应速度和简化电路,但是会烧坏舵机。所以最终确定采用LM1084-ADJ稳压芯片将电源电压稳压到6 V后,给舵机供电。
为了使电机获得更高的速度和更大的调速范围,直接使用电池7.2 V电压驱动电机。
中央控制电路是整个系统的核心,控制器完成主电机控制、寻线响应、舵机转动控制和速度获取等功能。在电路设计上,采取了模块化的设计思想,整个电路由最小系统板和扩展板构成。最小系统板囊括了MC9S12XS128单片机系统的必要组成部分,包括时钟电路、锁相环滤波电路、A/D转换器滤波电路、调试用的LED、电源以及各I/O口接口和BDM调试器接口等。扩展板上规划了小车各个设备的接口电路,包括电机驱动电路、各I/O口的引出线、舵机接口、人机交互电路、测速电路接口以及赛道识别传感器接口。
MC9S12XS128 单 片 机 有 A、B、E、J、M、P、S、T等I/O口,还有一个A/D输入端口。单片机端口资源的分配如表1所示。
表1 单片机端口资源的分配表
激光传感器由发射和接收两部分构成。发射部分由激光管及其驱动电路组成,接收部分由接收管及其滤波电路组成。接收频率为160~200 kHz、波长为500~980 nm、占空比为20%~30%的调制波。因为接收管只对固定频率和占空比的光信号有很高的灵敏度,对于其他的灵敏度很低,所以要给激光管设计调制电路。若采用译码器加三极管的驱动方式,所需单片机I/O口较少,但使用元件较多,PCB板布线不易,也不利于将传感器做小、做轻。因此现在用达林顿管ULN2003A来驱动和调制激光管,由于ULN2003A集成度高,驱动激光管电路比较简单,缺点是所需I/O口较多,可以用多个激光管同时发射的方法来解决。比赛规则规定传感器最多不能超过16个,故不能一个激光管对应一个接收管,通过对历届比赛的总结并结合使用经验,确定使用一个接收管同时接收3个激光管的反射信号。为有效防止距离较近激光管之间的相互干扰,采用分时发射策略,即同一时刻只有部分激光管点亮,这些激光管不对应同一接收管且距离较远。
为控制智能车的速度,必须对车速进行检测。车速检测的方式有多种,如用测速发电机、转角编码盘、反射式光电检测、透射式光电检测和霍尔传感器检测。智能车速度传感器采用的是OMRON公司的光电编码器。该编码器由5~12 V直流供电,每转脉冲数500个,硬件电路简单,且信号采集速度快、精度高,满足了智能车车速控制精度要求。
图2 电机驱动电路原理图
电机驱动模块由2片BTS7960组成H桥正传和反转驱动电机,原理图如图2所示。电机驱动使用BTS7960B芯片驱动电机,BTS7960通态电阻典型值为16 mΩ,驱动电流可达43 A。
由于使用了激光传感器,接收管均为数字量输出,所以信号的采集只需读取相应I/O口状态即可。
智能车采用的激光接收管只对180 kHz的调制光信号有很好的响应,因此发射管的驱动也需要加180 kHz的调制脉冲,上排传感器一共使用了21个发射管,7个接收管,3个发射对应1个接收管,ULN2003共有7路,1路驱动3个发射管。
发射管依次编号,3个同时发射的管子两两相隔 7个, 发射的顺序按照编号依次是 1-4-7-3-6-2-5,这样可以有效避免相邻发射管之间产生的干扰。通过实验,发射管发射100 us以上有较好的接收效果,最终的发射时间确定为200 us。
通过PIT定时中断进行时序控制,200 us中断一次,在第1~7次中断中点亮相应的发射管,在关闭前将对应的接收管的数字信号采集回单片机,放入一个大小为21的数组中,然后在第8次中断时进行赛道信息识别,摇头以及转向2个舵机的控制,速度控制等。
设计的传感器一共有21个发射管,两两之间的间距为20 mm,智能车寻迹的精度要求并不高,但较好的前瞻以及视野范围对小车的寻迹有着很好的帮助。因此安装传感器时也尽可能将传感器的视野范围看的更宽,同时希望传感器能看的更远。
所用传感器能达到的前瞻在60 cm,最终使用的前瞻(按前轮轴算起)大概在45~50 cm,看的宽度达到了35~40 cm,这样即使不摇头也可以达到很好的寻迹效果。
每次发射管驱动完毕,采集接收管的信号,黑线上为1,白色区域为0,集中存储到数组Sensor1[21]中,然后进行赛道识别。
由于传感器看的范围较宽,所以21个管子中会出现很多情况。在不考虑信号出错的情况下,会出现一段黑线(赛道、赛道外)、两段黑线(一条赛道、一段边界),三段黑线(起跑线),多段未知黑线等。为了能够有效滤除一些干扰的黑线段,提取出准确的赛道信息,每次只搜索上次黑线所处地方的附近区域,这样可以有效排除一些干扰信息,但前提是上次的黑线值正确且存在。
打开电源,单片机即开始工作,开始驱动发射管发射,进行赛道信息的初始化,从当前传感器所看到的状态中提取出准确的黑线。
使用500线编码器进行测速,通过XS128中PT7口进行脉冲累加计数,每2.5 ms采集并清零一次,每个采样周期可采集70个左右的脉冲,通过计算传动比及实际测量,得到小车每行驶6 cm将有530个左右的脉冲,因此通过这个数据来判断小车行驶的距离。速度采集时间在10 ms时明显感觉不是很均匀,换成5 ms后电机的声音更加柔和,最终采用2.5 ms达到了很好的控制效果。
对于光电车最难处理的即是坡道,此时传感器会由于坡的不同倾斜导致上排传感器信号出错,如果仅仅是判断为坡的时候舵机保持不动,这样的话就取决于上坡瞬间小车车身的姿态,稍有一点倾斜那么就会在长达2 m的坡上掉下,所以在坡道上必须换另一排可靠的传感器进行寻迹,也就是通过下排传感器来寻迹,这样就不会在坡道上冲出,当然上下排的切换也需要掌握时机,不能在除坡道以外的地方切换到下排,也不能还没下坡正确的找到黑线就切换回上排。
小车上坡时必定经过出错状态,经过出错状态走了6 cm后将重新进行初始化,当发现有多于18个黑点时,判定为坡道。确定为坡道后将下排传感器对应的偏移量反映到PID公式中进行寻迹。
切回上排寻迹需要满足几个条件,首先必须不是出错状态,也就是搜索到了黑线,同时也需要保持不出错状态6 cm才能切换回上排寻迹。
摇头的目的是为了将传感器看的范围加宽,只要黑线一直在传感器看到的范围内,就可以很快的知道黑线的走向变化。
当前传感器发现黑线的偏差为100,那么摇头舵机的目标值为-100,但是在10 ms的控制周期内舵机并不能一次转动到位,那么隔10 ms给一次控制量,根据目标值和实际值之差来决定,若目标值为-100,实际值为0,那么此时就给定一个舵机能够在10 ms内能转动最大转角的控制量,若实际给定已经达到-80,那么就给定一个较小的转角。为了防止舵机抖动,当与目标值相差10时就不给舵机PWM。
转向舵机的控制由2个量来决定,一个是当前摇头舵机的转角,一个是当前传感器看到的黑线所在的位置,即PWMDTY45和Offset1,根据几何计算,摇头舵机的转角对应了传感器本身的一个偏移量,比如摇头舵机转了15.3度,传感器在水平方向就移动了15.75 cm,当然这个也和前瞻有关,经过测算时大概在45~50 cm,最终得到摇头舵机PWM对应的传感器偏移量公式。
Delta_X为摇头舵机转角对应的传感器横向偏移量。根据实际测算和理论计算,误差在2 cm以内。
用Delta_X+Offset1得到黑线和小车的实际位移差 RealOffset。
舵机使用PID控制,为了防止小车在直线上出现震荡情况,采用了二次项配合一次项的公式。公式中的k1、k2、k3为待定系数,可根据实验试凑。
为了达到好的速度控制效果,对速度进行闭环控制。这里所说的速度控制策略是指设定速度的确定方法——设定速度主要由道路与直道的偏差来决定,道路越接近直道,设定速度越高,反之越低。
整个速度控制是由两部分组成的:首先通过PID公式根据偏移量得到给定速度,然后通过给定速度与实际速度之差来给定送给驱动芯片的PWM。
给定速度的计算直接采用PID控制:
Prespeed为给定速度,Standard_Speed为用拨码开关设的小车行驶中的最高速度,也是直线速度,Slowdown是比例系数,根据不同偏移量减去相应的速度,最后是微分部分,为了实时准确反映小车行驶过程中微分量的变化,每3 cm将当前的偏移量存入队列中,然后取最新一次值和之前的某一次值之差作为微分量,即向后差分,这样有利于入弯紧急减速以及出弯加速,更容易将直线上较高的速度降下来,但稳定入弯后又有一定速度的提升,可以实现高速过弯。
实际给定的PWM通过给定速度以及当前测得的速度来给出:
Speed为当前速度,ek为给定速度与当前速度之差,调速需要将现在的速度尽快变成需要的速度。当ek等于0时,给定速度和当前速度相同,需要给一个固定的占空比用以维持当前的车速,因此将正反转的条件以ek是否大于等于-3来区别,这个数据最终通过多次试车观察效果得到,取决于测速精度、采样精度等。
本智能车系统采用飞思卡尔的16位微控制器MC9S12XS128单片机作为核心控制单元。赛车的位置信号由车体前方的激光传感器采集,经XS128MCU处理后,用于赛车的运动控制决策,同时内部Pulse-Width模块发出PWM波,驱动直流电机对智能车进行加速和减速控制,转向舵机对前轮的方向进行控制,使赛车在赛道上能够自主行驶,并以最短的时间最快的速度跑完全程。
本次设计开发的智能车在第五届 “飞思卡尔”杯全国大学生智能汽车竞赛中取得华南赛区第一名和全国一等奖。
[1] 邵贝贝.单片机嵌入式应用的在线开发方法 [M].北京:清华大学出版社,2004.
[2] MC9S12XS128 DATASHEET [K/OL]. [2010-11-08].http://cnpdf.alldatasheet.com/datasheet-pdf/view/310870/FREESCALE/MC9S12XS128.
[3] 陈 宋, 李立国, 黄开胜.智能模型车底盘浅析[J].电子产品世界,2006(6):150-151.
[4]康华光.电子技术基础模拟部分[M].4版.北京:高等教育出版社,1999.