引言
伴随着人类对海洋探索的深入,以及海洋机器人潜水深度的不断增加,原本极其恶劣的海洋环境变得更加复杂而又瞬息万变;一个暗流或海沟很可能在瞬间导致机器人的失控以致走失,实时性差以及智能化水平低成了制约海洋机器人发展的瓶颈。为了突破这个海洋机器人发展的障碍,沈阳工业大学瑞科研究所和中科院沈阳自动化研究所合作开发“基于嵌入式操作系统的海洋机器人控制系统”项目。
传统的控制程序顺序进行,时间关联性强的部分只能靠中断来处理,但必须要等到程序运行到预设点中断才能发生,以至系统不能对突发事件做出实时反应。实时嵌入式操作系统μC/OSII将应用程序分为若干任务,根据具体任务的轻重缓急为每个任务分配优先级别,以操作系统内核为中心平台,根据大范围预定性变化以及具体任务优先级别来实现在不同任务之间的切换、调度和运行,这样就大大提高了控制系统的实时性,也提高了控制系统的智能水平。本控制系统以16位TMS320LF2407A(针对电机控制和运动控制设计)DSP为硬件核心,实现对推进(无刷直流电动机)系统的控制,为提高系统的控制精度和可靠性提供硬件保障。
1 μC/OSII操作系统的移植
所谓移植就是使一个实时内核能在其他微处理器或微控制器上运行,即编写与处理器相关代码同时进行一些μC/OSII的设置。本文中μC/OSII内核使用了最新的V2.76版本,编译环境选用TI公司提供的V2.2版本CCS2000。移植的主要步骤如下:
① OS_CPU.H文件的编写。此文件主要包括数据类型定义和宏定义:
#define OS_ENTER_CRITICAL() asm("SETC INTM")
/*关中断*/
#define OS_EXIT_CRITICAL()asm("CLRC INTM")
/*开中断*/
中断服务程序(ISR)的入口指针指向汇编函数OSCtxSw(),即
#defineOS_TASK_SW()asm(″INTR 8″);
/*调用中断8号软中断实现任务切换*/
因为TMS320LF2407A的堆栈增长方向是递增的,所以只能定义堆栈增长方向从下向上,即
#defineOS_STK_GROWTH0
② OS_CPU_C.C文件的编写。在OS_CPU_C.C文件中,要求用户根据需要编写OSTaskStkInit()函数和5个hook函数。其中只有函数OSTaskStkInit()是用户必须定义的,而其他5个hook函数是为了方便用户使用扩展功能而设定的,可以定义为空函数。
图1 TMS320LF2407A的堆栈结构
根据图1所示的TMS320LF2407A的堆栈结构,定义堆栈初始化函数OSTaskStkInit()在本移植中的主要代码:
*ptos++=(OS_STK)0x27FC;/*ST1*/
*ptos++=(OS_STK)0x2600;/*ST0*/
*ptos++=(OS_STK)0;/*ACCH*/
*ptos++=(OS_STK)0;/*ACCL*/
③ OS_CPU_A.ASM文件的编写。此文件包括4个函数都涉及对寄存器的处理。由于不同处理器有不同寄存器,所以操作系统在这个文件里给用户留下4个函数接口,以便用户根据所选处理器编写相应的汇编程序实现固定功能。分别为:多任务启动函数中调用的OSSTartHighRdy()、任务切换函数OSCtxsw()、中断任务切换函数OSIntCtxSw()和时钟频率服务函数OSTickISR()。时钟频率可以设置为100~200 Hz。本程序设置为100 Hz。
④ OS_CFG.H文件的配置。μC/OSII将内核所有条件编译的条件标识符都集中到了一个文件OS_CFG.H中。通过对OS_CFG.H中各个标识符的定义,可以决定功能模块是否将参加编译,该功能是否会被包含到内核中去。未经任何裁剪的μC/OSII内核源码达到了160 KB左右,这很难应用到普通的单片系统中,基于TMS320LF2407A的硬件平台实际只有32 KB的程序存储空间,而且内核程序应用中只会用到任务管理、时间管理、任务之间的通信与同步管理和I/O管理的一小部分功能,所以需要对μC/OSII其余的功能进行裁剪、优化。经过对内核的优化和裁剪,最终内核只有4.3 KB左右。
经过以上几个与移植有关文件的编写和剪裁后,完整控制系统的软件系统逻辑结构框图如图2所示。
图2 软件系统结构框图
2 DSP控制器硬件结构
为了满足无刷电机控制系统的要求,采用速度与电流双闭环电动机控制策略,以及反电动势过零点的方法实现无位置传感器的转子位置检测。在图3所示的控制系统中,以TMS320LF2407A为控制核心,处理采集到的数据和发送控制指令,检测转子位置;根据转子位置发出相应的控制字来改变PWM信号的当前值,从而改变电动机驱动电路中功率管导通顺序,实现对电动机转速和转动方向的控制。
功率驱动电路采用三相全控桥式控制方式。功率MOSFET管选用IRFPO54N,并以IR2130作为全控桥的驱动电路。IR2130芯片可同时控制6个大功率管的导通与关断顺序,分别控制三相全桥驱动电路的上半桥V1、V3、V5的导通关断,以及下半桥V2、V4、V6的导通关断,从而达到控制电机转速和正反转的目的。
3 模糊PID控制算法
根据海洋机器人特殊的工作环境,与电动机本身的特点,选用模糊PID控制算法对电动机的速度环进行调节,电流环采用PI控制。模糊PID控制器具有可根据被控制对象的当前状态自动调整控制器自身参数的能力,可满足海洋机器人工况变化的要求。
模糊控制是一种以模糊集合论、模糊语言变量及模糊逻辑推理为数学基础的新型计算机控制方法,模糊控制的基础是模糊数学,模糊控制的实现手段是计算机等处理器。模糊控制也具有数字控制的一般形式,如图4所示。
图3 DSP控制系统的控制及驱动结构框图
图4 模糊控制系统结构框图
速度环模糊PID控制框图如图5所示。其设计过程分为模糊化、模糊推理和模糊规则、反模糊化三大步。这里主要介绍变量的模糊化。
(1) 输入量模糊化
确定系统中连续变量e和ec的变化范围,本系统中速度变化范围为(0~3 000 r/min)。那么速度误差e范围是(-3 000,3 000);而误差变化率ec的变化范围可以设定为(-6 000,6 000)。将e和ec的变化范围整定到模糊论域E=(-3,3)内:假定原模拟量变化范围是[a,b],论域范围是[-n,n],整定公式为直线公式(1):
由此可以得到速度误差以及误差变化率的整定公式(2)、(3):
图5 速度环模糊PID控制框图
这样就得到模糊量et、etc。在模糊论域内,分别定义7个模糊集合,对应的语言变量为:负大(NB)、负中(NM)、负小(NS)、零(Z)、正小(PS)、正中(PM)、正大(PB)。
(2) 输出量模糊化
确定输出量KP、KI、KD的变化范围,统一地设定为[-3,3]。然后根据经验,对模糊控制器的3个输出分别乘以量化因子。此量化因子可以根据不同的控制对象,通过实验的方法进行临时调整。
对参数KP、KI、KD也分别定义7个模糊集合,即负大(NB)、负中(NM)、负小(NS)、零(Z)、正小(PS)、正中(PM)、正大(PB)。
4 μC/OSII操作系统中任务的建立
利用实时操作系统开发嵌入式多任务系统程序,必须根据明确的设计目的和DSP特性确认系统功能,并将系统功能合理分解,使每个任务实现应用要求的具体功能。
根据具体功能要求,划分控制系统的任务,整体结构如图6所示。
图6 嵌入式系统多任务结构框图
① 故障报警任务TrobTask,在循环中加入对故障标志的判断语句,优先级为4。
② 电流、转速采样任务SampTask优先级为5。
③ 位置检测任务PosiTask优先级为6。
④ PWM输出任务PwmTask优先级为7。
⑤ 电流环PI运算任务PITask优先级为8。
⑥ 速度环模糊PID运算任务PIDTask优先级为9。
⑦ 硬件和系统参数初始化任务InitTask优先级为10。
系统主函数编写如下:
#include "2407REGS.h"
#include "includes.h"
#include "Task0.h"
void main(void) {
DSPInit();
OSInit();
OSTaskCreate ( Task0, (void*)0,&Task0Stk[0] , 0);
OSStart();
}
在主函数中创建任务Task0,并赋予最高优先级别0。在Task0中创建前述的7个任务,并赋予相应优先级别。电流采样完毕后可以立即传消息给电流环PI运算任务,完成运算就传消息给PWM输出任务;完成电流采样后,开始速度采样,完毕后可以立即传消息给速度环模糊PID运算任务,完成运算就传消息给PWM输出任务;最后开始位置采样,完毕后传消息给PWM输出任务。故障任务可以根据故障判定,调用硬件和系统参数初始化任务,或者直接禁止PWM输出任务。系统程序流程如图7所示。
图7 系统流程
在CCS2000中建立了名为mytask的工程,并把内核文件和移植代码以及任务代码等文件(上述7个任务代码存放在allTask.c文件中,Task0任务代码存放在Task0.c文件中)添加到工程目录下,最后添加.cmd和.lib文件,如图8所示。
图8CCS2000中的程序结构
选择Project→Rebuild all编译、链接源文件,结果如图9所示。将形成的0002.OUT文件通过JTAG接口以及仿真器下载到DSP芯片。
图9 CCS2000环境下编译连接源文件
5 测试实验
实验设备选用唐山普林依托电机股份有限公司的A12516型无刷直流电动机,额定转速为1 500 r/min,额定功率为0.5 kW。电动机运行过程中,使用Tektromix公司的TDS2024示波器,观测到电动机相电流波形如图10所示。
图10 相电流波形实验曲线
结语
本文通过将嵌入式实时操作系统μC/OSII成功移植到TMS320LF2407A中,构造了以DSP为硬件基础,以μC/OSII为系统软件平台的深海机器人推进电机的控制系统,并在实际应用中稳定可靠的运行。μC/OSII在深海机器人中的应用,很大程度上提高了其控制系统的实时性能、缩短产品的开发周期、简化了产品设计,有利于功能的进一步扩展。当然,μC/OSII在深海机器人中的应用还仅仅是一个开始,进一步以本平台为基础进行程序开发、任务通信与同步、信号量集的合理使用等还有很多工作要做。