基于μC/OS—II 和 DSP 的伺服控制系统的应用研究
2016-05-19廖盛澨林嘉义林厚健
廖盛澨++林嘉义++林厚健
摘要:该文主要介绍了嵌入式实时多任务操作系统μC/OS-II,分析了其工作原理,讲述了将μC/OS-II 移植 DSP 的微处理器的开发板中的过程,以及在此基础上实现了μC/OS-II
在伺服电机控制系统中的应用。
关键词:μC/OS-II;DSP;移植;伺服控制
中图分类号:TP391 文献标识码:A 文章编号:1009-3044(2016)07-0247-02
1 概述
制造业日益发展的今天,电机控制技术在工业控制方面显得尤为重要,对伺服控制系统的改进对提高生产率有着极大的帮助。然而,工业控制特别是伺服控制系统以及其他运动控 制系统中,对系统的响应时间有严格的要求,这些系统也称实时系统。通常情况下,伺服系统 采用前后台系统,应用程序是一个大的循环,由于处理器是单核的,所以事件都是顺序执行 的。这种方法有致命的缺点就是系统的稳定性和实时性很差,编程难度大;又因为伺服系统 对系统响应时间非常严格,它要同时完成采样、控制、计算、通讯等任务, 如果有一个实时 多任务操作系统来对其进行管理和调度,对于提高伺服系统的稳定性的实时性是非常好的。 为此,本文提出基于μC/OS-II 和 DSP 的伺服电机控制系统,以嵌入式实时操作系统做系统 的调度,应该可以满足伺服控制系统对系统的实时性的要求,同时采用高速处理器 DSP 作为 整个系统的 CPU,可以提高运算效率,大幅减少响应时间。为此我们需要做俩件事,一是将μC/OS-II 系统移植到 DSP 控制板上,二是实现多任务的伺服电机的控制。μC /OS-II 一个可裁剪、可移植、完整的、可固化的抢占式实时多任务内核。
μC/OS-II绝大部分的代码是用 ANSII 的 C 语言编写的,包含一小部分汇编代码,使之可供不同架构的 微处理器使用。除此之外,μC/OS-II 还有占用空间小、实时性优良、执行效率高和可扩展 性等优点。μC /OS-II 包含了实时内核、任务管理、时间管理、任务间通信同步(信号量, 邮箱,消息 队列)和内存管理等功能,且最小可将其可裁剪到 2KB。
TMS320F2812 是 TI 推出的一款专门针对电机控制的 DSP 芯片,是目前国际市场上最先 进、功能最强大的 32 位定点 DSP 芯片之一。它既具有嵌入式控制功能和强大的事件管理能 力,又具有强大的数字信号处理能力。TMS320F2812 最高运行频率为 150Mhz,采用流水线进 程,但是单纯的 DSP 控制很难再满足对电机控制的各种需求,因此,将 μC/OS-II 一直到DSP 中,可以满足实时控制的需要。移植要对源代码进行修改,对有关 CPU 底层的文件进行 重新编写。
2 μC/OS-II 的内核结构
μC/OS-II 主要包括:与处理器相关文件、与应用相关文件和实时操作系统内核文件等。由于实时操作系统内核文件在移植中不需要改动,所以,以下主要讲 解处理器相关文件和与应用相关的文件:
1) 与处理器相关文件
移植主要是要重新编写该部分。它是与硬件相关的代码,处理器不同,代码也不尽相同。 这部分在 μC/OS-II 源代码中有三个文件:OS_CPU_A. ASM、OS_ CPU_C. C 和 OS_ CPU. H文件。
OS_CPU_A. ASM:该文件需要根据处理器的寄存器进行修改,必须用贴近底层的汇编语言来 编写。主要包括四个函数:OSTickISR()、OSStartHigh Rdy ()、OSIntCtx Sw()和 OSCtxSw ()。
OS_ CPU_C. C: 该文件包含 6 个函数,但最重要的函数是 OSTaskStkInit(),其他 5 个函数 是对内核扩展时用的。OSTaskStkInit()是任务对战初始化函数,对用户任务的堆栈进行初 始化,使建立好的进入就绪态任务的堆栈和系统发生中断并且和环境变量保存完毕时的堆栈 结构一致。
OS_ CPU. H: 定义了预处理器的数据类型定义,还包括了堆栈增长方向定义、堆栈单位定义、
开关中断的宏定义以及进行上下文切换的宏定义等。 其中,堆栈的单位与 CPU 的寄存器长度一致 ,堆栈一般是由高地址逐渐向低地址增长的。
2) 与应用相关文件 该部分包含两个文件:OS_CFG.H和INCLUDES.H。OS_CFG.H主要用来配置内核,
用户可以根据自己的需要对内和进行裁剪,用来设置系统的基本情况。例如,系统的最大任务数、是否开启任务挂起功能等。代码的裁剪可通过修改文件OS_CFG.H的相应的宏定义#define OS_???_EN的值来设置,当为1时,该服务就会开启。INCLUDES.H包含了用户和内核的头文件。
3 μC/OS-II 在 TMS320F2812 中的移植
1) μC/OS-II 在 TMS320F2812 上移植的可能性
要使 μC/OS-II 在目标处理器上正常运行,该处理器必须满足以下需要:
处理器支持中断,能产生定时中断;
用 C 语言可以开关中断;
处理器的 C 编译器能产生可重入代码;
处理器拥有将堆栈指针和其他 CPU 寄存器的内容读出的指令
TMS320F2812 芯片完全满足以上条件,为 μC/OS-II 移植到该平台提供了可能,并且 TI 公
司拥有自己的 DSP 开发软件—Code Composer,它包含编译器、连接器及断位器,集调试、 编译和编辑于一体,完全能够胜任将 μC/OS-II 移植到 TMS320F2812 处理器上去。
2) μC/OS-II 在 TMS320F2812 上的移植
在函数 OSTaskStkInit()中,由于堆栈的特点是 DSP2812 的堆栈由高向低增长,最高 处是任务的入口参数,接下来是程序计数(PC)指针和程序状态字。在任务切换时需要对临时 寄存器进行保护。在知道了堆栈的构造后,需要编写任务切换函数(OS_TASK_SW 和 OSIntxSw
函数)和启动函数(Osstar 函数) 。主要是这两个函数需要对程序的堆栈进行管理,
OS_TASK_SW 函数编写时需要主要的是在任务切换前需要保护现场,而 OSIntxSw()不需要 保护现场,因为中断程序使用 C 语言编写的。
主要移植内容:
修改 OS_CPU_C.C 中 6 个操作系统相关的函数。这些函数有 OSTask-StkInit 、 OSTaskSta-tHook、OSTaskDelHook、OSTaskSwHook、OSTaskCreateHook 和 OSTimeTickHook。
重点移植的是第一个函数。
修改 INCLUDES.H 文件,不同处理器、不同编译器、不同库函数都需要修改 INCLUDES.H 文件, 需要注意的是头文件之间有包含关系和条件编译的关系,需要安排好头文件之间的顺序。
3) 测试移植代码
为目标处理器完成嵌入式系统 μC/OS-II 的移植之后,接下来的工作就是要测试
μC/OS-II 是否能正常工作,因为涉及代码的跟踪和调试,这可能是最为繁琐的一步。可 以使用多种测试技术测试移植的代码,这里主要通过 4 个步骤测试代码:
确保 C 编译器,连接器和汇编编译器正常工作; 调试及验证 OSStartHighRdy 函数和 OSTaskStInit 函数; 调试及验证 OSCtxSw 函数;
调试及验证 OSTickISR 和 OSIntCtxSw 函数;
4 基于 μC/OS-II 和 TMS320F2812 在伺服控制系统中的应用
在现有的 TMS320F2812 电机控制板上,已经将 μC/OS-II 成功运行,接下来将该嵌入式 系统运用在伺服控制系统中,实现对伺服控制系统实时性和稳定性的提升。
在该多任务系统中,建立五个任务,中断拥有最高的优先级,保证了中断的实时性,中断恢复在系统参数设置后,A/D 转换由中断唤醒。软件方案大概思路如下:在主函数中需要 建立起始任务 StartTask(),再由起始任务建立一系列的邮箱和信号量:唤醒键盘任务、唤 醒液晶显示任务、唤醒 AD 任务、唤醒 regulator 任务和唤醒时钟中断任务,接下来,用
OSTaskCreate()函数建立 5 个对应的任务,接下来运行系统,查看伺服系统是否工作正常。
5 总结
μC/OS-II 作为可靠的、精简的多任务实时操作系统,在广泛的嵌入式领域具有广阔的 应用前景。本文首先将 μC/OS-II 移植到 DSP 电机控制板中,验证了其移植的正确性,再将 该控制板用在伺服控制系统中,以多任务的模式实现了电压环调节、A/D 转换和显示任务等。 证明了 μC/OS-II 用在伺服系统中,相比传统的裸板具有更强的实时性和稳定性,并为实现 更复杂的智能算法提供了更方便的平台。
参考文献:
[1] 李逃昌.基于 DSP 的压铸机实时压射控制器研究[D].阜新:辽宁工程技术大学,2008.
[2] 陈涛,彭侠夫,叶瑰昀.基于μC/OS-Ⅱ的永磁同步电动机伺服系统软件设计[J].微电 机,2007(5):52-54.
[3] 冉明,邢汉承.基于μC/OS-II 的嵌入式系统的设计[J].微机发展,2005(1):91-93.
[4] 何湘智,吴晖,周伟. μ C/OS- Ⅱ 在 TMS320F2812 上的移植研究 [J]. 现代电子技 术,2010(4):86-88.
[5] 张天水,李正熙,孙德辉.基于嵌入式操作系统 Uc/os—ii 和 DSP 的伺服电机多任务控制[C]//中国金属学会.冶金自动化信息网年会论文集.中国金属学会,2004:3.