赵爽+严屹宏+黄峥+林耿植+李团+王超
[摘 要]本设计以2016年第十一届恩智浦杯智能车大赛为背景,自主设计车模的硬件结构,独自构思控制策略和算法结构,以恩智浦公司生产的32位Kinetis系列单片机作为核心处理器,硬件上采用MOS管驱动电机,传感器上采用数字陀螺仪和数字加速度计综合检测车模的平衡角度,用编码器反馈速度信息,采用电磁传感器来检测赛道位置信息和检测采用红外传感器检测障碍物起,并使用蓝牙、无线、液晶辅助调试,以PID控制作为控制电机的主要算法原理,最终控制车模达到在赛道上稳定直立行走并且遇到障碍能减速制动的效果。
[关键词]k66微处理器,红外传感器,两轮电磁平衡车
中图分类号:TV76 文献标识码:A 文章编号:1009-914X(2017)06-0140-02
0.引言
近年來,国内外有很多关于两轮自平衡车的研究,甚至已经生产出相应的代步产品。随着现代科技的发展,对于自平衡的车身响应速度和姿态控制精确度提出了更高的要求。与此同时,两轮自平衡直立车的智能化也是当前研究的另一大热点。如何更好地在无人操控的基础上实现这种平衡车的控制。可以说这体现了多学科领域的交叉和综合,也是未来发展的趋势。[1]
两轮自平衡小车是一个高度不稳定两轮机器人,是一种多变量、非线性、绝对不稳定的系统,是检验各种控制能力的典型装置。通过推导出小车自平衡条件,计算最大可控角度,并得到可控角度与路面摩擦因数间的关系。作者对可控角度的推导,为系统数学建模和平衡控制的实现提供了重要的理论数据和理论依据。[2]
自平衡系统是一种两轮左右平行布置结构类似于传统的倒立摆与蹊跷板平衡系统其本身是一个自然不稳定体同时两轮自平衡车在姿态控制过程中,物理支撑部位直接与自然地面接触。这与一般的一级倒立摆运行在经过加工的导轨上不同,虽然二者动力学模型类似,但是其控制过程中受到的干扰因素更丰富,因此两轮自平衡小车是研究各种控制算法性能的理想平台。[3][4]
1.硬件设计
本文所设计的平衡车,选用了NXP公司Kinetis K 系列中的MK66FX1M0VLQ18。Kinetis K系列MCU基于ARM Cortex-M4F内核,其适合需要高存储器密度、低功耗和高处理效率的应用。使用的姿态传感器为NXP公司最新的FXAS21002 系列3轴陀螺仪与MMA8452Q三轴、电容式微机械加速度传感器加速度传感器,其都具备超低功耗和先进的嵌入式特性,特别适合应用在增强运动控制等应用。故大大提高了平衡车控制的系统稳定性及实时性,而在红外传感器上选用了E18-D80NK-N红外传感器,这款传感器最远可以检测80厘米距离的问题,该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、流水线计件等众多场合。[5]
整个系统的核心控制采用NXP的MK66FX1M0VLQ18型号单片机, MK66FX1M0VLQ18 是Kinetis系列双高速和全速USB,2MB闪存微控制器,基于ARM Cortex-M4内核的K66 微控制器主频180M,144LQFP封装,适合需要高存储器密度、低功耗和高处理效率的应用。该微控制器提供高速USB,带集成高速USB物理收发器、SDRAM控制器、全速无晶体USB支持等功能,其多达32通道的DMA用于外设和存储器,可以降低CPU负载,实现更快的系统吞吐功能。在本次平衡车设计中,使用了MK66单片机的GPIO,PIT,UART,IIC,FTM,DMA等外设。[6]
控制流程图为(图1):
由于平衡车需要保持直立状态运行,运行时对车模的重心要求比较高,为了能够充分降低车模的重心,将主板和电机驱动电路做成一块PCB是最佳方案,[7]主板电路图如图2。
2.系统软件设计
2.1 直立控制
平衡车姿态控制由直立环、速度环和方向环三个闭环构成,其相互影响,并相互制约。车模直立控制采用 PD 控制,由加速度计和陀螺仪模块采集数据通过互补滤波算法运算得出,配合PD 控制使得平衡车保持直时立状态。
互补滤波算法可以将获得的加速度数据与陀螺仪数据积分后得到的角度进行对比校正,通过对比积分所得到的角度和重力加速度所得到的角度,使用它们之间的偏差改变角度的输出,从而积分后的角度逐步跟踪到加速度传感器所得到的角度,从而保证实时性,图为互补滤波后得到的角度信号(图3)。
部分程序程序:
void AngleCalculate(void)
{ F4 lnDeltaValue=0;
lnDeltaValue = ACC_MMA8451_Z;
if(CarControlFlag == 0)//起跑直立
lnDeltaValue = lnDeltaValue +Z_ZERO;
else
lnDeltaValue = lnDeltaValue - CV_ACCE_Z_ZERO;
g_nCarAcceVal = lnDeltaValue *CV_ACCE_RATIO;
g_nCarAcce=(int)g_nCarAcceVal*10000 ;
g_nCar_Acce=g_nCarAcce/100000;
if(g_nCarAcceVal> CV_ACCE_Z_SET_MAX) //防止加速度溢出
g_nCarAcceVal = CV_ACCE_Z_SET_MAX;
if(g_nCarAcceVal< CV_ACCE_Z_SET_MIN)//防止加速度溢出
g_nCarAcceVal = CV_ACCE_Z_SET_MIN;
lnDeltaValue = Gyro_FXAS21002_X;
lnDeltaValue = lnDeltaValue-CV_GYRO_ZERO ;
g_nCarGyroVal = lnDeltaValue *CAR_GYRO_RATIO ;
g_nCarAngle = g_lnCarAngleSigma/AngleSigmaTime;
lnDeltaValue = g_nCarAcceVal - g_nCarAngle;
lnDeltaValue = lnDeltaValue /TIME_CONSTANT;
g_lnCarAngleSigma += (g_nCarGyroVal+ lnDeltaValue);
Angle=(int)g_nCarAngle*100000; //text
Angle_a=Angle/100000;//text
Angle_aa=Angle_a;//text
}
对于一个类似倒立摆的平衡系统,在获取相应的角度后,要使它始终处在平衡位置需要两个力,一个是回到原点的回复力,另一个则是使它停下来的粘斥力,类似单摆,我们使用角度值和角速度值进行位置式 PD 控制可使小车稳定的直立。
2.2 方向控制
平衡车方向控制通过路径识别算法进行控制,通过使用了动态 PD 控制做车模方向控制,为了防止因外部因素导致的信号干扰,采用了中值滤波器对AD采样值进行滤波。每5ms采集10次AD值,取其中值作为该控制周期的采样值,寻迹部分主要依靠算法提取出车子与赛道的偏移量得到一个误差,然后将这个误差送给控制器运算处理,最后控制器输出PWM信号控制双电机来纠正车子的姿态。
其中,在转向控制算法中,应用了归一化算法,使得控制更加精准,平稳。归一化是一种简化计算的方式,即将有量纲的表达式,经过变换,化为无量纲的表达式,成为标量。在此系统中,程序如图4:
其中g_LeftVoltage表示左侧传感器经过归一化得到的数据;LeftVoltage为左侧传感器采集的实际电压值;g_Left_min代表左侧传感器归一化数据范围的最小值;g_Left_max为左侧传感器归一化数据范围的最大值。
g_RightVoltage表示右侧传感器经过归一化得到的数据;RightVoltage为右侧传感器采集的实际电压值;g_Right_min代表右侧传感器归一化数据范围的最小值;g_Right_max为右侧传感器归一化数据范围的最大值。
2.3 停车减速
平衡车停车控制通过外部中断进行控制,通过使用红外传感器检测是否有障碍物,进而算法进行判断,当遇到障碍物的是否,红外传感器的输出会有电平变化,通过GPIO引脚产生系统中断实现快速响应,由于设置该GPIO引脚组优先级最高,在cortex内核中,优先级最高优先级高的中断可以打断正在执行的低组优先级的中断,相同组优先级的中断不能相互打断,如果有两个相同组优先级的中断在等待执行,那么并不是先来的先执行,而是高优先级的中断先执行。进而使速度环速度控制目标置零,从而实现快速减速停车。
2.4 电机输出
最终电机输出部分程序为(图5):
3.总结
本文通过从硬件设计,软件设计两个主要方面对基于红外传感器的自主避障智能车进行开发论述。本系统根据红外传感器采集的数据通过单片机来控制小车的运行情况。经过长期的实验,对PID參数地不断调节,小车可以在存在导线的任何工况情况下正常运行,系统稳定性良好,达到目标要求。
参考文献
[1] 徐光宪,高念.两轮直立代步平衡车的设计与实现[J],计算机应用于软件,2016,33(2).
[2] 程刚,屈胜利,刘学超.俩轮子平衡小车可控角度的推导研究[J],机床与液压,2009,37(5).
[3] 朱建华.智能循迹小车设计[J],廊坊学院学报,2015,15(6).
[4] 杨慧.自平衡两轮移动机器人的设计[D],苏州大学,2012.
[5] 张俊溪,杨亚萍.基于红外传感器智能车的设计与实现[J],西安航空技术高等专科学校学报,2012,30(1).
[6] 侯代坡.两轮直立电磁导航智能车的研究与实现[D],兰州理工大学机电工程学院,2013.
[7] 林得志,刘志更.关于电磁智能车电路设计[J]科技信息,2014,11.