• 嵌入式整流模块控制器设计

    0引言
          虽然目前通信电源产品中嵌入式控制系统的研发技术比较成熟,但是同一系列(如DUM系列)不同功率型号的产品具有不同的性能参数,以致控制系统采用不同的控制方法;同时,在以往的产品研发过程中,不同的嵌入式系统工程师具有不同的软硬件设计思想,带来了芯片应用、电路体系、软件结构的差异。这两方面问题造成产品的统一管理、统一维护与升级困难,成本提高。
          针对上述嵌入式控制系统兼容性和扩展性考虑不周的问题,结合8位AVR单片机的资源优势以及源代码开放的μC/OS-II实时操作系统内核的强健性和移植性,本文提出了嵌入式控制系统中基于AVR+μC/OS-II的整流模块控制器设计方法。利用AVR资源丰富、运行速度快、编程灵活、调试方便的特点来满足该控制器的功能与可靠性要求。采用C语言和汇编语言相结合的方法,将μC/OS-II实时操作系统移植入AVR,在保证系统性能的同时,将软件开发统一化、规范化,缩短了产品研发周期,易于产品维护升级,降低了成本。
    1组成及工作原理
          DUM系列通信电源的嵌入式控制系统由主控制器、整流模块控制器(简称“模块控制器”)等组成。主控制器是中央处理子系统。模块控制器是联结主控制器与整流模块(简称“模块”)之间的数据通信、信号采集与指令控制的子系统,其功能由硬件和软件两部分协调完成。硬件上不同功率型号通信电源产品的模块控制器架构完全一致;软件上使用μC/OS-II完成数据处理及任务调度。具体的工作原理是:AVR依次采集并转换模块的状态信号,检测在位和模块告警信号,以此构造状态帧,通过RS485串行总线发送到主控制器,同时接收并解析主控制器发来的模块调压、限流和开关机控制信号帧,最后向模块发送和执行这些控制信号。下面结合图1,具体说明主控部分的特点,其余部分详见文献[1]。
    主控部分MCU芯片采用ATMEL公司的ATmega16L。它具有如下特点[2]:
    (1) 丰富片内资源:片内配置16KB Flash ROM、512B EEPROM、1KB RAM,8通道10-bit ADC,16-bit Counter/Timer(可作PWM通道),有USART、SPI等接口。为μC/OS-II提供充足的程序空间;丰富的片内外设减少了AVR外围电路,使控制器组态简单,稳定可靠。
    (2) 高速、低辐射、低功耗:采用8-bit增强的RISC结构和Harvard结构,具有1MIPS/MHz性能,晶振频率低(最大工作频率为8MHz)。
    (3) 强大的C语言支持能力:结合1KB片内RAM、硬件乘法器,以及优秀的C编译器,有助于生成快速、高效代码。为μC/OS-II的运行提供充足的堆栈空间,程序可读性和兼容性得到保证。
    (4) 支持JTAG在线下载调试,从而缩短开发周期,降低产品成本。
    2软件设计
    模块控制器的软件设计步骤为:第一,将所实现的功能划分成若干用户任务;第二,以μC/OS-II为操作系统,将它移植入ATmega16L并进行配置;第三,编写用户任务和中断程序;第四,在系统上编译、调试程序。
    2.1 μC/OS-II的移植和配置
          μC/OS-II是一个实时性强的操作系统内核,其软硬件体系结构如图2所示。应用程序处于顶层,每个任务都可以独占处理器,因此设计成无限循环。μC/OS-II处理器无关代码提供操作系统服务,应用程序可以使用这些服务函数进行创建和删除任务、任务间通信以及内存管理等操作。μC/OS-II的大部分代码使用C语言编写,与处理器相关的实时操作使用汇编语言编写。用户可将μC/OS-II内核裁减为满足功能的最小系统。
    图2  μC/OS-II的软硬件体系结构
    将μC/OS-II移植入AVR,需要修改OS_CPU.H、OS_CPU_C.C和OS_CPU_A.S这三个与MCU相关的文件,并根据控制器功能需求配置μC/OS-II,即修改OS_CFG.H文件[3]。
    2.2 任务功能
         将控制器的功能划分成5个用户任务,指定任务优先级,优先级的制定原则是任务的重要性和实时性。μC/OS-II最多支持64个优先级,每个任务赋予1个优先级,其中用户优先级为4~OS_LOWEST_PRIO-3。本控制器的用户优先级选择范围是4~8。各用户任务分别为:
    (1) 创建用户任务的任务AppTaskStart():初始化操作系统时钟节拍、初始化硬件、创建用户任务。这是开启多任务调度OSStart()之后第一个被执行的任务,优先级为4。
    (2) 产生PWM波的任务SetPWMOutTask():产生PWM调压、限流波输出值,优先级为5。
    (3) 处理模块在位和告警信号的任务GetWarnStatusTask():采集模块的在位信号和告警信号,优先级为6。
    (4) 模块状态采集的任务RctMeasureTask():片内ADC采集并量化模块电流状态信号,优先级为7。
    (5) 处理模块开关机的任务PowProcessTask():解析并向模块执行主控制器发来的开关机信令,优先级为8。
    这里以创建用户任务的任务为例,介绍用户任务程序编写方法。其主要代码如下:
    static void AppTaskStart(void *pdata)
    {
    (void)pdata;        // 防止编译器告警
    OSTickISR_Init();   // 初始化操作系统时钟节拍
    AppIOInit();         // 硬件初始化
    AppTaskCreate();       // 创建用户任务
    while (1)           // 任务体(无限循环体)
    {
    OSTimeDly(10);    // 本任务延时100ms,同时让下一个最高优先级的就绪态任务执行
    }
    }
    2.3 中断程序
          时钟节拍中断:操作系统通过时钟节拍来实现计时以及延时操作,AVR工作频率为8MHz,取一个时钟节拍为10ms。必须创建一个用户任务并开启多任务调度OSStart()之后才能开启时钟节拍中断,否则系统可能崩溃。
          USART接收完成中断:接收并解析主控制器发来的命令数据帧。USART发送完成中断:构造模块状态信息帧,发送到主控制器。这2个中断通过全局变量与用户任务通信。
    2.4 兼容与扩展
          如果本控制器的某个功能需要改进,则直接修改相应的任务函数即可;如果要为本控制器添加新功能,则直接创建新任务,赋予优先级,在新任务函数中加入新功能的源代码即可。这就为系统软件的维护与升级提供了方便快捷的途径。
          本控制器采用统一的数据结构,采用统一的适用于不同型号模块的控制处理过程。另外,按照通信协议,本控制器向主控制器发送请求模块配置帧,然后接收主控制器发回的配置信息来配置被控模块参数。
    3结论
          本文结合AVR单片机和μC/OS-II实时操作系统的优点,设计出基于AVR+μC/OS-II的嵌入式模块控制器,它具有软硬件设计的兼容性强和易于扩展等突出特点,为DUM系列不同功率型号通信电源产品的开发、维护和升级节省了时间和费用。自2005年6月至今试用于DUM48-15B、25D、30D等通信电源产品中,其性能稳定,采样精度高,告警、控制准确度100%,通信误码率低,取得了很好的应用效果。
    参考文献:
    [1]       张屿, 毛征, 刘瑞东. 基于AVR单片机的整流模块控制器设计与实现. 中国电子学会第十一届青年学术年会论文集, 2005.
    [2]       Atmel Corporation. ATmega16(L) Datasheet.
    [3]       Jean J. Labrosse 著, 邵贝贝 等 译. 嵌入式实时操作系统μC/OS-II (第2版). 北京: 北京航空航天大学出版社, 2003.
    张屿:硕士,研究方向为嵌入式系统。


     
     
    网站首页  |  关于我们  |  联系我们  |  广告服务  |  版权隐私  |  友情链接  |  站点导航