杨佳义
(重庆移通学院智能工程学院,重庆 401520)
自动循迹小车是智能行走机器人的一个分支,其具备环境感知能力和对不同道路状况的决策能力[1],这使得循迹小车能够应用于各种道路场景。设计的难点在于循迹算法的可靠性和轨迹运行,循迹基于传感器的数据,而轨迹调试需要精确行驶距离和时间[2]。智能汽车的自动循迹控制是自动驾驶系统研究的关键[3],笔者基于全国大学生智能汽车竞赛提供的B型小车模型设计自动循迹控制系统[4]。
采用MC9S12XS128MA单片机作为主控MCU,系统由单片机电路、电机驱动模块、编码器、开关电源电路、线性稳压电路和传感器模块组成[5]。采用编码器对电机速度进行检测,结合增量式PID算法对车速实现闭环调节控制[6],红外传感器检测道路中的障碍信息[7],利用摄像头、电磁感应和运放电路来检测道路信息,依据传感器信号特征完成对转向舵机和电机的控制。控制系统硬件框图如图1所示。
图1 硬件设计图
摄像头采集道路信息传送给单片机[8],电磁传感器处理断路的道路情况,结合红外传感器识别障碍物,采用霍尔元件HAL145检测起跑线,提高道路识别的可靠性。采用双BTS7960构成的全桥电路驱动电机RS540,编码器测试电机的转速把小车运行速度反馈给主控制器,实现智能车闭环控制。
直接电源电压供电纹波大,偶尔会出现毛刺现象,这将会对单片机系统的工作造成不良的影响[9],设计采用稳压芯片TPS7350,输出固定且稳定的5 V直流电源,为单片机、蜂鸣器、霍尔元件和编码器供电,5 V稳压供电电路如图2所示。舵机工作时电流相对较大,为了加大爬电距离,舵机供电在PCB上的走线与其他线路要有充分绝缘距离,且舵机电路可能会对传感器等电路产生干扰,因此PCB布线充分考虑EMC(Electro Magnetic Compatibility)。舵机作为整车主要负载之一,供电电源需要稳定高效,为避免舵机电流影响其他低压传感器的工作,综合考虑采用MP1584EN开关电源产生5.5 V电源为舵机S-D5单独供电,供电电路如图3所示。
图2 稳压5 V供电模块
图3 舵机MP1584EN开关电源电路
智能汽车系统中的电机是动力源,直流电机运行电流较大、干扰较多,小车采用调压控制电机运行速度,因此选择高效、可靠、可控的驱动电路及方式至关重要。设计采用74HC244D驱动放大,结合两个BTS7960芯片,构成全桥电机驱动电路,驱动电路如图4所示。采用集成芯片,电路简单,并且专用栅极驱动芯片所具有的硬件保护、过流保护等功能可以提高电路工作的可靠性。供电电压应用PWM(Pulse Width Modulation)技术调节占空比实现,可以降低功率损耗,提高效率。
图4 电机全桥驱动原理图
为防止BTS7960存在高温烧毁的风险,本次驱动设计采用直插封装的芯片,同时外加大散热片,散热片以铝合金制成,降低材料重量的同时增强了散热效率,再以硅脂填充芯片与散热器的间隙进一步增加散热效率。小车运行时,流动的空气经过散热片带走部分热量,降低发热的程度。
小车运行速度通过编码器检测反馈,编码器在电机的带动下输出连续的脉冲,电机转速越高,编码器输出脉冲频率越高,通过在固定的时间段内对脉冲进行计数,计算判断当前的车速,编码器接线电路如图5所示。
图5 编码器电路
辅助调试电路能方便观察智能车参数,实时了解小车状态,配合使用调试开关、拨码开关切换调试功能。采用LED显示屏显示PWM占空比、运行电流等,设计采用拨码开关来开启或屏蔽系统某些功能,如开启或屏蔽起跑线,设置系统速度基值及对应的关键参数,是否屏蔽环岛,是否开启碰撞停车以及是否屏蔽测距传感器等相关功能。调试按键电路实现某些功能,如系统部分运行参数设置,相关传感器数据显示,相关变量数值设定,赛道元素设置等功能。本系统设计了8个拨码开关和5个调试按键用于系统调试。无论是硬件设计、软件编写,还是在实际场合的应用,往往会出现没有考虑到的错误,因此设计了蜂鸣器报警电路,方便出现异常情况时排查故障。
系统控制在MCU上电之后初始化芯片内核和所需的外设模块,循环采集传感器数据并执行循迹任务,软件控制流程如图6所示。初始化模块包括系统时钟、定时器、中断优先级、IO口、PWM控制和A/D转换的初始化,为了提高处理速度,使用XS128单片机锁相环倍频设置系统时钟为80 MHz,设计定时器1为5 ms中断,作为速度控制、碰撞停车、起跑线检测的中断控制。执行循迹任务首先判断是否偏离道路,通过摄像头采集道路左右边线计算左右偏差,由偏差值识别道路元素,判断是直道、弯道、环岛、十字路口或者断路情况,不同的道路元素设定不同的转向速度和角度,结合红外传感器检测障碍物执行避障程序。应用PWM技术调节占空比控制电机的运行速度,反馈计算前进速度和左右电机转弯前进的差速值,使用PID算法实时控制调节,提高控制精度。当霍尔元件检测到终点线磁铁时,执行外部中断停车控制。
图6 软件控制流程图
小车行进的动力采用RS540型号的有刷直流电机,电机两端的平均电压与电机转速成正比,设计采用脉冲宽度调制供电电压实现小车的速度控制。通过改变PWM占空比控制电机端平均电压,达到调速的目的[10],PWM初始化程序如下:
四个时钟源A、SA、B、SB中选择SA、SB作为PWM输出通道的时钟源,将PWM输出通道设置为左对齐先输出高电平然后翻转的模式。通过PWMSCLA寄存器设置时钟SA,其计算公式为:Clock SA=Clock A/(2*PWMSCLA),时钟Clock A的频率为80 MHz,可得Clock SA=40 MHz,同理可得Clock SB=2 MHz。由于电机PWM工作频率为20 kHz,舵机PWM工作频率为100 Hz,所以需将两个PWM通道级联,设置PWMCTL寄存器将所有PWM输出通道两两串联,令周期寄存器的值分别为PWMPER45=2 000、PWMPER67=20 000。PWMxx频率计算公式为:PWMxx频率=通道时钟/PWMPERxx。小车的初始速度为0,将小车初始化占空比为0,测得舵机位于中点处的占空比为2 970,最后使能PWM通道。在控制系统中对PWMDTYxx占空比寄存器直接赋值,就能控制小车的速度与转向。
算法程序中的参数受小车结构、传感器和控制精度的影响,通过仿真得到的参数只能作为参考值。控制系统通过现场调试获得优化参数。采集实际参数配合上位机串口监控程序,实时显示程序运行过程中各个数据变化过程,辅助计算待定参数,确定参数的优化数值。
舵机参数调试通过实际小车的运行姿态来判断参数的范围。小车舵机控制算法采用PD控制,逐渐增大比例增益P,直至小车运行过程中出现振荡现象,再反过来,逐步减小比例增益P,直至振荡消失,记录此时的比例增益P,设定PD的比例增益P为当前值的60%~70%。微分控制可以提高小车的预调节能力,将参数D的调节与循迹小车的弯道处理能力结合起来优化微分参数D。
避障轨迹调试通过对距离的精准采集,保证小车无论以何种速度执行避障程序,都能够恰好越过障碍物,回到设定轨迹。通过推动小车行驶10 cm记录编码器反馈脉冲数,多次测试后确定小车行驶10 cm脉冲计数650次,将舵机摆动幅度与小车运动轨迹结合确定舵机PWM脉冲宽度输出。
笔者设计了基于单片机MC9S12XS128MA的自动循迹小车的控制系统,应用code warrior开发调试,结合路况实现稳定车速、环岛处理、避障轨迹设计和数据滤波,能够保证小车稳定快速地跑完全程。通过对小车进行多次运行调试,优化算法和整定参数,应对不同外部环境小车能作出相应的控制决策,实现小车的自动循迹控制。