深圳市賦安安全系統(tǒng)有限公司 吳曉娜
電力系統(tǒng)的頻率主要和系統(tǒng)負荷有關。大型機組的投切、大功率負荷的變化都可能引起電力系統(tǒng)頻率的變化;發(fā)電量大于用電負荷時或有部分線路跳閘時,系統(tǒng)頻率會升高;當負荷突增或發(fā)電機跳閘時,系統(tǒng)頻率會下降,進而使電壓水平下降。頻率或電壓不穩(wěn)定,對發(fā)電廠及電力系統(tǒng)本身帶來危害,更重要的是不能滿足用戶對電能質(zhì)量的要求,直接影響用戶的產(chǎn)品質(zhì)量,影響電子計算機的正常工作。為確保電力系統(tǒng)安全穩(wěn)定運行和提供優(yōu)質(zhì)電能,有必要對電力系統(tǒng)的頻率和電壓進行測量,通過調(diào)度管理系統(tǒng)調(diào)整電網(wǎng)上的電力供應與負荷的平衡,保證電網(wǎng)的運行頻率維持在允許變動范圍內(nèi),來維持整個電力系統(tǒng)安全穩(wěn)定地運行[1]。
本文的配電終端設計了基于VxWorks實時操作系統(tǒng)的頻率和電壓采集方法。通過將被測電壓信號經(jīng)過過流比較器得到方波信號,利用定時器的捕獲模式進行被測信號頻率的測量。通過一個周波采集32個點進行電壓的測量,采樣時間間隔根據(jù)測量得到的頻率進行動態(tài)調(diào)整,保證了在交流信號波動時頻率和遙測的測量精度。
本文設計的頻率采樣采用的是過零相位比較方法,利用周期信號相繼過零點的時間寬度來計算頻率。一次高壓10kV通過電壓互感器PT轉(zhuǎn)換成額定100V的低電壓,然后通過配電終端內(nèi)部的電壓變換器將PT轉(zhuǎn)換的低電壓進一步轉(zhuǎn)換成-5V- +5V的電壓,以適應于配電終端的嵌入式系統(tǒng)。采用過零電壓比較器電路將正弦波信號轉(zhuǎn)換成方波,通過測量方波的周期從而計算出周期信號的頻率。
配電終端的核心硬件采用ATMEL的ATSAM9X25微處理器,包含兩個定時器/計數(shù)器(TC0、TC1),每個定時器有三個相同的32 位定時器/計數(shù)器通道(0、1、2),每個通道有兩個信號口線(TIOA、TIOB)。每個通道可獨立編程,以執(zhí)行不同功能包括頻率測量,事件計數(shù),間斷測量,脈沖發(fā)生,延遲定時和脈寬調(diào)制。定時器的捕獲模式允許定時器通道對輸入的TIOA 和TIOB 信號上的脈沖時序,頻率,周期,占空比和相位進行測量。被測周期信號經(jīng)過電壓變換器轉(zhuǎn)換成小電壓,然后通過過零比較器,信號由正電壓過零時,跳變?yōu)榈碗娖剑盘栍韶撾妷哼^零時,跳變?yōu)楦唠娖?,從而可以將正弦波轉(zhuǎn)換成方波信號,將方波信號輸入ATSAM9X25微處理器的定時器/計數(shù)器的捕獲模式通道TIOA 口線,即可測量出被測周期信號的頻率。電壓變換器的小電壓經(jīng)過模數(shù)轉(zhuǎn)換器轉(zhuǎn)換成數(shù)字信號,處理器采集到數(shù)字信號經(jīng)過處理后轉(zhuǎn)換成對應的PT側(cè)的二次電壓,即可求出遙測值[2]。硬件設計原理如圖1所示。
當在TIOA 信號上產(chǎn)生一個可編程事件時可用計數(shù)器值裝載RA和RB。寄存器A 和B(RA 和RB)被用作捕獲寄存器。通過設置通道模式寄存器定義裝載寄存器A 和B的TIOA 邊沿、外部觸發(fā)信號的邊沿、時鐘選擇以及時鐘反轉(zhuǎn)。當被測信號通過過零比較器得到的方波信號的上升沿到來時,產(chǎn)生觸發(fā)信號,計數(shù)器將當前計數(shù)值復制到RA/RB捕獲寄存器,計數(shù)器清零,當再一個上升沿到來時,再次產(chǎn)生觸發(fā)信號,計數(shù)器又將當前計數(shù)值復制到RA/RB寄存器,然后計數(shù)器清零。RA/RB捕獲寄存器得到的計數(shù)值即為被測信號一個周波的計數(shù)值。根據(jù)一個周波的計數(shù)值,通過定時器的時鐘便可計算出被測信號的頻率為定時器的時鐘頻率/計數(shù)值,其中定時器的時鐘頻率為微處理器的主頻經(jīng)過分頻得到的。
圖1 硬件設計原理
配電終端基于VxWorks的開發(fā)平臺,VxWorks 是美國 Wind River System風河公司推出的一個實時操作系統(tǒng),可以滿足配電終端的實時性要求。為了便于平臺的移植,設計了基于VxBus的定時器驅(qū)動程序以及基于字符設備的頻率采集的驅(qū)動程序。
VxBus是風河公司新的設備驅(qū)動程序架構(gòu),是VxWorks新增的特性,它是在VxWorks6.2及以后版本被增加到VxWorks中的。本文采用的VxWorks6.8版本的開發(fā)平臺,各種驅(qū)動和支持組件的添加與刪除完全可以在Workbench集成開發(fā)環(huán)境的工程中進行,不需要BSP和驅(qū)動相關的知識,也不會在添加或者刪除驅(qū)動時增加管理VxWorks工程的額外工作。
定時器驅(qū)動根據(jù)VxBus驅(qū)動模型來設計,包括驅(qū)動的注冊、驅(qū)動初始化和驅(qū)動設計[3]。
2.1.1 驅(qū)動的注冊和初始化
VxWorks內(nèi)核啟動前,sysHwInit()函數(shù)調(diào)用hardWareInterFaceInit(),這個函數(shù)是VxBus驅(qū)動初始化的入口函數(shù)。這個函數(shù)首先初始化硬件內(nèi)存分配機制,然后調(diào)用hardWareInterFaceBusInit( ),根據(jù)config.h包含的使用VxBus架構(gòu)驅(qū)動的設備類型進行基于VxBus的定時器驅(qū)動的注冊vxbAt91sam9x25TimerDrvRegister( )。
在完成注冊后,程序調(diào)用vxbInit()進行設備掃描,讀取hwconf.c文件中的hcfDeviceList[]數(shù)組,根據(jù)數(shù)組中的資源與已經(jīng)注冊了的驅(qū)動程序進行設備名字和驅(qū)動名字的匹配查找。如果找到匹配的會創(chuàng)建一個實例,即每個驅(qū)動和設備之間的一對關聯(lián)關系[3]。vx-bInit()會建立實例鏈表,將所有實例統(tǒng)一管理,并調(diào)用定時器驅(qū)動的第一階段初始化函數(shù)at91sam9x25TimerInstInit(),初始化內(nèi)部數(shù)據(jù)結(jié)構(gòu),完成任何所需的硬件定時器初始化。
VxWorks內(nèi)核啟動后,sysHwInit2()函數(shù)調(diào)用vxbDevInit(),這個函數(shù)調(diào)用定時器驅(qū)動的第二階段初始化函數(shù)at91sam9x25TimerInstInit2(),連接定時器中斷服務程序到定時器中斷源上。
sysHwInit2()函數(shù)接著以任務的形式運行vxbDevConnect(),這個函數(shù)調(diào)用定時器驅(qū)動的第三階段初始化函數(shù)at91sam9x25TimerInstConnect(),用于設備的連接,通??梢圆皇褂谩V链?,定時器驅(qū)動的初始化完成[4]。
2.1.2 驅(qū)動設計
一旦定時器驅(qū)動程序被注冊,調(diào)用驅(qū)動函數(shù)func{vxbTimerFuncGet}( ),系統(tǒng)和驅(qū)動之間的所有交互發(fā)生通過vxbTimerFunctionality數(shù)據(jù)結(jié)構(gòu)的返回指針。在一個定時器驅(qū)動中,{vxbTimerFuncGet}( )方法通過使用其驅(qū)動程序提供的例程實現(xiàn),驅(qū)動在vxbTimerFunctionality結(jié)構(gòu)體描述所需定時器的函數(shù)指針。下面部分,描述了定時器驅(qū)動所支持的服務程序[5]。
(*timerAllocate)( )程序被用來在運行的VxWorks系統(tǒng)中分配一個特定的定時器。
(*timerRelease)( )程序用來釋放一個特定定時器通過(*timerAllocate)( ) 之前分配的。
(*timerCountGet)用來查詢定時器當前值。
(*timerRolloverGet)( )程序用來查詢最大值,值為定時器使用(*timerCountGet)( ) 程序返回的。
(*timerDisable)( )用來禁用底層硬件定時器產(chǎn)生的中斷。(*timerEnable)( )用來使能底層硬件定時器產(chǎn)生的中斷。
(*timerISRSet)( )被調(diào)用連接定時器中斷服務程序到定時器中斷源,一個定時器中斷產(chǎn)生時調(diào)用一次定時器中斷服務程序。
2.1.3 API接口設計
在定時器中斷服務程序里,讀取定時器狀態(tài)寄存器判斷是RC比較器中斷還是捕獲模式的裝載中斷,然后回調(diào)各自的用戶定時器中斷服務程序。當應用層用到硬件定時器時,需要底層驅(qū)動提供用戶定時器的API接口函數(shù)。在內(nèi)核啟動過程中,完成用戶定時器的初始化,包括調(diào)用函數(shù)vxbInstByNameFind()通過設備名和設備號查找實例。vxbDevMethodGet()查詢到定時器實例支持{vxbTimerFunc-Get}( )方法,返回定時器驅(qū)動提供的相應函數(shù)的指針。
應用層通過調(diào)用usrClkConnect(),實現(xiàn)將特定硬件定時器通道號的中斷服務程序連接到定時器中斷源。調(diào)用usrClkRateSet()、usrClkRateGet()實現(xiàn)對定時器定時間隔的設置和讀取。調(diào)用usrClkEnable()、usrClkDisable()實現(xiàn)對定時器RC比較器中斷的使能和禁用。
頻率采集驅(qū)動根據(jù)字符設備來設計。應用層首先調(diào)用標準的I/O子系統(tǒng)層的API接口函數(shù),然后I/O子系統(tǒng)層調(diào)用頻率采集驅(qū)動程序完成對頻率的采集。為了實現(xiàn)這個過程,頻率采集驅(qū)動程序需要向I/O子系統(tǒng)層注冊,通過at91sam9x25FrqDrv() 調(diào)用iosDrvInstall(),完成頻率采集驅(qū)動程序驅(qū)動列表的注冊,驅(qū)動號即為ios-DrvInstall() 的返回值。
通過at91sam9x25FrqDevCreate() 調(diào)用iosDevAdd() 完成頻率采集驅(qū)動程序設備列表的創(chuàng)建。
在at91sam9x25FrqDrv()對驅(qū)動的注冊時調(diào)用iosDrvInstall (),可以對定時器/計數(shù)器的捕獲模式進行初始化配置,設置用戶定時器TC0的2通道用于頻率的測量,連接用戶定時器中斷服務程序到定時器中斷源。當應用層打開設備時,采用TIOA口線,使能捕獲模式的捕獲寄存器RA/RB裝載中斷。
當定時器/計數(shù)器的捕獲模式捕獲到有觸發(fā)信號的上升沿到來時,計數(shù)器裝載RA/RB寄存器,產(chǎn)生裝載中斷,進入中斷服務程序。中斷服務程序讀取RA/RB捕獲寄存器的值,對該值進行干擾處理,有效值即為一個周波的計數(shù)值。在驅(qū)動程序的讀函數(shù)中,計算出被測信號的頻率f = 定時器時鐘頻率/計數(shù)值。
頻率的采集可用于對遙測采樣間隔的時間跟隨。應用程序首先打開頻率采集的設備,此時RA/RB裝載中斷或RC比較器中斷使能,通過設置用戶定時器TC1的0通道進行遙測的定時采樣,調(diào)用usrClkConnect()連接遙測定時器TC1的0通道中斷服務程序到定時器中斷源。使能定時器中斷,開始測量遙測時先按照頻率為50Hz,每周波采集32個點,采樣的時間間隔為0.625ms。當定時時間間隔到時,進入遙測定時器中斷服務程序,讀取遙測瞬時值,計算定時中斷次數(shù),當次數(shù)為32時,表示采集了一個周波的值,當計數(shù)到32N時,表示采集了N個周波,N可以根據(jù)開發(fā)人員自己設置。當采集N個周波后,調(diào)用read()讀取頻率值,調(diào)用頻率采集的驅(qū)動過程如上圖3所示。根據(jù)讀到的頻率值f進行采樣時間間隔的動態(tài)調(diào)整,采樣間隔為(1/f)/32 s。應用軟件實現(xiàn)遙測的采集以及頻率跟隨的過程如圖2示。
圖2 遙測的采集以及頻率跟隨流程圖
本文通過對交流電壓信號進行電壓變換器轉(zhuǎn)換成小電壓信號,然后進行過零比較器的處理,得到方波信號,對方波信號的周波脈沖計數(shù)得到交流信號的頻率。被測交流信號遙測的采集時間間隔可以根據(jù)頻率進行跟隨,從而保證在交流信號波動時的遙測精度。配電終端采用基于VxWorks的定時器驅(qū)動和頻率驅(qū)動,具有多任務處理、實時性強、移植性好的特點,對于確保配電終端在配電自動化系統(tǒng)中的安全、穩(wěn)定、可靠運行起到了重要作用。
[1]劉鵬,羅杉.電力系統(tǒng)頻率及電壓降低時的處理[J].科技資訊,2010(7).
[2]劉思宇.基于MK61的配網(wǎng)終端交流同步采集系統(tǒng)設計[J].無線互聯(lián)科技,2013(9).
[3]趙永剛, 韓國義.基于VxBus的設備驅(qū)動開發(fā)[J].微型機與應用,2010(18).
[4]李海亮. VxWorks環(huán)境下定位系統(tǒng)顯控軟件設計[D].哈爾濱工程大學碩士論文,2007.
[5]李立哲,呂偉,樊丁.基于VxWorks的航空發(fā)動機控制系統(tǒng)軟件設計[J].電光與控制,2010(9).