詹汉彬,王 憬,樊浩然,杨青胜
(湖北师范大学 电气工程与自动化学院,黄石 435002)
自主循迹智能车是利用传感器信号进行自主导航的小车,自主导航小车无需人为操作,但需人员进行维护,其维护难点在于如何准确获取道路信息、判断路况、对当前路况做出正确且精准的反应及如何使整个运动过程更加平稳顺滑。其中电感采集模块类似于智能车的眼睛,小车通过电感采集模块获取道路信息,通过软硬件相结合的滤波方式提高采集信息的准确性,根据不同路径电感值的差异判断赛道状况;单片机获取赛道信息后针对不同路况与特殊元素分别对电机和舵机做出相应的控制,在必要时刻调整电感值,最终实现智能车的自主导航功能。
电磁智能车系统硬件可分为MCU 最小系统、电源系统、传感器系统、人机交互系统、驱动系统。结合较为详细的硬件模块,其系统整体结构设计如图1 所示。
图1 智能车系统硬件结构设计图Fig.1 Intelligent vehicle system hardware structure design
MCU 是微处理器的简称,其作用类似于人的大脑,担任着整个智能车的信息处理及控制协调作用,因此其他硬件系统都会与MCU 相连。本文选用CH32V307 微控制器,该MCU 是基于32 位RISC-V设计的工业级通用增强型微控制器,有多种指令集组合快速可编程中断控制器加硬件中断堆栈,最高144 MHz 系统主频,64 KB SRAM,3.3 V 低功耗供电,可接入16 路外部信号加2 路内部信号通道,拥有多组定时器、通讯接口及GPIO,可胜任智能车系统的控制任务[1]。
电源是智能车工作的基础,镍镉电池可多次充放电,不仅内阻小,放电时电压的变化也很小,因此对于需要稳定电压输入的智能车系统来说是一种较为理想的直流电源,其电压有7.2 V,但由于智能车各个模块工作所需的额定电压不同,因此需通过降压芯片(SP1N28STER)转换为稳定的5 V 电源供给主板电路,随后再次降压(PT9013-33)至3.3 V 供给MCU 最小系统[2]。
传感器系统是智能车实现“智能”的根本保障,不同于其他循迹原理,电磁车主要通过LC 并联谐振电路采集路径上的电磁波信号,随后通过运放处理获取赛道信息。而车速的获取是与电机相啮合的编码器,通过平行轴齿轮传动得到,其中编码器齿轮旋转时会产生与车速相关的脉冲,当脉冲传入MCU中被捕获时即可获取当前车速。
人机交互系统可极大地方便调试人员对智能车参数的获取和循迹过程的调试,主要的人机交互系统由蜂鸣器、IPS 屏幕、按键、拨码开关、蓝牙模块及下载调试器组成。其中蜂鸣器可用于智能车行驶过程中元素或预设条件的判断、IPS 屏幕方便对多个参数的查看、按键及拨码开关可选择智能车工作模式的切换以及简单调参,蓝牙模块可方便调试及通信,下载调试器主要完成程序的下载及寄存器查看等功能。
驱动系统是控制智能车运动的核心部分,驱动系统主要由电机、电机驱动电路、舵机驱动部分组成,电机采用RS-380 直流电机,该电机价格低、控制方便,采用H 桥方式进行驱动,主要原理是通过控制开关管的导通与关断来实现电机供电电压的改变进而控制电机速度,而舵机驱动则通过给信号脚端不同的占空比从而使舵机打角进而控制小车方向[3]。
该智能车系统以CH32V307 微控制器为核心控制单元,采用LC 并联谐振电路采集赛道信息进行滤波、差比和差计算对称电感的差值从而分辨赛道电磁信息,在获取赛道信息后对针对不同的赛道类型采用不同的PID 参数,在转向时利用阿克曼转向原理对电机进行差速控制,同时利用偏差的PD控制算法,控制舵机打角进行转向。针对不同的电感采集值及特殊元素分别设置不同的速度目标值,以提高智能车适应性及稳定性。通过增量式PID 算法实现智能车的电机速度控制。电磁智能车软件系统主要由电感值处理、赛道类型判断、方向控制、速度控制4 个部分组成。通过各个部分相结合,最终完善整个智能车系统的控制。
由于赛道信号发生器输出20 kHz 等效100 mA正弦波信号的同时也夹杂着许多噪音,会阻碍电磁车的信号获取,因此采用LC 并联谐振电路的硬件提高信噪比从而获取更加有效的电磁信号值[4],随后通过运放进行信号放大传输至MCU 进行软件滤波处理。
通常软件滤波由中值平均滤波算法完成,中值平均滤波是对连续采样10 次的电感值去最大值和最小值,最后算术平均得到结果,该方法结合了中值法和算数平均法,可消除偶然出现的异常电感值并减少采样值的偏差。完成滤波后的数据如果直接使用会导致许多调试问题以及稳定性问题,因此采用控制算法进行二次处理,常见的处理算法有归一化处理、差比和差算法等组合,其中归一化处理是为了提高智能车对赛道的适应能力,虽然不同场地的电感信号值不同,但所采集的电感有普遍线性关系,因此经过归一化处理,可以将电感值限制在0~100,使得小车在不同的赛道上的适应能力更加稳定。
赛道类型的识别主要利用电磁感应原理,即垂直与电磁线的LC 并联谐振电路产生感应电动势,且电动势随着电感与电磁线的垂直距离而变化。通过采集到的电动势变化并对比来确定,具体到每个类型就根据电感排布方式及电感数来确定。在此以4 路电感为例说明赛道的类型识别,针对电感排布方式及相关赛道(图2)中4 种类型进行说明。
图2 电感排布方式及赛道类型Fig.2 Inductance arrangement and track type
图2(a)为双一字排布的直道状况,此方案双一字电感都垂直于漆包线,因此当L 与R 两端电感值较大且相等时位于赛道正中间,当L 电感值较大R电感值较小时漆包线距离L 端较近,此时智能车位于赛道右侧,需要向左调整,重回赛道中央。
图2(b)为双一字排布弯道状况,此方案双一字电感不垂直于漆包线,因此对弯道的检测性较差,只能分辨出弯道的大致方向,无法精确调整智能车于赛道中央顺利通过弯道而不冲出赛道,对此采用双八字排布可有效区分弯道类型。
图2(c)为双八字排布弯道状况,在小车过弯时L 电感垂直于弯道切线,会采集到较大的电感值,而R 电感平行于弯道切线,采集到的电感值较小,因此通过L、R 电感值的对比很容易区分出弯道类型,对于右弯道同理R 电感值较小,L 电感值较大,而直道时双八字电感关于漆包线对称,其采集值对比同样可辅助直道的正常行驶。为了准确区分赛道类型,两者并用效果更优。
图2(d)为最终电感排布状况,此方案由于一字排布在内,八字排布在外,可较为准确地确定赛道的类型并提供准确行驶误差信息,便于后续方向控制与电机控制。
赛道类型识别完成后为了让小车能够在赛道上正常行驶,至少需要使用左、右2 个电感,通过ADC 采集经过运放处理的感应电动势值来计算偏差,最简单的方案是直接计算左右对称的2 个电感采集值之差来获取当前赛道信息,根据差值与小车赛道中央采集的电感值乘一定比例关系作用到舵机,通过PWM 占空比输出控制舵机打角,从而控制小车的转向行驶。其中差比和差算法相比于差比和算法有着更加优良的鲁棒性,该算法结合图2(d)中电感的排布具体公式如下:
式中:L′、L、R、R′分别对应左斜电感、左电感、右电感与右斜电感;A、B、C 均为可调参数;P 为比例系数。该算法最终得到的特征值为小车距离中线的偏差,有了偏差后将其作为控制系统的输入量从而对其进行转向控制。在此采用最经典的智能车控制算法之一的PID 进行控制,由于方向环中引起系统震荡的原因主要为舵机的机械结构导致其存在延迟积分环节,加入积分环节后会进一步加重系统的震荡,因此将其作为方向环位置式PD 控制的输入参量,位置式PID 公式为
式中:Angle 为角度环输出结果;Kp、Ki、Kd为PID 的3 个参数,由于是位置式PD,因此Ki参数为0;Error为实际值与目标值之差简称误差量;Sumerror 为误差量的累加;Error-Lasterror 为实际值与上次误差量之差,可理解为未来误差的预判。在完成一次计算后需要更新数据,将上一次的偏差值更新为本次偏差值从而继续下一次的PID 计算,其主要代码如图3所示。
图3 位置式PID 代码Fig.3 Positional PID code
其中Kp、Kd值需要调试,在调试时,先将Kd值赋0,调整Kp值,使得小车对弯道的反应较为灵敏,能够在弯道中间以及内侧行驶,随后增加Kd值,直至小车能够在直道上平稳行驶且能够顺滑过弯道,但每次速度明显提升时对应的方向PD 参数也会随之改变,因此需要较为稳定的速度控制才能得到完美的舵机PD 参数。
因为小车的实际速度受电压、机械结构、路况、磨损等因素影响,因此小车的实际速度不可能达到目标速度,仅仅是单输入、单输出的开环系统误差会越来越大,因此小车的速度控制部分,主要由MCU、电机、电机驱动及编码器等组成一个完整的PID 系统来进行控制[5]。
由于电磁车大部分是双电机控制小车行驶,因此必须用2 个速度环分别控制2 个电机,虽然是2套速度控制、但在两电机近乎相同的情况下,2 套速度控制的参数都是一致的,否则双电机的调试会十分复杂。电机的速度环一般采用增量式PID,其原因是电机的调控在时间轴上采取保存上一次与上上次历史偏差的结果,并将两者之差作为比例环进行输入,最后输出的结果是需要调整的偏差量,因此增量式PID 的输出结果都需要进行累加才能进行电机的PWM 输出,增量式PID 公式为
式 中:Duty 为增量输出结果;Kp、Ki、Kd为PID 的3个参数;Error 为实际值与目标值之差简称误差量;Lasterror 为上一次的误差;Preerror 为上上次的误差。在完成一次计算后同样需要更新数据,将上一次的偏差值更新为本次偏差值从而继续下一次的PID 计算,但实际调试过程中增量式PID 可能会出现输出过大的情况,因此需要进行限幅处理,其主要代码如图4 所示。
图4 增量式PID 代码Fig.4 Incremental PID code
调试过程类似于位置式PID,Ki的调节需要在完成Kp和Kd后进行。有速度PID 控制后,为了使小车能够及时获取当前速度并及时对速度出现的偏差进行调控,通常将编码器获取车速与电机PID 控制部分写入中断服务函数当中,并根据芯片的性能及程序的执行量来确定周期中断时间,一般选取5 ms左右可满足需求,写入中断服务函数后系统在不同的速度要求下将迅速趋于稳定。
本文从硬件和软件2 个方面论述了以CH32V307型号MUC 为核心控制单元的电磁智能车设计,其中硬件部分详细介绍了整个智能车系统所需模块及主要作用,软件从电感采集值的滤波及处理、赛道类型判断、方向控制及电机控制4 个部分介绍完成智能车所需主要控制内容,其中详细说明了差比和差及PID 算法的原理及应用,经验证,所设计的电磁智能车具有良好的稳定性,可作为大学生智能汽车竞赛的参考方案之一。