基于μC/OS-II+NiosII的電力諧波分析儀的研究
近年來(lái),隨著(zhù)電力電子技術(shù)的快速發(fā)展,各種電力電子裝置在電力系統、工業(yè)、交通及家庭中的應用日益廣泛,加之隨著(zhù)高壓直流輸電技術(shù)的應用和整流器、變頻調速器等大量非線(xiàn)性負載的使用,使電網(wǎng)中產(chǎn)生了大量的高次諧波,造成了電壓電流波形發(fā)生嚴重的畸變。當電網(wǎng)中存在的諧波成分超過(guò)限制標準時(shí),將嚴重影響電力系統和用電設備運行的安全性、可靠性、穩定性和經(jīng)濟性,同時(shí)也嚴重污染了周?chē)碾姎猸h(huán)境。而關(guān)于諧波的問(wèn)題涉及許多方面,其中諧波檢測是諧波問(wèn)題的一個(gè)重要分支,也是解決其他諧波問(wèn)題的重要前提[1]。因此,對于諧波分析裝置的研究對諧波污染的治理具有重要的意義。
目前,在對電網(wǎng)的諧波進(jìn)行在線(xiàn)檢測和分析時(shí),常采用采樣數字式分析裝置,在其系統軟件設計中,多采用單任務(wù)無(wú)順序機制。這種機制使系統的安全性得不到完全保證,常常出現安全性差的問(wèn)題[2]。而這個(gè)問(wèn)題對于穩定性、實(shí)時(shí)性、準確性、快速性要求很高的諧波分析裝置來(lái)說(shuō)是不允許的。因此,在系統設計中,引入具有強實(shí)時(shí)性和搶占式多任務(wù)的嵌入式操作系統μC/OS-II作為操作平臺,可以使系統的穩定性有很大的改善,使應用程序模塊化,從而提高代碼的可讀性、可擴展性和可移植性,加快了程序開(kāi)發(fā)的速度[3]。
本文分析了電力系統諧波測量要求以及μC/OS-II在NiosII上的移植來(lái)實(shí)現精確的諧波檢測。
1 系統設計
1.1 μC/OS-II實(shí)時(shí)操作系統簡(jiǎn)介
μC/OS-II是基于優(yōu)先級的搶占式實(shí)時(shí)多任務(wù)內核,優(yōu)先級算法效率高,任務(wù)切換速度快,其性能與其他商業(yè)內核類(lèi)似,其特點(diǎn)與優(yōu)勢可以概括為以下幾個(gè)方面[4]:
(1)公開(kāi)源代碼:源代碼清晰易讀且結構協(xié)調,注解詳盡,組織有序。
(2)可移植性:μC/OS-II源碼絕大部分是用移植性很強的ANSI C編寫(xiě)的,而與微處理器硬件相關(guān)部分則采用匯編語(yǔ)言編寫(xiě),并且壓到了最低限度。只要該處理器有堆棧指針,有CPU內部寄存器入棧出棧指令就可以移植μC/OS-II。
(3)可裁剪:可以只使用μC/OS-II中應用程序需要的那些系統服務(wù)。這種可裁剪性是靠條件編譯實(shí)現的。
(4)占先式:μC/OS-II完全是占先式實(shí)時(shí)內核,即總是運行就緒條件下優(yōu)先級最高的任務(wù)。
(5)多任務(wù):可以管理64個(gè)任務(wù),但系統保留了8個(gè)任務(wù),應用程序最多可以有56個(gè)任務(wù)。賦予每個(gè)任務(wù)的優(yōu)先級必須是不相同的。
(6)可確定性:全部μC/OS-II的函數調用和服務(wù)的執行時(shí)間具有可確定性,即它們的執行時(shí)間是可知的,也就是說(shuō),μC/OS-II系統服務(wù)的執行時(shí)間不依賴(lài)于應用程序任務(wù)的多少。
(7)任務(wù)棧:每個(gè)任務(wù)有自己?jiǎn)为毜臈#?mu;C/OS-II允許每個(gè)任務(wù)有不同的??臻g。
(8)系統服務(wù):μC/OS-II提供多種系統服務(wù),如郵箱、消息隊列、信號量、塊大小固定的內存的申請與釋放、時(shí)間相關(guān)函數等。
(9)中斷管理:中斷可使正在執行的任務(wù)暫時(shí)掛起,中斷嵌套層數可達255層。
(10)穩定性與可靠性:μC/OS-II是基于μC/OS的,μC/OS自1992年以來(lái)己有好幾百個(gè)商業(yè)應用。
1.2 硬件平臺簡(jiǎn)介
在本電力諧波分析系統中,其中包括嵌入式微處理器(嵌入式軟核處理器NiosII)、FFT運算單元和對采集數據進(jìn)行處理的信號處理電路,該信號處理電路包括信號獲取電路、調理電路和采樣轉換電路,其中:信號獲取電路包括精密電壓互感器和精密電流互感器,精密電壓電流互感器的輸入端用于接收采集的電壓電流信號,輸出端接調理電路輸入端,如圖1所示。
從現場(chǎng)取來(lái)的電壓和電流信號,首先進(jìn)入精密電壓、電流互感器組U1,電壓和電流信號經(jīng)其進(jìn)行降壓限流處理后進(jìn)入信號調理電路U2;信號調理電路U2可由精密電阻和電位器配合高精度集成運放AD574組成,以完成對電壓信號的電平調整;經(jīng)過(guò)精密電壓、電流互感器U1、信號調理電路U2處理后,從現場(chǎng)取來(lái)的高壓、大電流信號就轉換成適合后續電路處理的弱電信號,接著(zhù)該弱電信號進(jìn)入低通抗混疊濾波電路U3,低通抗混疊電路U3主要由低通抗混疊濾波器組成,用于濾除高頻信號成分,使輸入到后級電路中的AD轉換器的信號為有限帶寬信號,該電路U3是以很小的衰減讓有效的頻率信號通過(guò),而抑制這個(gè)頻帶以外的頻率信號,從而防止信號的頻譜發(fā)生混疊及高頻干擾。在本系統中,低通抗混疊濾波電路U3采用低通抗混疊濾波集成電路Max293低通濾波器,再由后級電路中AD轉換器本身各通道都具有內置的抗混疊濾波器并采用∑-△以及過(guò)采樣技術(shù),使得本系統具有良好的抗干擾能力和抗混疊性能,保證了FFT運算能夠得到準確的結果。
1.3 μC/OS-II文件結構與硬件平臺關(guān)系
μC/OS-II的內核文件結構與硬件平臺的關(guān)系如圖2所示??梢钥闯?,μC/OS-II內核介于硬件平臺和用戶(hù)應用程序之間,通過(guò)與CPU相關(guān)的幾個(gè)模塊與硬件平臺進(jìn)行交互,為用戶(hù)應用程序提供良好的應用程序接口(API)[5]。
操作系統把系統軟件和硬件部分隔離開(kāi)來(lái),這樣就使得系統的設備操作程序與硬件設備無(wú)關(guān),從而大大提高了系統的可移植性。而且軟硬件的測試工作都可分別基于操作系統來(lái)完成,使得軟硬件系統并行進(jìn)行測試成為可能。
2 μC/OS-II內核向NiosII的移植操作
所謂移植,就是使一個(gè)實(shí)時(shí)內核在某個(gè)微處理器或微控制器上運行,為了方便移植,μC/OS-II大部分的代碼用C語(yǔ)言寫(xiě),但仍需要用匯編語(yǔ)言寫(xiě)一些與處理器相關(guān)的代碼,這是因為μC/OS-II在讀寫(xiě)處理器寄存器時(shí)只能通過(guò)匯編語(yǔ)言來(lái)實(shí)現。
μC/OS-II可以看作是一個(gè)多任務(wù)的調度器,在這個(gè)任務(wù)調度器上添加了和多任務(wù)操作系統相關(guān)的一些系統服務(wù)。μC/OS-II的設計分為與處理器類(lèi)型無(wú)關(guān)的代碼、與處理器類(lèi)型相關(guān)的代碼和與應用程序有關(guān)的配置代碼三部分。這也是μC/OS-II具有良好的可移植性的原因。移植工作主要集中在多任務(wù)切換的實(shí)現上。這部分代碼主要是用來(lái)保存和恢復處理器現場(chǎng)(即相關(guān)寄存器),因此不能用C語(yǔ)言,只能使用特定處理器的匯編語(yǔ)言完成。在NiosII上移植μC/OS-II只需修改三個(gè)和Nios體系結構相關(guān)的文件即可[6,7]。下面分別介紹這三個(gè)文件的移植工作。
2.1 OS_CPU.H文件
這部分的移植是和所用的編譯器相關(guān)的,本文使用的編譯器是nios-elf-gcc。需要定義的數據類(lèi)型包括無(wú)符號和有符號的8 bit、16 bit和32 bit整型變量等。
因為處理器現場(chǎng)的寄存器在任務(wù)切換時(shí)都將被保存在當前運行任務(wù)的堆棧中,所以OS_STK數據類(lèi)型應該與處理器的寄存器長(cháng)度一致。
typedef unsigned int OS_STK;
堆棧由高地址向低地址增長(cháng),這和選擇的編譯器有關(guān)。
#define OS_STK_GROWTH 1
宏定義(包括開(kāi)、關(guān)中斷的宏定義,以及進(jìn)行任務(wù)切換的宏定義):
#define OS_ENTER_CRITICAL()disable_interrupt();
#define OS_EXIT_CRITICAL()enable_interrupt();
#define OS_TASK_SW()OSCtxSw
2.2 OS_CPU_C.C文件
該文件必須實(shí)現任務(wù)初始化時(shí)的堆棧設計,也就是在堆棧增長(cháng)方向上如何定義每個(gè)需要保存的寄存器的位置。本文將堆??臻g設計為按任務(wù)堆??臻g由高至低依次保存寄存器ra、ISTATUS、r1~r31。
該文件還需要實(shí)現幾個(gè)操作系統規定的hook函數,通常都實(shí)現為空函數。
2.3 OS_CPU A.ASM文件
(1)OSStartHighRdy()函數
此函數是在OSStart()多任務(wù)啟動(dòng)后,負責從最高優(yōu)先級任務(wù)的TCB控制塊中獲得該任務(wù)的堆棧指針sp,通過(guò)sp依次將CPU現場(chǎng)恢復。這時(shí)系統就將控制權交給用戶(hù)創(chuàng )建的該任務(wù)進(jìn)程,直到該任務(wù)被阻塞或者被其他更高優(yōu)先級的任務(wù)搶占CPU。該函數僅僅在多任務(wù)啟動(dòng)時(shí)被執行一次,用來(lái)啟動(dòng)優(yōu)先級最高的任務(wù)執行,以后多任務(wù)的調度和切換就由下面的函數來(lái)實(shí)現。
(2)OSCtxSw()函數
任務(wù)級的上下文切換。它是當任務(wù)因被阻塞而主動(dòng)請求CPU調度時(shí)被執行的。它的工作是先將當前任務(wù)的CPU現場(chǎng)保存到該任務(wù)堆棧中,然后獲得最高優(yōu)先級任務(wù)的堆棧指針,從該堆棧中恢復此任務(wù)的CPU現場(chǎng),使之繼續執行。
(3)OSIntCtxSw()函數
中斷級的任務(wù)切換,它是在ISR(中斷服務(wù)例程)中執行任務(wù)切換。當發(fā)現有高優(yōu)先級任務(wù)就緒,則在中斷退出后并不返回被中斷的任務(wù),而是直接調度就緒的最高優(yōu)先級任務(wù)執行。這樣做的目的是能夠盡快地讓高優(yōu)先級的任務(wù)得到響應,保證系統的實(shí)時(shí)性。其原理基本上與任務(wù)級的切換相同,但是由于進(jìn)入中斷時(shí)已經(jīng)保存過(guò)被中斷任務(wù)的CPU現場(chǎng),因此這里就不用再保存。
(4)OSTickISR()函數
時(shí)鐘中斷處理函數。它的主要任務(wù)是負責處理時(shí)鐘中斷,調用系統實(shí)現的OSTimeTick函數,如果有等待時(shí)鐘信號的高優(yōu)先級任務(wù),則需要在中斷級別上調度其執行。
(5)OS_ENTER_CRITICAL和OS_EXIT_CRITICAL()函數
該函數分別是進(jìn)入臨界區和退出臨界區的宏指令。主要用于在進(jìn)入臨界區之前關(guān)中斷,在退出臨界區的時(shí)候恢復原來(lái)的中斷狀態(tài)。
本文將實(shí)時(shí)嵌入式操作系統μC/OS-II作為操作平臺,實(shí)現在NiosII上的移植,用于在電力系統諧波分析中的精確檢測。該電力諧波分析儀不但可以對電網(wǎng)進(jìn)行實(shí)時(shí)在線(xiàn)諧波分析,而且可以對數據進(jìn)行遠傳,具有精度高、運行穩定、實(shí)時(shí)性好、抗干擾能力強、性?xún)r(jià)比高等特點(diǎn),特別是它具有高穩定性和強實(shí)時(shí)性,為解決電力諧波問(wèn)題提供了一種有效的分析裝置。
評論