STM32单片机的四驱磁导航AGV控制器设计*
2018-07-11,,
,,
(云南民族大学 电气信息工程学院,昆明 650504)
引 言
自动导引小车(Automated Guided Vehicle, AGV)是一种能沿预先设定路径行驶的智能化搬运设备,广泛应用于现代工业自动化物流系统中。目前,国内现有的AGV控制器仍大多采用可编程控制器或51系列单片机,通过串行处理或轮询方式执行AGV系统任务,其动态响应能力差[1-2]、系统运行不稳定,实际运行过程容易引起脱轨、车身行驶异常。针对这些不足,本文以STM32F103ZET6为核心设计AGV控制器,嵌入微型实时操作系统,采用分层模型结构,管理AGV系统的软硬件资源,以并行处理方式实现实时任务调度,大幅度提高系统性能,有效克服运行过程中脱轨、车身行驶异常等不足。
1 硬件系统总体设计
AGV控制器的硬件系统主要包括控制系统单元、传感器单元、人机交互单元、运动控制单元、电源管理单元[3],如图1所示为AGV硬件系统架构。
控制系统单元主要由STM32单片机最小系统电路组成,主要完成人机交互、逻辑控制以及运动控制算法等功能。
传感器单元主要由磁导航传感器、地标传感器、障碍物检测传感器等组成。通过传感器单元采集磁导航信号、地标指令信号、障碍物检测信号,然后经过光耦隔离输入控制器单元处理。
人机交互单元主要是在触摸屏和控制器单元之间通过RS232串口电路建立通信,实现触摸屏人机界面与控制器之间的信息交互。
运动控制单元主要由前级传感器信号经控制器单元运算处理后输出控制指令,再输入AD7225芯片进行D/A转换,经运算放大电路输出模拟信号给后级驱动。
图1 AGV硬件系统架构
电源管理单元主要给其它各个单元模块进行供电以及控制器系统电源电量采集的模拟量信息。电源管理单元由24 V直流电源输入,经过TPS5450电源管理芯片生成12 V、5 V、3.3 V的直流电源。其中,24 V给触摸屏、伺服驱动电路供电,12 V给各组传感器供电,5 V给信号放大电路、逻辑电平转换电路供电,3.3 V给控制芯片STM32F103ZET6供电。
2 软件系统总体设计
μC/OS-II是专门为嵌入式系统设计的硬实时内核,其内核精简,多任务管理功能十分完善,实时性能好,并且具有可裁剪、可固化、源码开放、可移植性强的特点[4]。同时,μC/OS-II是抢占式的多任务操作系统,总是运行就绪列表中优先级最高的任务,其核心是任务调度器。μC/OS-II有5种任务状态,分别是运行态、就绪态、挂起态、睡眠态以及中断服务态,通过调度实现在这5种状态之间的任务转换。本控制器在设计系统任务时,通过任务调度的方式使控制器在满足功能需求的同时实现程序设计的合理化、最优化[5],从而实现AGV的直行、转弯、避障、人机交互等功能。图2所示为本文设计的控制器软件体系架构。
本系统软件平台采用分层、模块化结构,包括物理层、MAC层和应用层。系统软件包括Cortex-M3标准外设库、Cortex-M3内核库、嵌入式实时微型操作系统μC/OS-II。应用层包括电源管理控制库、传感器信号分析处理库和运动控制库,主要进行磁导航传感器数据采集、数值插补计算、误差补偿、校正等任务,地标传感器的中断任务处理、指令采集、分析、生成和输出任务,障碍物检测传感器的信号检测和执行任务,电量数据的采集和电源调度任务,运动控制的速度控制任务及其调度,人机交互操作任务。
图2 软件体系架构
通过对任务的合理划分可以有效地简化程序设计,提高系统的动态响应性能和稳定性,本控制器根据系统任务需求,将系统任务进行划分,采用静态优先级设置,赋予各个任务一定的优先级别。如表1所列为任务的具体划分和优先级设置。
如图3所示为本控制器系统任务调度切换示意图。系统启动后,μC/OS-II实时操作系统和硬件首先进行初始化配置,然后CPU的控制权由操作系统开始管理,CPU内核开始对任务按优先级循环调度。
表1 任务优先级分配
图3 任务调度切换示意图
2.1 人机交互任务
Modbus协议是Modicon公司开发的一种通信协议,采用主从问答方式工作,允许一个主机与一个从机或者多个从机通信,广泛应用于自动化控制领域,已成为一种通用的工业标准,控制器与触摸屏之间可以利用此协议进行通信。
FreeModbus是一位奥地利人写的针对嵌入式应用的一种免费通用的Modbus从机协议,其代码规范、易移植、
可裁剪、对软硬件要求低、资源占用少[6-7]。本系统人机交互任务可以通过移植FreeModbus协议栈到STM32内核,实现触摸屏对系统信息的实时监测和控制。本系统采用台达DOP-B07系列触摸屏,兼容Modbus RTU模式。通过台达DOPSoft软件设计触摸屏界面,将触摸屏设为主站,控制器设为从站,采用Modbus协议RTU模式进行通信。
本系统设计的触摸屏主要用来监控AGV的电量、速度、行驶状态等信息,以及显示主板各个传感器和电机工作状态是否正常。系统基于STM32内核配置使用Modbus从机的 01功能和06功能,其分别在内核开辟2个字节的离散变量地址存储区域usDiscreteInputBuf[0]~usDiscreteInputBuf[1],以及 8个字节的保持寄存器地址存储区域usRegHoldingBuf[0]~usRegHoldingBuf[7],然后通过配置STM32内部的TIM2通用定时器,以及UART1寄存器进行串口通信,最终实现AGV行驶状态、传感器运行状态等信息的人机交互。如表2所列为主机触摸屏和从机控制器之间的存储地址映射。
表2 主从地址映射表
2.2 障碍物检测任务
障碍物检测是通过采集激光传感器扫描传回的编码信息,调用Read_Obstacle()函数对采集的编码信息读取分析,如果扫描的距离小于系统设定的安全距离,则调用Avoidance_Obstacle_Process_task()函数,使电机停止运行。Obstacle_Check_task()的主要代码如下所示:
VoidObstacle_Check_task(void *pdata){
while(1){
Read_Obstacle();
}
//读取传感器编码
if(Command_Security_Obstacle==Unsafe)
//读取编码信息是否小于安全距离Avoidance_Obstacle_Process_task();
//执行避障处理任务
OSTimeDlyHMSM(0, 0, 0, 20);
}
//系统延时20ms,让出CPU使用权
2.3 地标指令读取任务
2.3.1磁地标指令读取时隙纠错方法
AGV控制系统任务中地标指令读取是AGV平稳运行的关键任务之一,如果地标读取错误,可能导致行驶异常甚至灾难性后果[8]。为了提高命令地标指令读取的准确性,本文设计了一种指令读取时隙纠错方法,使AGV在不同速度、不同负载的条件下,有效降低地标命令误码率,提高系统稳定性。磁地标指令读取主要通过触发地标磁条,使控制器开始读取地标指令,解析生成相应的控制指令,从而控制AGV执行加减速、停车、转向等功能[8]。
2.3.2软件设计
如图4所示为地标指令读取流程图。本控制器设计的地标指令读取时隙纠错方法,每组地标传感器有3个磁极信号采集输入端,分别是触发地标南极S1、命令地标南极S2、命令地标北极N1,当S极触发记为字符S,N极触发记为字符N。当地标S1被触发,产生上升沿信号输入STM32的PF0口而触发外部中断0时,执行中断函数EXTI0_IRQHandler(),通过I2C总线触发实时时钟芯片的时钟输出功能,并产生32 Hz的脉冲输入PB8口,触发外部中断8,执行中断函数EXTI9_5_IRQHandler(),开始计时指令读取时间。当指令读取时间超过设定的时隙阈值时,则判定指令读取出错,此时自动清除地标指令输入存储区的指令代码,初始化指令存储区,重新开始读取指令。本控制器设计的计时时隙阈值为6 s。
图4 地标指令处理流程图
上述两个中断函数主要代码如下:
void EXTI0_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
//判断外部中断0发生{
EXTI_ClearFlag(EXTI_Line0); //清除外部中断0 标志位
Trigger_Marker_En = 1;//触发地标标志置位
RTC_CLKOUT_Control(Enable,Freq_32);
//使能实时时钟产生32Hz时钟
EXTI_ClearITPendingBit(EXTI_Line0);
}
}
//清除外部中断0标志位,退出中断
void EXTI9_5_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line8)!=RESET){
//判断外部中断8发生
EXTI_ClearFlag(EXTI_Line8);//清除外部中断8标志位
if(Slot_Count>65534)//判断时隙计数值
Slot_Count = 0;//计数值归零
else Slot_Count++;//否则继续计数
EXTI_ClearITPendingBit(EXTI_Line8);
}
}//清除外部中断8标志位
2.4 运动控制任务
2.4.1磁导航偱迹偏差补偿控制算法
AGV控制系统任务中导航循迹任务也是AGV平稳运行的关键任务之一[9-10]。一旦导航偏差过大,将导致AGV脱轨。本系统设计了磁导航偱迹偏差补偿控制算法。如图5所示的算法模型,每个点的数值为其所在位置的权值,算法表达如下所示:
(1)
式(1)中,ai为每个位置磁导航传感器的权值,N为被触发磁导航传感器的个数,ε为磁导航偱迹偏移值。其中,第1组为直行行驶模型,传感器8和9感应到磁极信号而触发,ε=(8+9)/(1+1)-8.5=0。第2组为左转弯模型,传感器5、6感应到磁极信号而触发,ε=(5+6)/(1+1)-8.5= -3。第3组为右转弯模型,传感器11、12感应到磁极信号而触发,ε=(11+12)/(1+1)-8.5= 3。
图5 偱迹算法模型
2.4.2软件设计
本系统采用8位磁导航传感器,即上述模型5、6、7、8、9、10、11、12共8个点作为磁导航传感器的磁条信号采集点。如图6所示为导航循迹流程图。根据地标传感器触发采集到的地标指令,调用 Command_Analysis()函数解析指令,再调用Offset_Analysis()实时计算并反馈磁导航传感器循迹偏移值,同时调用AGV_Motion_Control()函数,将偏移值反馈给驱动信号输入端进行补偿计算,再调用 WR_Speed()函数将补偿计算后的值经过D/A芯片转换,输出相应驱动电压信号,从而实现AGV直行、转弯、加减速等功能。表3为AGV地标指令功能编码。
图6 导航循迹流程图
地标指令编码功能说明地标指令编码功能说明NNNS高速行驶SNNS调转行驶NNSN中速行驶SNSN左转弯行驶NNSS低速行驶SNSS右转弯行驶NSNN停止行驶SSNN直线行驶
3 功能测试
图7 AGV实验平台
功能测试主要对本文设计的控制器人机交互任务、障碍物检测任务、运动控制任务、地标指令读取任务的功能及系统性能验证。如图7所示为搭载本文设计的AGV控制器实验平台。当系统上电时,触摸屏开启,人机界面显示AGV的电量、速度等状态信息,系统上电默认设置为中速直行,设定地标指令读取时隙阀值为6 s,如图8所示为AGV运行过程中地标指令界面。通过安装在控制器主板上的驱动电压信号采集装置得到各驱动电机的驱动电压信号,如表4所列。本控制器设计了4档(零速、低速、中速、高速)速度驱动电压信号,充分满足实际生产中的运行需求。从采集的各个驱动轮驱动电压信号可以验证,当AGV检测到障碍物时,各档速度模式下电机驱动均
立即输出0 V的信号,使系统迅速停机。同时,当本系统采用差速驱动方式实现AGV转弯时,各档速度模式下4个电机的驱动信号值均非常稳定。实测表明,AGV系统运行稳定可靠、行驶平稳,没有出现AGV脱轨、车身行驶异常的情况。
图8 地标指令及行驶信息界面
驱动轮直行驱动电压/V右转驱动电压/V左转驱动电压/V检测到障碍物时驱动电压/V零速低速中速高速零速低速中速高速零速低速中速高速零速低速中速高速前左00.61.73.601.02.14.000.31.43.00000前右00.61.73.600.21.33.200.92.13.80000后左00.61.73.601.02.14.000.41.53.10000后右00.61.73.600.21.33.201.02.13.90000