基于μC/OS-II的光盘伺服控制系统的设计

写范文发表于:2023-06-23 07:49:09

光盘伺服控制系统是典型的光机电一体化的控制系统,是光盘驱动器和CD/VCD/DVD播放器的重要组成部分。目前业界普遍采用单片机与伺服控制数字信号处理器配合实现的结构,已可单片化(将单片机和伺服控制数字信号处理器集成在一块芯片上)实现光盘伺服控制系统。不论是芯片组的形式,还是单片化的形式,都少不了以板级控制软件(也称为固件)实现控制系统。目前普遍采用的方案是利用运行于单片机的小型嵌入式*作系统实现光盘伺服系统。

为采用自行研发的光盘伺服信号处理器实现支持多格式光盘的伺服控制系统,笔者对光盘伺服控制系统做了比较深入的研究。本文介绍了一种以Hitachi的H8S/2357F作为控制处理器,μC/OS-II作为嵌入式实时*作系统的光盘伺服控制系统的设计和实现。

基于μC/OS-II的光盘伺服控制系统的设计

1光盘伺服控制系统的硬件设计

光盘伺服控制系统的硬件设计如图1所示。该设计采用自行研发的伺服数字信号处理器、Hitachi公司的H8S/2357F高*能16位微控制器、AKM公司的AK8566、TI公司的SSI3736等芯片实现CD-ROM、DVD和CD-R/RW的伺服功能。并在该系统中完成对自行研发的光盘伺服数字信号处理器设计的验证,为光盘伺服系统的产品化做好准备。

2光盘伺服控制系统的软件设计

系统分析和软件设计是光盘伺服控制系统实现的难点之一,设计的优劣关系到系统的读碟能力、使用寿命、稳定*、扩展*、维护*等*能。因为要兼顾DVD、CD和CD-R/RW等光盘格式和各种不同的机械参数的设置,伺服控制软件的设计变得相对复杂。为了使控制逻辑明了和易于实现,采用在H8S/2357F上运行μC/OS-II实现光盘伺服控制系统是一个比较好的选择。H8S/2357F的资源比较丰富,μC/OS-II在H8上可以很好地运行,易于系统的开发。

光盘伺服系统设计的关键是分析光盘伺服系统,把各个功能在μC/OS-II核的基础上建立起来,使其有机协调地运转,实现光盘伺服控制系统。

图3执行态的子系统之间的通信和切换关系

2.1μC/OS-II嵌入式实时多任务*作系统

μC/OS-II是由JEANJ.LABROSSE编写的一个源代码公开、可免费使用的嵌入式实时*作系统。它是μC/OS的一个升级版本。从最老的μCOS到最新的μC/OS-II,已有十多年的历史。它的特点主要有:公开源代码、可移植*、可固化、可裁减、支持多任务、具有可确定*等。μC/OS-II面向中小型嵌入式系统,是基于优先级抢占式的实时多任务*作系统,包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列)和内存管理等功能,绝大部分代码用C语言编写,与硬件相关部分用汇编语言编写。

基于μC/OS-II的应用系统工作时,首先把CPU初始化;接着进行*作系统初始化,主要完成任务控制块(TCB)初始化、TCB优先级表初始化、空任务的创建等;然后开始创建新任务,并可在新创建的任务中再创建其他的新任务;最后调用OSSTART()函数启动多任务调度。

 

第2篇:基于μC/OS-Ⅱ的变频器变结构控制系统设计

在油田生产中为了节省电能并减小故障率,变频器得到越来越多的应用。但由于油井负载的非周期大脉动*质,从能量的流向来看,变频器有两种运行状态——电动运行和回馈制动。不同运行状态的控制变量和控制方法是不同的,这就要采用所谓的变结构控制。本应用是实现抽油电机变频驱动中的变结构控制,不同的控制结构通过任务间的切换实现。

系统控制核心采用DSP56F803,它是Motorola公司推出的16位DSP型微控制器,运算速度可达40MIPS,片内资源丰富,有强大的软件支持,是嵌入式应用的理想选择。本系统应用了其SPI、SCI、PWM、键盘中断及通用I/O口等功能模块。

1系统设计

1.1μC/OS-Ⅱ的移植与配置

Motorola公司提供的软件开发工具包SDK为使用μC/OS-Ⅱ做好了铺垫工作,与硬件相关的文件OS_CPU.H、OS_CPU_A.SM和OS_CPU_C.C已经给出,只需购得系统源代码,然后将其考入指定的文件目录,系统的移植就完成了。本文采用最新版本μC/OS-ⅡV2.51。

系统移植成功后,需要对*作系统进行配置(裁剪),把用不到的功能去掉,以最大限度地节省存储空间。这项工作是通过os_cfg.h中的宏定义进行的,本文只用到了多任务管理、信号量、互斥量等功能。在本应用中,μC/OS-Ⅱ内核经过剪裁后只有3KB左右,相对DSP56F803的32KB内部程序Flash只用了不到十分之一。需注意的另一个关键设置是时钟节拍中断频率Os_TICKS_PER_SEC,它是系统多任务运行所依赖的时间基准,也决定了任务重复调用的最快频率。这里缺省设为1000,要比文献[3]中的推荐值高出一个数量级。但实际应用表明,DSP56F803以其高运算速度在这个设置下是完全胜任的。

1.2系统功能

根据油田生产的要求,系统要实现以下功能:键盘输入、参数显示、三相电流采集、直流侧电压采集、温度采集、变频指令输出以及保护等。系统对电流、电压、温度进行周期*采样,采样值经过数字信号处理,作为控制器的参数,最后由控制算法得出控制量,经PWM和D/A转换器发送给变频器,形成反馈闭环控制。系统运行过程中实时显示电流、温度等参数,并可以通过键盘对控制器进行参数在线设定。另外,高温、过流等保护功能必不可少。系统原理如图1。控制器根据直流侧电容C上电压的大小来确定以哪一种控制结构运行。当直流侧电压不超过设定值时,系统以电动状态运行。超过设定值时要以回馈制动方式运行,要求两种工作状态要互锁,切换要准确、及时。

1.3任务的创建及变结构控制的实现

根据功能要求,本着尽量减少任务数以减轻CPU运行负担的原则,本文设计了AD采集、电动运行、回馈制动和显示四个任务。另外还设计了两个中断服务子程序:用PortA口的中断功能实现8个键盘输入,用外部中断IrqA实现短路、过流、缺相保护功能。

每个任务都有自己的名称、内存空间和优先级。不同的任务必须有不同的优先级,它们可以是0~62之间的任意值,数值越小优先级越高。优先级的设置有不同的依据,以本文为例,回馈运行任务对时间要求最苛刻,如果不能及时启动或过早结束都会对变频器造成危害,所以其优先级设为最高;AD采集任务运行最频繁,必须为其它任务提供可靠的参数,优先级设为次高;电动运行任务是常规运行状态,优先级低于AD采集任务;显示任务只实现人机交互,显示状态和参数对控制器*能没有直接影响,优先级设为最低。μC/OS-Ⅱ要求为每个任务分配OS_STK类型的堆栈空间,并且它们占用的RAM存储空间必须是连续的。

 

第3篇:实时*作系统μC/OS-II在MCF5272上的移植

作为一个实时内核,μC/OS从1992年开始为人们熟悉,到现在已经发展为μC/OS-II。ΜC/OS-II最多支持56个任务,其内核为占先式,总是执行就绪态的优先级最高的任务,并支持Semaphore(信号量)、Mailbox(邮箱)、MessageQueue(消息队列)等多种常用的进程间通信机制。与大多商用RTOS不同的是,μC/OS-II公开所有的源代码,并可以免费获得,对商业应用收取少量License费用。一般商用*作系统如VxWorks、pSOS、WinCE,购买费用动辄数万美元,而且每件产品都需要交纳运行费,开发、使用成本高昂。

目前MCF5272是Motorola公司一款集成度最高的ColdFire处理器,采用ColdFireV2可变长RISC处理器核心和DigitalDNA技术,在66MHz时钟下能够达到63Dhrystone2.1MIPS。其内部SIM(SystemIntegratedModule)单元集成了丰富的通用模块,如10/100MHz快速以太网控制器,USB1.1接口等,并且能够与常用的*设备(如SDRAM、ISDN收发器)实现无缝连接,从而简化了*电路设计,降低了产品成本、体积和功耗。

使用GNU工具链(包括交叉编译器GCC、汇编器AS等)进行μC/OS-II内核的编译,Host(宿主机)环境为16MBSDRAM。在宿主机上编译出MCF5272处理器的可执行代码,通过MCF5272的BDM调试工具下载到目标板调试运行。

1μC/OS-II系统结构

图1说明了μC/OS-II的软硬件体系结构。应用程序处于整个系统的顶层,每个任务都可以认为自己独占了CPU,因而可以设计成为一个无限循环。μC/OS-II处理器无关的代码提供μC/OS-II的系统服务,应用程序可以使用这些API函数进行内存管理、任务间通信以及创建、删除任务等。

大部分的μC/OS-II代码是使用ANSIC语言书写的,因此μC/OS-II的可移植*较好。尽管如此,仍然需要使用C和汇编语言写一些处理器相关的代码。μC/OS-II的移植需要满足以下要求:

(1)处理器的C编译器可以产生可重入代码;

(2)可以使用C调用进入和退出CriticalCode(临界区代码);

(3)处理器必须支持硬件中断,并且需要一个定时中断源;

(4)处理器需要能够容纳一定数据的硬件堆栈;

(5)处理器需要有能够在CPU寄存器与内存和堆栈交换数据的指令。

移值μC/OS-II的主要工作就是处理器和编译器相关代码以及BSP的编写。

2μC/OS-IIDSP编写

BSP(板级支持包)是介于底层硬件和*作系统之间的软件层次,它完成系统上电后最初的硬件和软件初始化,并对底层硬件进行封装,使得*作系统不再面对具体的*作。

为μC/OS-II编写一个简单的BSP。它首先设置CPU内部寄存器和系统堆栈,并初始化堆栈指针,建立程序的运行和调用环境;然后可以方便地使用C语言设置MCF5272片选地址(CS0~CS7)、GPIO以及SDRAM控制器,初始化串口(UART0)作为默认打印口,并向*作系统提供一些硬件相关例程和函数如dprintf(),以方便调试;在CPU、板级和程序自身初始化完成后,就可以把CPU的控制权交给*作系统了。

MCF5272处理器将系统上电作为2号异常,因此需要在异常矢量表中相应位置填写第一条命令的物理地址,这可以在编译时自动完成。该矢量表必须存放在CS0对应的FLASH中供CPU上电时自动读取。如:

_vectors://矢量表起始地址

.long0x0,_start,_fault,_fault,…//初始化1K字节矢量表

……

_start:nop//第一条指令

move.w#0x2700,%sr//屏蔽所有中断