赵龙云
(杭州职业技术学院,浙江 杭州 310018)
基于环境感知、决策规划、自动行驶等多种功能的智能循迹小车具有成本低廉、易于维护等优点,随着科技的发展,越来越多智能化设备广泛应用在多种场合[1]。如化工原料及成品搬运、仪器仪表行业的元器件搬运、印刷出版业的纸张搬运、汽车工业的零部件搬运等,逐渐地改变了我们原有的生产生活方式。本文采用PT550A5C 环保光敏传感器,以STM32F407 作为数据和逻辑处理控制器,创新地设计了以自动循迹为主要功能的小车系统,并搭建实物样机进行试验,验证该方案的可靠性及系统功能的完整性。
如图1 所示,本文所述的基于STM32F407 控制器的智能循迹小车主要由车体、供电系统、主控制器、灰度传感器、OLED 显示屏、电机驱动模块等组成。
图1 系统结构框
本文所述的循迹小车主控制器选用STM32F407 微处理器,车体底板前后端通过传感器支架连接件与传感器支架相连,循迹用的灰度传感器模块安装在传感器支架上,这种外伸的传感器布置方式能让传感器紧贴地面,提高了传感器对光照等外界环境的抗干扰性能,也可以使控制系统提前感知前方路径变化,提高系统的预判性,增加系统稳定性。在车体底板下安装4 个直流电机,由电机驱动器接收STM32F407 处理器发出的PWM 信号,对直流电机进行调速控制。为了保证控制系统的可靠性,在电机驱动端增加光耦隔离器件,起到控制信号隔离的作用,同时分别对左右两侧的电机进行单独的PWM 占空比调速控制,这样的控制方法可以得到左右不同的占空比输出,从而控制左右直流电机达到不同的速度,实现转弯和掉头等动作。
意法半导体研发的STM32F407VGT6 是带有DSP 和FPU 指令的高性能微处理器,具有高达180Mhz 工作频率和浮点运算器,使得处理和运算循迹小车的传感器数据所用时间更短,能够使系统具有更好的实时性和稳定性。
灰度传感器通过控制器的16 个AD 通道将模拟信号转换为数字信号,通过DMA 通道传输,无须经过CPU 进行数据搬运,直接点对点将采集的数据存入数据暂存单元,供循迹算法使用,大大地提高了CPU 的效率,有利于信息数据的高效处理。
循迹传感器采用PT550A5C 光敏二极管,光敏二极管是一种能够将光信号转化为电信号的电子器件,相比于传统的光敏电阻它具有可靠性强、灵敏度高等特点,广泛应用于科学研究和生产设备中[2]。本设计根据光敏二极管的特点和循迹小车的应用场景,设计出由光敏二极管和发光二极管组合的灰度传感器模块,此模块由16 组光电传感器呈“一字型”排布,能够有效地识别路径引导线。
如图2 所示为灰度传感器测试电路,STM32 的AD 通道测量电压范围为0~3.3V,VCC 为3.3V 供电,与控制器的AD 外设电压匹配,D1 为发光二极管,用来给光敏二极管补光,减少外界光线对灰度传感器的影响。D2 为光敏二极管,光敏二极管接收D1照射到白色引导线反射回来的光,当D2 在循迹引导线上时,接收反射回来的光线强,此时A1 处的电压接近0V;当传感器D2没有在循迹引导线上时,接收反射回来的光线弱,此时A1 处的电压接近VCC。利用光敏二极管的这种特性,我们就可以区分出深色地面与白色路线从而进行循迹,如图3 所示。
图2 灰度传感器测试电路
图3 灰度传感器实物
小车的供电电源选用11.1V 的Lipo 电池,Lipo 电池具有很高的放电率同时也具有较轻的重量,提高小车运行效率。
由于电机在运行过程中会对供电系统产生冲击,而单片机与传感器系统工作时又对电源的质量有要求,所以此时应该将电机驱动回路的供电和单片机控制回路的电源进行隔离处理,电机驱动端直接通过电池供电,控制系统通过稳压电路进行降压,稳压电路采用的是LM2596DC-DC 降压芯片,在芯片具有宽压输出、外围电路简单、输出损耗低等优点。稳压电路原理图如图4所示。
图4 稳压电源模块原理
小车采用单边双电机驱动的方式,而传统的L298 电机驱动模块功率较小,不能满足需求,本设计使用半桥驱动器IR2104驱动MOS 管组成H 桥电路,再通过门电路组合,最后使电机驱动器既有L298 类似的灵活控制逻辑,又能够有较大的输出功率[3]。
直流电机在运行过程中,特别是在起停的瞬间会对供电电路产生冲击,轻则为电源引入噪声干扰精密器件,重则会击穿原件、烧毁芯片,对整个系统造成危害。为了防止此类问题的发生,提高系统稳定性,本设计选用华羿微电子生产的80V 200A 大功率MOS 管搭建H 桥电路,同时使用光耦芯片对全部控制信号进行隔离,最大限度对整个系统进行保护。电机驱动模块控制信号逻辑如表1 所示。
表1 电机接口控制逻辑
μC/OS-Ⅱ作为开源的嵌入式实时操作系统具有核心代码可读性强、多任务处理功能完善、实时性好、可裁剪、可固化、源码开放、移植性好的特点[4]。同时,μC/OS-Ⅱ是抢占式的多任务操作系统,各个任务初始化时会被分配唯一且固定的优先级,整个系统以固定周期实时扫描,运行已就绪任务列表中优先级最好的任务。本方案从实现循迹小车的功能入手,针对传感器数据采集、电机闭环控制、循迹路径规划等功能,设计出了既满足基本功能,又兼具程序设计的合理化和可拓展性的调度任务。
本系统采用模块化设计、分层结构,根据高内聚低耦合的程序设计思路,将系统分为驱动层和应用层。驱动层主要包含外设的底层驱动代码,如OLED 的驱动代码、ADC 采样系统资源的初始化、提供电机驱动所需的PWM 信号的定时器配置代码等。应用层主要负责上层应用的逻辑处理、各子任务调度、循迹逻辑的实施等。
针对不同的功能需求,对任务进行合理地划分,可以大大减少编程难度,改善系统的动态响应和稳定性。设计根据系统任务的需求,采用静态优先级设置,将系统任务进行划分,赋予各个任务一定的优先级别。表2 为任务的优先级设置和具体划分功能描述。
表2 任务划分及优先级设置
本设计使用一块0.96 寸双色OLED 显示屏对传感器数据进行实时显示,OLED 属于一种电流型的有机发光器件,是通过载流子的注入和复合而导致发光的现象,发光强度与注入的电流成正比。OLED 具有分辨率高、功耗低等特点,广泛应用于嵌入式设备。对OLED 显示任务的定义是:无须严格的实时性要求,能够在调试阶段将各个传感器数据正确显示即可,所以将OLED数据显示任务的扫描周期设置500ms,优先级是55。
ADC 采集的灰度传感器数据是本设计能够正常运行的基础,如果灰度传感器数据出错或者实时性不好会导致循迹无法正常运行,所以将此任务优先级设置为最高,即任务优先级设置为11。
在ADC 采样任务中,灰度传感器采样数值会受到外界光线干扰和传感器供电噪声的影响,偶尔出现异常数值,为了得到平滑的理想数据,需要对ADC 采集的原始数据进行滤波并进行归一化处理。本设计采用快速滤波算法对传感器数据进行处理,快速中值滤波具有代码简单、效率高等优点,非常适合嵌入式设备使用。利用归一化算法将模-数通道采样的数据范围从0~1023归一化至0~255 之间,将12 位数据转化为8 位数据,减少运算的数据量,提高系统的运算效率,增加系统稳定性。
电机控制任务的主要目的是实时采集编码器返回数据,根据循迹任务要求,对电机转速进行闭环控制,提高系统稳定性。电机速度控制的稳定性决定了循迹系统是否稳定,所以将电机控制任务的优先级设置为仅次于ADC 采样任务的第二高优先级,保证电机转速控制的实时性。循迹小车电机的转速控制采用PID控制中的增量式控制策略,根据单位时间速度传感器反馈的电机速度信息,可以构建基于增量式PID 的速度闭环控制器。ADC采样任务流程如图5 所示。
图5 ADC 采样任务流程
增量式PID 控制算法见式(1)。
ΔU=Kp[e(k)-e(k-1)]K1e(k)+KD[e[k]-2e(k-1)+e(k-2)]。(1)其中:k 为采样序号,在电机转速闭环控制中,增量式PID 控制器的计算需要保存前两次的偏差e(k)-e(k-1),增量输出ΔU 可以直接作为电机控制返回值,因此参数整定和计算都较为方便[5]。
图6 为小车循迹任务流程。循迹任务的扫描周期为10ms,不断对ADC 采样任务处理后的数据进行分析,计算当前小车前进的姿态,将小车与引导线的偏移值反馈给电机控制任务,经过电机控制任务的电机速度闭环控制器转换为电机的电压,从而实现循迹小车的直行、转弯、加减速等功能。
图6 循迹任务流程
循迹小车的整体设计效果如图7 所示。16 组光电传感器呈“一字型”均匀分布构成灰度传感器模块,通过传感器支架连接件放置在车前。车中部由电池及主控电路板组成,小车的四个电机分别安装增量式霍尔磁敏编码器,此编码器具有响应速度快、抗震强、传输距离远等特点,为电机转速控制提供有力保障。
图7 循迹小车实物
本设计中的智能循迹小车,采用PT550A5C 光电传感器为循迹模块,单片机STM32F407ZGT6 为控制模块,选用大功率N 沟道MOS 管构成H 桥为电机驱动模块,LM2596 为电源模块。通过μC/OS-Ⅱ嵌入式实时操作系统建立数据显示、ADC 采集、电机闭环控制、循迹规划4 个任务作为小车的软件控制。
实验结果显示,该系统能够出色地完成预定的循迹任务。此外,得益于μC/OS-II 操作系统的可拓展性,该系统还可以拓展自动识别、自动报警、自动保持安全距离、车速检测及遥控等多种性能。