低成本8位单片机控制的光电寻迹智能车
3.2 小车行驶状态确定
该系统采用的赛道为宽为50 cm,中心线为25 mm的赛道,传感器在黑色上读取为1,在白色上读取为0,赛道外地板使用传感器有可能读1,也有可能读0。激光传感器终采用“一”字型排布方式,相邻的两个传感器的距离为20 mm。赛道如图5所示。
传感器在赛道上可能的状态可分为:在普通的赛道处、在十字交叉线处,还有跑出赛道。系统定义了变量Car_State来代表小车当前的状态,可能会出现的情况如下:
1)当小车在赛道上时,将会有1到2个传感器输出高电平,如果有两个传感器同时打到黑点,而两个传感器并不是相邻的则认为是干扰信号,不作特别处理,其他按照如图6的传感器排布方法计算坐标从左向右依次为-13到13,此时Car_State计为传感器打到的坐标;
2)打到10个以上黑点计为交叉线,Car_State计为20;
3)没有打到黑点则认为小车即将跑出赛道,Car_State计为30;
4)另外还有一种情况传感器已经打到了赛道之外,而打到赛道外的传感器可能输出高电平,也有可能输出低电平,此时有可能读出的情况可能会判定为第一种,如图5示意,此时小车本应继续左拐,但是判读位第一种情况,就可能右拐,这种情况的判定就不能仅仅依靠读传感器来判定,还应考虑小车前面行进的趋势加以判别。因为此种情况一般只出现在小车转大弯时,由于转角不够当小车的传感器会打到相反方向的赛道外,所以左转或者右转的角度超过某一特定值时(如60°),应当屏蔽另一侧的传感器,只读转向该侧的传感器,如图5小车现转左侧大弯,右侧传感器检测到错误黑点,此时只要将右侧的7个传感器屏蔽,只读左侧传感器数值即可,此种情况Car_State计为40。
3.3 舵机控制
小车在赛道上:Car_State为-13到13间的整数,由于光电管数量少,造成传感器返回值离散度过大,不适合进行回控,故应加快采样速率,进行过采样,再进行一阶迭代滤波:
PVal=((Car_State×1 000)+(Pvalx10))/11;
小车行使5 ms后位置的偏差进行迭代滤波:
Err=((PVal-PVal1)+(Errx10))/11;//两次位置偏差
P_Offset=Err/P_err; //负值左偏 正值右偏
if(P_Offset-5)P_Offset=-5; //左偏最大偏离为-5个单位
if(P_Offset>5)P_Offset=5; //右偏最大偏离为5个单位
将Err进行采样划分得到P_Offset变量,P_Offset取值为-5到5的整数,负数表示向左偏,正数表示向右偏,绝对值越大代表偏转角度越大;采样分辨率为可调参数P_err,P_err偏大时,小车反应会较为迟钝,P_err偏小时,小车反应会较为灵敏,容易出现很小偏差就会引起小车较大的转向。
按照小车当前的位置以及P_Offset组织数据表Angle_Table[],该表共有27行11列,第n行m列元素j,表示小车位置Car_State为n-13偏差P_Offset为m-5时,j的值在-10到10之间,负值代表向左转,正值代表向右转,小车舵机应打的角度为jxAngle_C,可调参数Angle_C可以根据赛道状况舵机反应灵敏度等调节,其调节在调试程序中完成,其值愈大,同等情况下转角越大。
舵机的控制就是通过查数据表Angle_Table来实现,而不是通过公式求解,这种方法比较适用于8位单片机,通过检索表可以达到运算所达不到的系统速度。
小车在交叉线时Car_State=20不更改舵机的控制;当小车的传感器打不到黑点,即将跑出赛道活着已经打到赛道外时Car_State=30或40,此时按照小车转的方向,将舵机设置为最大转角,以达到尽快找到赛道黑线的目的。
舵机的输出PWM采用5 ms周期,与小车传感器采样的频率一致。
4 试验结果及总结
通过上述方法,小车取得了比较好的试验结果,在最小曲率半径不小于50 cm的赛道上,小车可以取得每秒2 m以上的速度。其速度比采用16位单片机的系统没有很大差异。要特别注意的是,运算时采用不同数据类型的变量将会带来不同的效果,经实验证明,如果可以使用字节存储类型的变量作双字节变量存储,将会严重影响小车的运行情况,这是由单片机编译环境进行数学运算引起的,应当尽量避免不恰当的变量定义及算数运算。
相较于当前流行的16位单片机控制的双舵机智能车,该系统在硬件上成本较低,而软件也根据8位单片机的特点,避开了较为复杂的运算,采用了查表的方式,只在小车位置及偏差运算以及速度P算法中涉及了少量的数学运算,以此达到系统的快速响应。
- 基于DSP的智能刹车控制系统研究(07-29)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)
- 五大主流智能手机操作系统的前世今生(03-02)
- 基于VxWorks的MB系列智能可编程控制器设计(01-16)
- 基于TMS320F2812的智能变送器(04-08)
- 利用低成本的MCU的UART驱动智能卡(05-04)