基于μC/OS-II+NiosII的电力谐波分析仪的研究
2011-11-17
作者:张文婷1,宋泽琳2,马令坤2
来源:来源:微型机与应用2011年第15期
摘 要: 在传统的电力系统谐波分析中,多采用单任务无顺序机制,此机制使系统的安全性质量得不到完全保证, 常常出现安全性差的问题。针对此问题,引入具有强实时性和抢占式多任务的嵌入式操作系统μC/OS-II作为操作平台、采用快速傅里叶变换(FFT)的谐波检测方法、通过μC/OS-II在NiosII上的移植可以使得系统的稳定性和实时性有很大的改善,从而使得谐波测量更加精确。
关键词: μC/OS-II;FFT;NiosII;谐波分析
近年来,随着电力电子技术的快速发展,各种电力电子装置在电力系统、工业、交通及家庭中的应用日益广泛,加之随着高压直流输电技术的应用和整流器、变频调速器等大量非线性负载的使用,使电网中产生了大量的高次谐波,造成了电压电流波形发生严重的畸变。当电网中存在的谐波成分超过限制标准时,将严重影响电力系统和用电设备运行的安全性、可靠性、稳定性和经济性,同时也严重污染了周围的电气环境。而关于谐波的问题涉及许多方面,其中谐波检测是谐波问题的一个重要分支,也是解决其他谐波问题的重要前提[1]。因此,对于谐波分析装置的研究对谐波污染的治理具有重要的意义。
目前,在对电网的谐波进行在线检测和分析时,常采用采样数字式分析装置,在其系统软件设计中,多采用单任务无顺序机制。这种机制使系统的安全性得不到完全保证,常常出现安全性差的问题[2]。而这个问题对于稳定性、实时性、准确性、快速性要求很高的谐波分析装置来说是不允许的。因此,在系统设计中,引入具有强实时性和抢占式多任务的嵌入式操作系统μC/OS-II作为操作平台,可以使系统的稳定性有很大的改善,使应用程序模块化,从而提高代码的可读性、可扩展性和可移植性,加快了程序开发的速度[3]。
本文分析了电力系统谐波测量要求以及μC/OS-II在NiosII上的移植来实现精确的谐波检测。
1 系统设计
1.1 μC/OS-II实时操作系统简介
μC/OS-II是基于优先级的抢占式实时多任务内核,优先级算法效率高,任务切换速度快,其性能与其他商业内核类似,其特点与优势可以概括为以下几个方面[4]:
(1)公开源代码:源代码清晰易读且结构协调,注解详尽,组织有序。
(2)可移植性:μC/OS-II源码绝大部分是用移植性很强的ANSI C编写的,而与微处理器硬件相关部分则采用汇编语言编写,并且压到了最低限度。只要该处理器有堆栈指针,有CPU内部寄存器入栈出栈指令就可以移植μC/OS-II。
(3)可裁剪:可以只使用μC/OS-II中应用程序需要的那些系统服务。这种可裁剪性是靠条件编译实现的。
(4)占先式:μC/OS-II完全是占先式实时内核,即总是运行就绪条件下优先级最高的任务。
(5)多任务:可以管理64个任务,但系统保留了8个任务,应用程序最多可以有56个任务。赋予每个任务的优先级必须是不相同的。
(6)可确定性:全部μC/OS-II的函数调用和服务的执行时间具有可确定性,即它们的执行时间是可知的,也就是说,μC/OS-II系统服务的执行时间不依赖于应用程序任务的多少。
(7)任务栈:每个任务有自己单独的栈,μC/OS-II允许每个任务有不同的栈空间。
(8)系统服务:μC/OS-II提供多种系统服务,如邮箱、消息队列、信号量、块大小固定的内存的申请与释放、时间相关函数等。
(9)中断管理:中断可使正在执行的任务暂时挂起,中断嵌套层数可达255层。
(10)稳定性与可靠性:μC/OS-II是基于μC/OS的,μC/OS自1992年以来己有好几百个商业应用。
1.2 硬件平台简介
在本电力谐波分析系统中,其中包括嵌入式微处理器(嵌入式软核处理器NiosII)、FFT运算单元和对采集数据进行处理的信号处理电路,该信号处理电路包括信号获取电路、调理电路和采样转换电路,其中:信号获取电路包括精密电压互感器和精密电流互感器,精密电压电流互感器的输入端用于接收采集的电压电流信号,输出端接调理电路输入端,如图1所示。
从现场取来的电压和电流信号,首先进入精密电压、电流互感器组U1,电压和电流信号经其进行降压限流处理后进入信号调理电路U2;信号调理电路U2可由精密电阻和电位器配合高精度集成运放AD574组成,以完成对电压信号的电平调整;经过精密电压、电流互感器U1、信号调理电路U2处理后,从现场取来的高压、大电流信号就转换成适合后续电路处理的弱电信号,接着该弱电信号进入低通抗混叠滤波电路U3,低通抗混叠电路U3主要由低通抗混叠滤波器组成,用于滤除高频信号成分,使输入到后级电路中的AD转换器的信号为有限带宽信号,该电路U3是以很小的衰减让有效的频率信号通过,而抑制这个频带以外的频率信号,从而防止信号的频谱发生混叠及高频干扰。在本系统中,低通抗混叠滤波电路U3采用低通抗混叠滤波集成电路Max293低通滤波器,再由后级电路中AD转换器本身各通道都具有内置的抗混叠滤波器并采用∑-△以及过采样技术,使得本系统具有良好的抗干扰能力和抗混叠性能,保证了FFT运算能够得到准确的结果。
1.3 μC/OS-II文件结构与硬件平台关系
μC/OS-II的内核文件结构与硬件平台的关系如图2所示。可以看出,μC/OS-II内核介于硬件平台和用户应用程序之间,通过与CPU相关的几个模块与硬件平台进行交互,为用户应用程序提供良好的应用程序接口(API)[5]。
操作系统把系统软件和硬件部分隔离开来,这样就使得系统的设备操作程序与硬件设备无关,从而大大提高了系统的可移植性。而且软硬件的测试工作都可分别基于操作系统来完成,使得软硬件系统并行进行测试成为可能。
2 μC/OS-II内核向NiosII的移植操作
所谓移植,就是使一个实时内核在某个微处理器或微控制器上运行,为了方便移植,μC/OS-II大部分的代码用C语言写,但仍需要用汇编语言写一些与处理器相关的代码,这是因为μC/OS-II在读写处理器寄存器时只能通过汇编语言来实现。
μC/OS-II可以看作是一个多任务的调度器,在这个任务调度器上添加了和多任务操作系统相关的一些系统服务。μC/OS-II的设计分为与处理器类型无关的代码、与处理器类型相关的代码和与应用程序有关的配置代码三部分。这也是μC/OS-II具有良好的可移植性的原因。移植工作主要集中在多任务切换的实现上。这部分代码主要是用来保存和恢复处理器现场(即相关寄存器),因此不能用C语言,只能使用特定处理器的汇编语言完成。在NiosII上移植μC/OS-II只需修改三个和Nios体系结构相关的文件即可[6,7]。下面分别介绍这三个文件的移植工作。
2.1 OS_CPU.H文件
这部分的移植是和所用的编译器相关的,本文使用的编译器是nios-elf-gcc。需要定义的数据类型包括无符号和有符号的8 bit、16 bit和32 bit整型变量等。
因为处理器现场的寄存器在任务切换时都将被保存在当前运行任务的堆栈中,所以OS_STK数据类型应该与处理器的寄存器长度一致。
typedef unsigned int OS_STK;
堆栈由高地址向低地址增长,这和选择的编译器有关。
#define OS_STK_GROWTH 1
宏定义(包括开、关中断的宏定义,以及进行任务切换的宏定义):
#define OS_ENTER_CRITICAL()disable_interrupt();
#define OS_EXIT_CRITICAL()enable_interrupt();
#define OS_TASK_SW()OSCtxSw
2.2 OS_CPU_C.C文件
该文件必须实现任务初始化时的堆栈设计,也就是在堆栈增长方向上如何定义每个需要保存的寄存器的位置。本文将堆栈空间设计为按任务堆栈空间由高至低依次保存寄存器ra、ISTATUS、r1~r31。
该文件还需要实现几个操作系统规定的hook函数,通常都实现为空函数。
2.3 OS_CPU A.ASM文件
(1)OSStartHighRdy()函数
此函数是在OSStart()多任务启动后,负责从最高优先级任务的TCB控制块中获得该任务的堆栈指针sp,通过sp依次将CPU现场恢复。这时系统就将控制权交给用户创建的该任务进程,直到该任务被阻塞或者被其他更高优先级的任务抢占CPU。该函数仅仅在多任务启动时被执行一次,用来启动优先级最高的任务执行,以后多任务的调度和切换就由下面的函数来实现。
(2)OSCtxSw()函数
任务级的上下文切换。它是当任务因被阻塞而主动请求CPU调度时被执行的。它的工作是先将当前任务的CPU现场保存到该任务堆栈中,然后获得最高优先级任务的堆栈指针,从该堆栈中恢复此任务的CPU现场,使之继续执行。
(3)OSIntCtxSw()函数中断级的任务切换,它是在ISR(中断服务例程)中执行任务切换。当发现有高优先级任务就绪,则在中断退出后并不返回被中断的任务,而是直接调度就绪的最高优先级任务执行。这样做的目的是能够尽快地让高优先级的任务得到响应,保证系统的实时性。其原理基本上与任务级的切换相同,但是由于进入中断时已经保存过被中断任务的CPU现场,因此这里就不用再保存。
(4)OSTickISR()函数
时钟中断处理函数。它的主要任务是负责处理时钟中断,调用系统实现的OSTimeTick函数,如果有等待时钟信号的高优先级任务,则需要在中断级别上调度其执行。
(5)OS_ENTER_CRITICAL和OS_EXIT_CRITICAL()函数
该函数分别是进入临界区和退出临界区的宏指令。主要用于在进入临界区之前关中断,在退出临界区的时候恢复原来的中断状态。
本文将实时嵌入式操作系统μC/OS-II作为操作平台,实现在NiosII上的移植,用于在电力系统谐波分析中的精确检测。该电力谐波分析仪不但可以对电网进行实时在线谐波分析,而且可以对数据进行远传,具有精度高、运行稳定、实时性好、抗干扰能力强、性价比高等特点,特别是它具有高稳定性和强实时性,为解决电力谐波问题提供了一种有效的分析装置。
参考文献
[1] 肖雁鸿,毛筱,周靖林,等.电力系统谐波测量方法综述[J].电网技术,2002,26(6):61-64.
[2] 吴茂存.基于FPGA的电力系统谐波检测[D].济南:山东科技大学,2002.
[3] 潘松.SOPC技术实用教程[M].西安:西安电子科技大学出版社,2006:220-222.
[4] 王建校,危建国.SOPC设计基础与实践[M].北京:中国标准出版社,1993:2-13.
[5] 黄燕平.μC/OS-II ARM移植要点详解[M].北京:北京航空航天大学出版社,2005:9-18.
[6] 陈桂.μC/OS-II的内核结构及系统研究[D].重庆:重庆大学,2005.
[7] 孙恺.NiosII系统开发设计与应用实例[M].北京:北京航空航天大学出版社,2007:259-262.