工业机器人嵌入式实时控制系统
1控制系统结构
工业机器人控制系统是一个多任务并行并具有很高实时性的系统。目前主流控制系统大致分为两种结构
[10]。一是多处理器主从式的控制系统。主机一般为 IPC,使用 INTEL的 CPU,运行的是非实时操作
系统,例如 windows。在主 CPU中主要运算一些非实时任务。从机可能是运动控制卡或运动控制器,负
责执行伺服控制等实时性高的任务,其 CPU一般为嵌入式的 DSP,负责复杂的信号处理和伺服控制等运
算,再加上 FPGA芯片负责系统 I/O信号处理。第二种系统结构是单处理器配合实时操作系统。在这种
控制器中,所有的任务都要在一个 CPU上进行,这就对各个任务如何合理使用 CPU时间提出了很高的要
求。一开始的机器人多采用单个处理器,但由于当时处理器性能不高,且不能运行实时操作系统,难以
满足对机器人实时性以及复杂的伺服控制的要求。所以随着时间的推移,多处理器结构占据了主流。近
年来,嵌入式实时操作系统的发展给单机处理器完成机器人控制任务提供了可能。通过实时操作系统对
所有任务进行 CPU时间分配,达到多任务并行处理的效果和极短的中断响应时间,可以达到机器人控制
需求。
本文开发的工业机器人控制系统中的运动控制器是采用上述第二种结构,采用意法半导体公司的
STM32F4高性能 MCU作为控制器处理器,以嵌入式实时操作系统μC/OS-III 作为软件平台,在系统中
加入不同的任务模块,完成对四轴搬运机器人的运动控制。μC/OS-III 是 Micrium公司推出的第三代
实时操作系统[11],不同于前一代μC/OS-II,专门对 Cortex-M4内核 CPU进行优化,能够利用
Cortex-M4的 NVIC实现硬件级的中断响应。同时,能够实现 1ms的系统时钟节拍,具有抢占式和时间
片轮转任务切换,支持无限个进程优先级,能够以最短的时间进入中断,每个任务之间的切换时间为微
秒级别。同时它采用标准 C语言进行编写,方便用户进行编程,任务增减和算法修改。工业机器人控制
系统结构如图 1所示。STM32F4是采用当下最高性能的 Cortex-M4微控制器内核的 MCU,通过 MCU自身
具有 PWM波形生成功能的定时器生成 PWM互补信号,发送给伺服驱动器来控制伺服电机;通过带有增量
编码器接口功能的定时器计算驱动器返回的增量编码器 AB向脉冲信息,由此可计算得到电机每个时刻
的位置、速度、加速度信息;通过拥有 5V容忍的 I/O引脚处理机器人系统数字输入信号以及给机器人系
统发送数字输出信号;通过 MCU自身的 A/D外设将传感器信号转为 MCU可以识别的数字量;通过 MCU的
USART外设与示教器进行串口通信。此外,MCU提供的 CAN总线和 Ethernet接口使机器人系统具有可
拓展性,可以连接其他各种设备进行通信。由于 STM32F4自身带有的多种外部设备和相当数量的 I/O接
口,不需要再添加其他的外设芯片便可以满足一台工业机器人的控制需要。大大减少了控制器结构的复
杂程度,降低了成本。
控制系统对输入数字信号的处理和伺服电机的控制等都在μC/OS-III 中编写用户应用代码来完成。要
使用μC/OS-III,首先要完成μC/OS-III 在 STM32F4上的移植。这其中涉及对源代码中与 CPU相关的
代码的修改,包括μC/OS-III 中 CPU相关代码和μC/CPU 中相关代码。移植好后,通过系统配置模块
来给μC/OS-III 相应模块和用户代码文件进行参数设置,便可在μC/OS-III 系统下,利用μC/OS-
III提供的丰富的 API函数来编写用户任务代码。BSP文件包含控制板上所有外设的初始化,这样用户
才能使用这些外设来输出输入相应的信号。对用户代码,即软件结构的分析将在下一节进行。这样,系
统软硬件架构都是具有模块化和开放性特征,便于修改和升级。
2控制系统软件结构
在实时操作系统中,需要把要完成的工作分为多个任务来实现。每个任务负责其中一部分工作,由
μC/OS-III 负责多任务的管理。每个任务都调用μC/OS-III 的 APIOSTaskCreate()来创建。创建一个
任务时,系统为每个任务分配了一个任务控制块(TCB)、一个堆栈、一个优先级和其他一些重要参数。
任务一般设计为无限循环类型任务,每个任务必须调用μC/OS-III 的服务函数,使该任务进入等待某
个事件的状态。机器人系统需要有中断处理,每个中断服务程序都按照μC/OS-III 中中断函数进行定
义。各个任务和中断服务程序间通过系统信号量 OS_SEM和消息队列 OS_Q等进行通信。利用实时操作系
统的任务调度来实现任务的合理分配,满足系统硬实时性要求和多任务并行的要求。机器人控制系统会
有很多中断请求,比如 USART接收到数据、以太网控制器接收到数据帧、ADC转换器完成传感器信号
转换等,这些外设会向系统请求中断,系统会在极短的时间内挂起当前运行的任务,进入中断服务程
序。每个中断服务程序将给不同的任务发布信息,使等待该中断的任务进入运行态。整个控制系统软件
是采用模块化的编写,用户可以很方便增减模块,修改软件功能。整个控制系统的软件结构如图 2所
示,每个矩形框代表一个模块。本文的控制系统软件是用一台四轴工业机器人的具体应用作为示范。由
上图可知,软件在运行时,每个系统周期触发一次系统节拍中断,系统中断将使能系统状态监控、系统
状态显示和增量编码器信号处理等任务。通信中断服务负责接收由示教器或者远程主机下发的数据帧,
并交给任务定义代码进行数据帧的解析,从而得知用户希望机器人控制器进行的任务,如系统初始化、
系统参数设置、原点复位、数据记录、手动示教和自动码垛等。轨迹规划任务负责对码垛机器人在抓取
点和码垛点之间的运动轨迹进行规划,规划好的轨迹会发送给伺服控制任务,伺服控制任务负责四轴电
机的闭环控制,使电机精确跟随规划好的轨迹进行运动。外部中断服务主要是响应数字输入口的信号变
化,外部中断服务将触发报警任务、模式切换任务等。每个任务模块根据重要性不同分配不同的优先
级。例如系统状态显示任务不需要很高的实时性,给予其较低的优先级;伺服控制任务是极其重要的任
务,决定了机器人的运动速度和精度,给予其较高的优先级。机器人系统运行时出错必须急停,所以报
警急停任务使用最高优先级。对于其他用途的工业机器人,系统软件结构与本文结构并无太大差别,用
户自行增减任务和修改算法便可实现对不同机器人的控制。
3系统实时性分析和性能测试
对于工业机器人系统朝着更高的运行速度和精度发展的趋势,每个关节间电机运动的同步性、电机运动
轨迹的精确性、对系统中断的响应速度都非常重要。这就意味着控制系统需要很高的实时性,系统软件
必须对相关任务进行快速计算,并且任务之间的切换也要非常快。不同的任务被赋予不同的优先级,在
每个系统周期内,先执行优先级高的任务,再执行优先级低的任务。一旦有中断服务程序,CPU正在执
行的任务将被挂起,先执行完中断服务程序。如果中断服务程序使另一个更高优先级的任务进入就绪
态,则先执行该任务,后执行被中断的任务。最后回到最低优先级任务。评定实时操作系统性能的好
坏,具体指标通过任务切换时间、中断响应时间,任务执行时间等进行评定。在本文介绍的控制系统
中,系统时钟节拍设定为为 1ms,在一个系统节拍内,典型的软件执行时序如图 3所示。图 3中,A为
系统空闲任务,空闲任务执行时间越久说明 CPU使用率越低;B为时钟节拍中断;C为时钟节拍任务;D为
系统状态发送任务;E为串口接收中断,接收上位机下发的指令;F为系统消息队列;G为电机运动任务,
负责闭环控制,1ms发送一次指令至驱动器。
对于系统代码执行时间的测量,μC/OS-III 提供了简单且精确的函数 OS_TS_GET(),此函数可以记下当
前处理器的时间戳。在需要测量的代码前后记录下时间戳,二者的值之差为处理器在这段时间使用了多
少个时钟周期,对于本文使用的处理器,时钟周期为 1/168000000s。将测量的时间通过串口返回到上
位机,可以得到,A到 B的中断响应时间为 1μs左右,A到 D的时间为 5μs左右,C到 D的任务切换
时间为 1μs左右,G任务代码执行时间为 10μs 左右。对于目前工业机器人中断响应不超过 500μs 的
需求,本控制系统能在 10μs 内执行完中断服务并使能相关任务,完全满足需求。对于 1ms的伺服控制
周期来说,本系统 10μs 内便能发送四路电机的速度指令,每路电机运动的时间差可以忽略,可认为电
机实现了同步运行。同时,在测试时,通过μC/OS-III 内嵌测试功能得到的 CPU使用率未超过 5%,说
明了 MCU性能足以保证机器人正常运作,同时有足够能力运算更复杂的控制算法。
4结束语
本文提出的工业机器人实时控制系统采用μC/OS-III 实时操作系统和单 MCU结构,利用该实时操作系
统 API进行各个任务模块定义,通过实时内核的任务调度和中断处理为系统硬实时性提供了保障,通过
MCU强大的运算功能保证了电机运行同步性。同时整个软件系统采用标准 C语言进行编程,方便用户添
加删除模块,具有可拓展型和开放性。
作者:何明超 曹其新 冷春涛 单位:上海交通大学 机械与动力工程学院机器人所