基于μC/OS-II的数字化UPS设计
速采集。利用LF2407A的SCI 异步通讯接口,采用RS-485 物理标准协议,实现UPS与主机的远程通讯,以便对UPS设备状态、各项参数及故障信息进行查询。 (5) 键盘操作及液晶显示:提供人机对话平台,用户通过键盘操作可设置运行模式、设备通信地址等信息;液晶显示屏以图文方式显示工作状态和参数信息,提供可视化菜单。 (6) 实时时钟:利用串行外设接口SPI 实现与LF2407A控制器的通信,为整个系统提供统一、标准的时钟基准,另外,利用时钟芯片的存储器来存储系统掉电保护参数。 3 μC/OS-II在LF2407A上的移植 μC/OS-II的硬件和软件体系结构如图2所示。 图2 μC/OS-II的硬件和软件体系结构图 要使μC/OS-II正常运行,LF2407A满足以下要求:处理器的C编译器能产生可重入代码,支持可扩展和可链接汇编语言模块;用C语言就可打开和关闭中断;处理器支持中断,并能产生定时中断;处理器有将堆栈指针以及其他CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。 由于μC/OS-II 是源码公开的操作系统,且其结构化设计便于把与处理器相关的部分分离出来,因此μC/OS-II在LF2407A处理器上移植的主要工作是修改与处理器相关部分的代码。由图2 可以看出,它们主要集中在三个文件中:头文件OS_CPU.H、C 文件OS_CPU_C.C、汇编文件OS_CPU_A.ASM. (1) 修改OS_CPU.H:其中包含两部分的代码,数据类型定义代码和与处理器相关的代码。LF2407A的堆栈数据类型定义为:typedef unsigned intOS_STK;所有的堆栈用OS_STK 声明,地址由高向低递减,OS_STK_GROWTH设置为1. OS_CPU.H 剩下部分是移植必须定义底层函数的声明,为使低层接口函数与处理器状态无关,同时使任务调用相应的函数不需知道函数位置,采用软中断指令SWI作为底层接口,使用不同的功能号来区分各函数。其定义格式如下: __swi (0x00) void OS_TASK_SW(void);//任务切换函数 其中,swi 为软中断标志,0x00 是分配的中断号,OS_TASK_SW 是函数名,两个void 分别表示返回类型和参数类型。其它的底层函数接口定义与此相似。 (2)修改OS_CPU_C.C:初始化任务堆栈函数和软中断函数的实现。修改OSTaskStkInit()函数,代码如下: OS_STK *OSTaskStkInit (void (*task)(void*pd), void *pdata, OS_STK *ptos, INT16U opt) { 模拟带参数(pdata)的函数调用;定义任务堆栈;使用满栈递减方式初始化任务堆栈结构;返回堆栈结构;} 软中断函数的实现: void SWI_Exception(int SWI_Num, int *Regs) { /*根据不同Num 值(功能号)跳转到不同的底层服务函数地址,如:*/ case 0x00:任务切换函数OS_TASK_SW;} (3)修改OS_CPU_A.S:包括4 个简单的汇编语言函数:OSStartHighRdy():使就绪态任务中优先级最高的任务开始运行;OSCtxSw():实现任务级的任务切换功能;OSIntCtxSw():在中断级实现任务间的切换;OSTickISR():时钟节拍中断服务子程序。 (5) μC/OS-II主程序框架:调用任何服务之前,μC/OS-II 要求首先调用系统函数OSInit()初始化所有变量和数据结构,同时建立一个空闲任务。多任务的启动通过OSStart()实现,但启动前至少需建立一个应用任务。当调用OSStart()时,OSStart()从任务就绪表中找出用户建立的优先级最高任务的任务控制块,然后调用任务启动函数,接下来就完全交给实时操作系统来管理,实时内核不断地对任务进行切换调度,管理各个应用任务和系统资源。系统主程序清单如下: 5 实验结果 根据前述控制系统设计,成功研制了一台3.75KVAUPS 样机。以下为该样机实时性、可靠性、稳定性测试运行情况,测试设备与仪表包括:泰克TDS3043B 数字示波器、Gad-2016 失真度测试仪、FLUKE189 数字万用表、FLUKE36 钳型电流表、红外线温度计、负载三相3KW 灯泡(约3.75KW炉丝)。 (1)市电输入380V,负载变化:输出相电压稳定度220V±1%,U 相频率稳定度50Hz±0.4%,波形失真度2%,其他两相与U 相基本相同,任何两相相位差120°±1°。图5 为空载与满载逆变输出波形。 (a) 空载 (b) 满载 图5 U相输出逆变电压波形。 (2)市电逆变互切,切换时间及可靠性测试:市电输入384V,电池电压490V,3.75KW额定负载运行,市电断电或按下强起按钮,逆变器带负载正常启动,启动时间约60ms.市电、逆变切换时间经多次反复试验,均小于120ms.图6 所示为市电到逆变的切换波形,切换时间约60ms,图中波形经检测变压器隔离降压;市电来电,逆变器立即停止工作。 图6 市电到逆变的切换波形 (3)逆变应急长时间工作,输出电压情况测试与系





- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
