首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

基于μC/OS-II的数字化UPS设计与实现方案 02

基于μC/OS-II的数字化UPS设计与实现方案 02

(3) 数字化UPS 中断:设计3 个硬件中断,一个是AD 采样中断,优先级最高,采用自适应频率方式每周期采样32 个点;另一个是系统时钟节拍中断,优先级次之,每10ms中断一次作为系统时钟;最后是通信中断,优先级低,当接收到外部数据时,便发生中断并对接收的数据进行处理。

    (4)任务间通信与同步:采用访问共享数据资源的方式实现多任务间的通信,采用信号量进行任务间的同步。为实现任务间的同步,本软件系统建立了3个信号量:

    数据计算信号量OSPWMCntSem,用于任务1和数据采集PWM 波计算子程序通信。每完成一次中断采样便发出这个信号量,告诉任务1对 采集数据和PWM波进行计算处理。


    图4 任务调度流程图。

    通信信号量OSComSem,用于任务3 和通信中断子程序进行通信。一旦接收到上位机发过来的信号,中断子程序就发出这个信号量,告诉任务4对接收数据进行处理。

    键盘信号量OSKeySem,用于任务6 和任务7 通信,一旦扫描到有键按下则发出该信号量告诉任务7做键盘处理。


    图 1 数字化UPS系统总体框图

    (1)A/D转换:完成对市电输入的交流电压、电流信号、逆变输出的交流电压、电流信号、电池电压和电流信号的采样,是系统数字化控制实现以及UPS远程监控功能的基础。根据LF2407A A/D转换电平要求,被采样信号必须通过信号检测模块变换为0~3V直流电平。为提高系统性能,对输入/输出电压、电流进行瞬时值采样,采样频率为10kHz.

    (2) PWM 逆变控制:PWM 逆变控制算法是UPS系统控制的核心算法,它决定了UPS系统输出性能。

    逆变算法利用LF2407A 强大的数值运算性能以及高速计算能力实时在线计算出PWM信号脉宽,然后由A事件管理模块(EVA)的全比较单元输出4 路带死区控制的PWM 信号(PWM1~4),这4 路PWM 信号经隔离驱动模块驱动逆变器。

    (3) 锁相控制接口:利用LF2407A的事件捕获端口CAP1 和CAP2,将市电输入和逆变输出经降压及波形变换后送入CAP1 和CAP2,由LF2407A 通过软件锁相环算法实现逆变输出电压与市电电压的同频同相。

    (4) 通信接口:为实现对UPS 的实时监控功能,主机需对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)的函数调用;定义任务堆栈;使用满栈递减方式初始化任务堆栈结构;返回堆栈结构;}

返回列表