摘 要:提出一種基于雙CPU架構(gòu)的微機(jī)保護(hù)裝置的設(shè)計(jì)方法與實(shí)現(xiàn)過(guò)程。以L(fǎng)PC2468和TMS320F2812為硬件核心,以前后臺(tái)系統(tǒng)和嵌入式操作系統(tǒng)為軟件平臺(tái)進(jìn)行微機(jī)保護(hù)裝置的設(shè)計(jì),具體介紹了系統(tǒng)的硬件功能以及軟件流程圖。具體闡述了一種基于CPLD的雙CPU通信的軟硬件實(shí)現(xiàn)過(guò)程,解決了傳統(tǒng)單CPU處理速度慢、功能單一的缺點(diǎn),使保護(hù)裝置運(yùn)行更加可靠、靈敏。
關(guān)鍵詞: ARM微處理器; DSP微處理器; μC/OS-II; 微機(jī)保護(hù)
微機(jī)保護(hù)裝置對(duì)電力系統(tǒng)的安全穩(wěn)定運(yùn)行起著至關(guān)重要的作用。隨著電力網(wǎng)絡(luò)的日趨龐大,尤其是算法的日趨復(fù)雜,一般的微型計(jì)算機(jī)很難滿(mǎn)足速度上的要求,此外隨著電力系統(tǒng)自動(dòng)化水平的提高,網(wǎng)絡(luò)的通信和前沿的監(jiān)測(cè)都需要保護(hù)裝置來(lái)承擔(dān),從而對(duì)保護(hù)裝置的CPU要求越來(lái)越高。本文介紹一種基于DSP和ARM的雙CPU架構(gòu)的微機(jī)保護(hù)平臺(tái)。將DSP強(qiáng)大的數(shù)據(jù)處理能力和ARM出色的控制能力結(jié)合起來(lái),并且通過(guò)CPLD實(shí)現(xiàn)兩CPU間的數(shù)據(jù)交換,以此保證繼電保護(hù)裝置的可靠運(yùn)行。
1 硬件設(shè)計(jì)
本裝置適用于35 kV變電站及其以下電壓等級(jí)的廠(chǎng)站系統(tǒng),實(shí)現(xiàn)保護(hù)、測(cè)量、控制、通信監(jiān)控、故障記憶、自診斷、人機(jī)交互等功能。裝置內(nèi)部采用插件結(jié)構(gòu),各插件之間實(shí)現(xiàn)電氣聯(lián)系,裝置內(nèi)部包含五塊插件:顯示插件、CPU插件、模擬量采集插件、開(kāi)入量與電源插件,以及開(kāi)出量插件。系統(tǒng)框圖如圖1所示[1-2]。
該硬件平臺(tái)采用雙CPU結(jié)構(gòu),且CPU間不分主從各自獨(dú)立運(yùn)行,每個(gè)CPU有單獨(dú)的電源供電,各模塊系統(tǒng)相關(guān)性少,工作運(yùn)行獨(dú)立。其中ARM主要用來(lái)實(shí)現(xiàn)人機(jī)界面、電能計(jì)量、時(shí)鐘較準(zhǔn)以及通信等功能。DSP利用其自身運(yùn)算速度快、擅長(zhǎng)數(shù)字處理的特點(diǎn),主要實(shí)現(xiàn)模擬量的采集、濾波、繼電保護(hù)算法以及出口控制等功能。
模擬量采集模塊共采樣12路模擬量,從現(xiàn)場(chǎng)互感器的二次側(cè)將電信號(hào)引入裝置內(nèi)部互感器,經(jīng)過(guò)調(diào)理濾波、多路轉(zhuǎn)換開(kāi)關(guān)CD4053和模數(shù)轉(zhuǎn)換器AD7656轉(zhuǎn)換成數(shù)字信號(hào),然后實(shí)現(xiàn)FFT運(yùn)算和各種保護(hù)算法。測(cè)量信號(hào)通過(guò)調(diào)理電路直接輸入ADE7758。
開(kāi)關(guān)量及電源模塊。接口電路一律采用光耦隔離,避免外界干擾進(jìn)入CPU模塊。電源模塊采用兩級(jí)供電的方式,首先經(jīng)一層AC/DC將220 V電壓轉(zhuǎn)換成直流5 V、7.5 V、24 V的電壓,然后再經(jīng)過(guò)一層DC/DC,將電壓轉(zhuǎn)換成+3.3 V和+1.8 V供器件使用。
看門(mén)狗電路以及存儲(chǔ)器模塊。本裝置采用雙CPU單獨(dú)復(fù)位??撮T(mén)狗采用CAT1161,因其無(wú)上電復(fù)位功能,所以在復(fù)位端應(yīng)另加RC復(fù)位電路。此外給DSP和ARM分別外擴(kuò)了一片512 K的RAM和一片256 K的鐵定存儲(chǔ)器FM31256。其中鐵定存儲(chǔ)器為I2C接口,因其非易失性用來(lái)存儲(chǔ)一些設(shè)定值和故障錄播數(shù)據(jù),F(xiàn)M31256內(nèi)部具有時(shí)鐘伴侶功能同時(shí)為系統(tǒng)提供實(shí)時(shí)時(shí)鐘。
通信模塊,裝置包括兩個(gè)以太網(wǎng)接口,一路485和一路CAN接口。一路以太網(wǎng)實(shí)現(xiàn)與站控層連接,另外一路可以單獨(dú)組網(wǎng)構(gòu)成故障信息傳輸專(zhuān)網(wǎng)。在一些網(wǎng)絡(luò)環(huán)境較差,距離較短的場(chǎng)合下可直接使用485,CAN總線(xiàn)實(shí)現(xiàn)與變電站的通信。此外為了減少時(shí)間誤差,確保裝置的可靠性,不同場(chǎng)站的各臺(tái)裝置都裝設(shè)GPS對(duì)時(shí)接口。
裝置除以上各模塊以外還有人機(jī)交互模塊和電能計(jì)量模塊,人機(jī)界面采用320×240大屏幕彩色LCD顯示器,配有3×2的按鍵。同時(shí)還有6個(gè)LED顯示燈來(lái)反應(yīng)裝置的運(yùn)行情況。電能模塊采用ADE7758,采用SPI接口,通過(guò)校準(zhǔn)可直接讀出有功、無(wú)功和視在功率。
2軟件設(shè)計(jì)
2.1 ARM部分軟件設(shè)計(jì)
ARM部分采用嵌入式操作系統(tǒng)μC/OS-II作為軟件平臺(tái),μC/OS-II是一種源碼公開(kāi)的實(shí)時(shí)操作系統(tǒng),具有易移植、可靠穩(wěn)定等特點(diǎn)。圖2為ARM部分軟件框圖[3]。
μC/OS-II的移植非常簡(jiǎn)單,只需修改下面3個(gè)文件[4]:
OS_CPU.H文件:定義數(shù)據(jù)類(lèi)型和堆棧增長(zhǎng)方向,這一部分與所使用的編譯器有關(guān)。
OS_CPU_C.C文件:該文件定義在堆棧增長(zhǎng)方向上寄存器保存的位置,該文件還需要實(shí)現(xiàn)幾個(gè)操作系統(tǒng)所規(guī)定的hook函數(shù)。通常都設(shè)計(jì)為空函數(shù)。
OS_CPU A.S文件:該文件由匯編語(yǔ)言實(shí)現(xiàn),主要負(fù)責(zé)任務(wù)切換、臨界區(qū)指令定義以及時(shí)鐘中斷函數(shù)的處理。
一個(gè)任務(wù)與其他任務(wù)或者中斷服務(wù)程序之間信息的交換有兩種途徑,一是通過(guò)全局變量另一個(gè)是采用消息隊(duì)列或者消息郵箱。用全局變量時(shí),必須保證每個(gè)任務(wù)或者中斷服務(wù)子程序獨(dú)享該變量。中斷服務(wù)中保證獨(dú)享的唯一辦法就是關(guān)中斷。如果兩個(gè)任務(wù)共享某變量,各任務(wù)實(shí)現(xiàn)獨(dú)享的方法可以是先關(guān)中斷再開(kāi)中斷或者是使用信號(hào)量。任務(wù)只能通過(guò)全局變量與中斷服務(wù)程序之間通信,而任務(wù)并不知道何時(shí)全局變量被中斷,服務(wù)程序修改了,除非中斷服務(wù)程序以信號(hào)量方式向任務(wù)發(fā)信號(hào),或者該任務(wù)不斷地周期性地查詢(xún)?cè)撟兞俊楸苊膺@種情況,可考慮使用郵箱和消息隊(duì)列。任務(wù)或中斷服務(wù)程序通過(guò)內(nèi)核服務(wù),把一則消息(一個(gè)指針)放到郵箱里,一個(gè)或多個(gè)任務(wù)可以接收到該消息(指針指向的內(nèi)容就是該消息)。消息隊(duì)列實(shí)際上是郵箱陣列,遵循先進(jìn)先出原則,當(dāng)任務(wù)等待某個(gè)消息一定時(shí)限后,該任務(wù)自動(dòng)進(jìn)入就緒態(tài)并開(kāi)始運(yùn)行,同時(shí)返回錯(cuò)誤代碼。
各任務(wù)的切換通過(guò)內(nèi)核來(lái)調(diào)度,內(nèi)核的調(diào)度一般是基于優(yōu)先級(jí)的,CPU總是讓處于就緒態(tài)且任務(wù)優(yōu)先級(jí)最高的任務(wù)運(yùn)行。任務(wù)的優(yōu)先級(jí)一般根據(jù)各任務(wù)間的關(guān)聯(lián)性、任務(wù)的關(guān)鍵性以及任務(wù)執(zhí)行頻繁性來(lái)選定。在系統(tǒng)運(yùn)行的過(guò)程中可能發(fā)生任務(wù)調(diào)度的時(shí)機(jī)有:
(1)對(duì)任務(wù)操作時(shí),包括創(chuàng)建或刪除任務(wù)、掛起或恢復(fù)任務(wù),改變?nèi)蝿?wù)的優(yōu)先級(jí)。
(2)任務(wù)主動(dòng)使用OSTimeDly函數(shù)延時(shí)時(shí)。
(3)發(fā)送(或等待)信號(hào)量、郵箱、消息時(shí)。
(4)中斷函數(shù)返回時(shí),優(yōu)先級(jí)最高的任務(wù)進(jìn)入運(yùn)行狀態(tài)。
本系統(tǒng)總共有5個(gè)任務(wù),各任務(wù)之間的關(guān)系如圖2所示,任務(wù)功能如表1所示,系統(tǒng)通過(guò)定時(shí)中斷服務(wù)程序釋放信號(hào)量定時(shí)掃描顯示任務(wù)和電度采樣任務(wù)。因?yàn)長(zhǎng)CD顯示的是BCD碼,所以定值設(shè)定好以后系統(tǒng)通過(guò)消息隊(duì)列通知數(shù)據(jù)處理任務(wù)將BCD碼轉(zhuǎn)換成二進(jìn)制數(shù)傳送給DSP,ARM接收到DSP傳送的信息以及ADE7758所測(cè)的電度值和上位機(jī)下發(fā)的數(shù)據(jù)包后也要通過(guò)數(shù)據(jù)處理任務(wù)解包并轉(zhuǎn)換成BCD碼顯示。當(dāng)系統(tǒng)發(fā)生故障時(shí),DSP發(fā)送故障信息,ARM接收到故障信息以后通過(guò)信號(hào)量,主動(dòng)進(jìn)行錄播、上傳以及顯示故障信息。運(yùn)行人員可通過(guò)鍵盤(pán)輸入利用全局變量來(lái)設(shè)置通信端口的IP地址、MAC地址、波特率以及裝置地址等。
2.2 DSP部分軟件設(shè)計(jì)[5]
DSP部分因任務(wù)較少采用前后臺(tái)程序,運(yùn)行速度快。圖3為DSP部分軟件框圖。本套裝置充分利用了DSP強(qiáng)大的中斷功能和高效的數(shù)據(jù)處理能力。在程序開(kāi)始時(shí),DSP向ARM請(qǐng)求定值和時(shí)間。設(shè)置采樣周期,每個(gè)周期采樣32點(diǎn),以工頻50 Hz為例,采樣周期為0.625 ms。一個(gè)周期內(nèi)必須完成模擬量的采集、fft運(yùn)算、算法判斷、開(kāi)關(guān)量的讀入以及與ARM的通信等功能。
2.3雙CPU通信部分軟件設(shè)計(jì)[6]
雙CPU間的通信是本系統(tǒng)實(shí)現(xiàn)的關(guān)鍵,兩CPU雖然獨(dú)立運(yùn)行,但運(yùn)行時(shí)需要大量的數(shù)據(jù)進(jìn)行交換。因?yàn)閮蒀PU的運(yùn)行速度不一致,而數(shù)據(jù)在傳輸過(guò)程中必須要保持同步,兩CPU間數(shù)據(jù)交換和通信是影響整個(gè)系統(tǒng)正常工作的重要環(huán)節(jié)。
CPU間的通信大致可分為:并行通信和串行通信。本裝置對(duì)實(shí)時(shí)性要求較高且數(shù)據(jù)傳輸量較大,所以采用的是一種基于CPLD的并行通信。如圖4所示,在CPLD內(nèi)部實(shí)現(xiàn)一對(duì)D觸發(fā)器(74HC74),其中DSP_H1端接DSP的GPIO口,ARM_H2接ARM的一個(gè)中斷引腳。系統(tǒng)在初始化或者復(fù)位后,DSP和ARM各空讀一次,使得DSP_H2(DSP的輸入緩沖器滿(mǎn)信號(hào),圖中未畫(huà)出)和ARM_H2無(wú)效(低電平)。當(dāng)DSP開(kāi)始寫(xiě)時(shí),寫(xiě)選通經(jīng)過(guò)反相器后形成一個(gè)上升沿觸發(fā)D觸發(fā)器,引起ARM_H2狀態(tài)改變通知ARM寫(xiě)操作完成,可以開(kāi)始讀數(shù)據(jù),同時(shí)在寫(xiě)完時(shí)使DSP_H1變低,為下一次寫(xiě)操作做準(zhǔn)備。ARM開(kāi)始讀,當(dāng)ARM將一次數(shù)據(jù)讀走后,ARM的讀選通端形成一個(gè)上升沿,觸發(fā)D觸發(fā)器,使DSP_H1狀態(tài)改變(變?yōu)楦唠娖剑┩ㄖ狣SP讀操作完成,同時(shí)將ARM_H2變低為下一次讀操作做準(zhǔn)備。ARM向DSP傳輸數(shù)據(jù)時(shí)的握手信號(hào)原理同上。
接收數(shù)據(jù)通過(guò)中斷來(lái)實(shí)現(xiàn)如圖5所示。當(dāng)進(jìn)入中斷服務(wù)程序后,CPU應(yīng)先關(guān)中斷將外部中斷引腳設(shè)置成GPIO口,通過(guò)查詢(xún)方式接收數(shù)據(jù)以避免因多次中斷造成的系統(tǒng)崩潰。數(shù)據(jù)接收完后,再將GPIO口設(shè)置為中斷引腳,開(kāi)放中斷。如果CRC校驗(yàn)碼驗(yàn)證錯(cuò)誤,接收方重新發(fā)送請(qǐng)求命令。發(fā)送數(shù)據(jù)是通過(guò)查詢(xún)輸出緩沖器狀態(tài)來(lái)發(fā)送數(shù)據(jù),發(fā)送數(shù)據(jù)時(shí)如果發(fā)送方輸出緩沖器在20個(gè)指令周期內(nèi)無(wú)效,則退出發(fā)送程序。
CPU間數(shù)據(jù)傳輸時(shí),先發(fā)送命令字,高字節(jié)為數(shù)據(jù)類(lèi)型如表2所示,低字節(jié)為數(shù)據(jù)長(zhǎng)度,數(shù)據(jù)發(fā)送完后,發(fā)一個(gè)字的CRC校驗(yàn)碼。如圖6所示。
無(wú)論數(shù)據(jù)接收方還是發(fā)送方均采用循環(huán)隊(duì)列作為緩沖區(qū),這樣可以避免CPU在處理數(shù)據(jù)時(shí)被新的數(shù)據(jù)沖掉,使數(shù)據(jù)交換更加可靠,其數(shù)據(jù)結(jié)構(gòu)如下:
struct CPU_IN_OUT
{
struct CPU_IN_OUT *next;
uint16 com_len;//命令字
uint16 data[120]; //數(shù)據(jù)區(qū)
uint16 CRC; //CRC校驗(yàn)碼
};
上述方法在軟硬件上均已實(shí)現(xiàn),各種試驗(yàn)表明本文所介紹的雙CPU間的通信方法,傳輸數(shù)據(jù)穩(wěn)定可靠。從現(xiàn)場(chǎng)運(yùn)行的狀況來(lái)看各種功能基本實(shí)現(xiàn),動(dòng)作可靠、靈敏度高、抗干擾能力強(qiáng),具有極好的推廣價(jià)值。
參考文獻(xiàn)
[1] 蔡月明,梅軍,曹曉華.CPLD在繼電保護(hù)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用,2001,27(4):4-6.
[2] 姚國(guó)強(qiáng),溫陽(yáng)東.電動(dòng)機(jī)微機(jī)保護(hù)及其智能監(jiān)控系統(tǒng)的研究[J]. 合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2000,23(4):550-554.
[3] 周立功. ARM嵌入式系統(tǒng)軟件開(kāi)發(fā)實(shí)例[M].北京:北京航空航天大學(xué)出版社,2004:436,452.
[4] LABROSSE J J. MicroC/OS-II the real-time kernel second edition[M].北京:北京航空航天大學(xué)出版社,2007:72-142.
[5] 萬(wàn)山明.TMS320f281x DSP原理及應(yīng)用實(shí)例[M]. 北京:北京航空航天大學(xué)出版社,2007:114,180.
[6] 黃正謹(jǐn),徐堅(jiān).CPLD系統(tǒng)設(shè)計(jì)技術(shù)與入門(mén)應(yīng)用[M].北京:電子工業(yè)出版設(shè),2001:10,20.