摘 要:针对传统的应急电源控制系统设计的复杂性和运行不可靠性,本文介绍了一种采用全数字控制方法,用ARM+uC/OS-II设计并实现应急电源的控制系统。实验证明:据此设计的控制系统控制精确、快速、波形失真度小、动态响应快、具备自我保护功能且工作稳定可靠。
引言
虽然目前应急电源模拟技术比较成熟,但是由于逆变控制多采用模拟电路,因此具有控制电路复杂、调试困难、系统难以在线升级的局限性。而以微处理器为核心,以全数字化方法实现整个应急电源控制(包括SPWM波形的产生、输出频率以及PID控制算法等)的技术,易于实现计算机的处理和控制,便于修改控制策略、修改控制参数,也便于故障监测、自诊断、纠错、通信等技术的植入,而且大幅度减少了零件的数量,从而大大减少了因元器件而造成的系统故障,提高了可靠性。
针对传统应急电源控制系统的局限性,结合32位ARM单片机的资源优势以及源代码公开的uC/OS-II实时操作系统内核的强健性,本文设计出基于ARM+uC/OS-II的应急电源控制系统。利用LPC2292 (ARM 32位单片机)资源丰富、运行速度快、计算精度高、编程灵活、性价比高的特点,来满足应急电源高性能、高可靠性的要求。采用C语言与汇编语言相结合的方法,在ARM上移植uC/OS-II实时操作系统,在不降低系统性能的同时,将软件开发标准化、规范化、简单化,缩短了产品开发时间。
图1 控制系统的硬件结构框图
图2 逆变器的桥式功放驱动电路
系统控制框图
LPC2292是飞利浦生产的具有ARM7DMI-S内核的CPU,内部有256KB的FLASH、16KB的静态RAM及6路PWM,最高工作频率为60MHz,正是这种高速运算能力使复杂的控制规律算法得以实现。基于ARM+uC/OS-II的应急电源控制系统由基于PC+ARM的运算控制单元、基于IMP的功率变换单元、显示及键盘单元和电压电流检测单元等组成,其硬件结构框图如图1所示,其中Vi、Vb、Vo、Io用于检测市电、备用电池、逆变输出电压和负载电流。
功率变换单元
逆变器的桥式功放驱动电路如图2所示,其中两个IGBT模块是由50Hz方波脉冲驱动的低速IGBT模块(Q1和Q2)和由20kHz脉宽调制脉冲驱动的高速IGBT模块(Q3和Q4)。当Q1和Q4导通,Q2和Q3关断时,就可获得对应正弦波正半波的脉宽调制脉冲;相反,当Q2和Q3导通,Q1和Q4关断时,就得到对应于正弦波负半波的脉宽调制脉冲。在上述两串脉冲的调控下,就得到了50Hz脉宽调制的交变电源。
采用规则采样法,脉冲宽度计算公式为:
其中Usm为正弦波的幅值,Utm为三角波的幅值,N为载波比。
交变电源的高次谐波幅值为:
由(2)式可以看出N越大,高次谐波幅值越小。基于IGBT的器件特性,N不能无限大,取N=400,则高次谐波幅值Um(n)很容易被滤波器滤去。考虑到处于开关工作状态中的IGBT管从开通转为截止状态时,容易产生较长的“拖尾”现象,并进而导致IGBT因瞬时功耗偏大而影响UPS逆变器的可靠性,因此,在实际的逆变器控制电路中,为了保证处于同一直流总线电压之间的Q1和Q2均能实现可靠的导通和截止,应在控制逻辑上保证加到Q1和Q2管上的两串驱动脉冲之间有很小的“死区”时间。所以在用公式(1)来计算方波的脉宽时,电源电压的谐波影响会增加。为了消除这一影响,在系统中加入反馈环节,把实际输出的电压经采样送回控制器,用PI调节消除系统的静态误差,增加系统的稳定性。
软件设计
uC/OS-II是一个实时操作系统的内核,它的大部分源代码都是使用ANSI C写的,有很强的移植性。它的内核功能丰富,具有可裁减性,用户可根据自身需要来配置编译条件,将实时内核裁剪到满足自己功能的最小状态。所有的uC/OS-II函数调用与服务的执行时间是可知的,不依赖应用程序任务的多少。任何实时操作系统的使用,主要完成两大工作:第一,根据所选CPU芯片的特点,将操作系统移植到该CPU上;第二,根据功能需求,划分任务,并设计任务之间的同步通信。由于篇幅有限,uC/OS-II在ARM上的移植在这里不作阐述,下面论述本系统的各任务程序以及中断程序。
系统各任务功能
应急电源控制系统的功能主要分为:SCI通信任务SCIComm_Task()、LCD液晶屏刷新任务LCD_fresh_Task()、脉宽计算任务PW_Calculate_Task()、逆变器输出电压采集任务Vo_Sample_Task()、键盘扫描任务Key_Scan_Task()、时钟更新任务Time_Fresh_Task()、市电电压采集以及监测任务Vi_Sample_Task()。任务优先级的确定原则是工作频率越高,任务的优先级越高,但过载保护除外。这些任务的优先级从高到低排列分别是Vi_Sampling_ Task()、Vo_Sampling_Task()、PW_Calculate_Task()、Key_Scan_ Task()、SCIComm_Task()、LCD_ fresh_Task()、Time_Fresh_Task()。任务之间的通信是通过发送或接收消息、信号量或数据队列来实现的。由于篇幅有限,这里只介绍数据采集任务Vo_Sampling_Task()。
void Vo_Sampling_Task(void)
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
int Volt;
for(;;){
Volt= Volt_Sample();
if(QueueWrite((void *)QueueBuf, Volt)==QUEUE_FULL){
OSTimeDly(4);
}
}
数据采集任务Vo_Sampling_ Task()中用OSTimeDly()函数实现4个节拍延时,即每隔4×0.5=2ms任务执行一次,这就保证了20ms采样10个点的取样速率。
中断程序
时钟节拍中断:操作系统要有时钟节拍来实现计时以及延时,本系统CPU工作频率是40MHz,取时钟节拍的频率2000Hz,即一个时钟节拍为0.5ms,用定时器2定时来实现。系统必须创建用户的一个任务才能开启定时器2,不然系统可能崩溃。
脉宽定时中断:由于高速IGBT的驱动信号为20kHz,用任务没有办法实现,因此实现此功能采用定时器1。每次中断时,把下一个脉冲宽度写入周期影子寄存器中。但是脉宽定时中断是在市电掉电时,由市电电压采集任务以及监测任务Vi_Sample_Task()开启的。
保护中断:为了在系统出现故障(过压、过流、过热)时,避免IGBT模块受到损坏,必须及时进行相应处理。此中断信号由IMP模块产生,经中断EINT1通知CPU,把此中断设为ARM的快速中断,由于它有最高优先级以及有专用的寄存器,因此响应速度很快,能最大限度地保护系统。
结语
本文结合ARM芯片和uC/OS-II实时操作系统内核的优点,设计出基于ARM和uC/OS-II 的应急电源控制系统。通过在ARM上移植uC/OS-II,系统设计的周期得以减少,软件的可读性得以提高,从而节省了系统开发和维护的费用。目前,该系统实际运行平稳可靠,获得了很好的应用效果。■
参考文献
1 Mohan, Undeland and Robbin. Power Electronic: Converters, Application and Designed. JOHN WILEY & SONS, 1989
2 Kou. Digital Control System. Sanders COLLEGE PUBLISHING, 1992
3 李成章.现代UPS电源及电路图集.北京:电子工业出版社,2001. 1-182
4 王田苗.嵌入式系统设计与实例开发:基于ARM微处理器与uC/OS-II实时操作系统. 北京:清华大学出版社, 2002.1-260