<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于VxWorks平臺(tái)的快速交流信號(hào)采樣及計(jì)算

          基于VxWorks平臺(tái)的快速交流信號(hào)采樣及計(jì)算

          作者: 時(shí)間:2011-04-26 來源:網(wǎng)絡(luò) 收藏

          上世紀(jì)90年代,以微處理器為核心的數(shù)字式保護(hù)已成為的主流產(chǎn)品,電力系統(tǒng)技術(shù)進(jìn)入了微機(jī)保護(hù)時(shí)代。隨著電力系統(tǒng)對(duì)的要求不斷提高,微機(jī)保護(hù)系統(tǒng)需要具有強(qiáng)實(shí)時(shí)性、高可靠性和擴(kuò)展性[1]。

          系統(tǒng)的實(shí)時(shí)性由硬件系統(tǒng)和嵌入式軟件系統(tǒng)共同決定。

          在實(shí)時(shí)性要求較高且任務(wù)較多的應(yīng)用中,適合引入嵌入式實(shí)時(shí)操作系統(tǒng)RTOS(Real-Time Operating System)。RTOS高效的多優(yōu)先級(jí)任務(wù)管理、強(qiáng)大的可移植性和擴(kuò)展性以及微秒級(jí)的中斷管理等特性,更加有利于控制效率的提高。是硬實(shí)時(shí)特性最優(yōu)越的RTOS,且具有高可靠性和可擴(kuò)展性,能夠?yàn)槔^電保護(hù)裝置提供更好的性能保障。

          1 繼電保護(hù)裝置軟件系統(tǒng)

          1.1 工作原理及流程

          目前典型的繼電保護(hù)裝置應(yīng)用軟件系統(tǒng)均采用模塊化設(shè)計(jì)思想,根據(jù)繼電保護(hù)功能的要求分成8個(gè)部分:操作系統(tǒng)、交流采樣、數(shù)據(jù)處理、保護(hù)控制、數(shù)據(jù)通信、人機(jī)交互及信息記錄。各模塊根據(jù)各自特點(diǎn)完成相應(yīng)任務(wù),使系統(tǒng)軟件結(jié)構(gòu)清晰,便于調(diào)試、連接、修改和移植。

          1.2 系統(tǒng)軟件框架設(shè)計(jì)

          根據(jù)所要實(shí)現(xiàn)的功能和軟件模塊化設(shè)計(jì)的要求,設(shè)計(jì)了基于的系統(tǒng)軟件,包括硬件驅(qū)動(dòng)程序模塊、板級(jí)支持包(BSP)模塊、 RTOS模塊、中斷處理模塊、保護(hù)控制模塊、人機(jī)交互模塊、通信任務(wù)模塊、信息記錄模塊等。系統(tǒng)軟件框圖如圖1所示。



          2 交流采樣功能設(shè)計(jì)與實(shí)現(xiàn)

          本文引用地址:http://www.ex-cimer.com/article/257881.htm

          2.1 中斷服務(wù)

          由于A/D采樣對(duì)實(shí)時(shí)性要求極高,因此采用中斷服務(wù)子程序的方式實(shí)現(xiàn)。本設(shè)計(jì)利用Timer的定時(shí)中斷控制A/D采樣的頻率,利用VxWorks提供的接口函數(shù)intConnet()將A/D的采樣函數(shù)掛靠到定時(shí)中斷Timer1的中斷向量上。

          繼電保護(hù)的交流采樣可以分為數(shù)據(jù)采樣和采樣數(shù)據(jù)處理兩部分。數(shù)據(jù)采樣在采樣定時(shí)周期控制下,將A/D轉(zhuǎn)換好的數(shù)據(jù)通過SPI總線送到CPU采樣數(shù)據(jù)存儲(chǔ)區(qū)。采樣數(shù)據(jù)處理則是CPU對(duì)已采樣數(shù)據(jù)進(jìn)行傅氏濾波、提取交流信號(hào)的各電氣量參數(shù)。該部分軟件的計(jì)算量需求是所有程序中最多的,因此是優(yōu)化的關(guān)鍵部分。

          2.2 數(shù)據(jù)采樣

          數(shù)據(jù)采樣首先要考慮AD采樣精度和采樣率。采用ADI公司的12 bit ADC AD7940,針對(duì)所要采樣波形的最高頻率是工頻5次諧波的要求,選擇了1 kHz采樣率,即每周波采樣20個(gè)點(diǎn)。
          在采樣定時(shí)周期中斷到來時(shí), ADC開始啟動(dòng)13路模數(shù)轉(zhuǎn)換。一路采樣完畢之后,通過SPI總線傳送到定義的采樣數(shù)據(jù)存儲(chǔ)區(qū);當(dāng)13路數(shù)據(jù)傳送完畢,就可以進(jìn)行采樣數(shù)據(jù)的傅氏濾波處理,計(jì)算出三相交流電的電流、電壓的幅值和相位。

          2.3 數(shù)據(jù)處理

          2.3.1 離散傅氏算法

          交流采樣數(shù)據(jù)的處理是系統(tǒng)計(jì)算工作的核心,它的實(shí)時(shí)性和精度決定了保護(hù)任務(wù)的實(shí)時(shí)性和系統(tǒng)響應(yīng)的準(zhǔn)確性,從而影響整個(gè)系統(tǒng)的性能實(shí)現(xiàn)。因此,交流采樣數(shù)據(jù)處理算法的選擇十分重要。雖然快速傅氏算法()理論上要比離散傅氏算法(DFT)具有更高的速度[4],但在繼電保護(hù)應(yīng)用中,考慮到采樣點(diǎn)數(shù)、計(jì)算量以及系統(tǒng)的實(shí)時(shí)性需求,采用了DFT作為處理算法。

          根據(jù)傅氏級(jí)數(shù)原理,各次諧波分量的實(shí)部和虛部的時(shí)域表達(dá)式為:

          當(dāng)傅氏分析方法應(yīng)用于計(jì)算機(jī)處理時(shí),即為DFT形式。設(shè)信號(hào)x(t)每周期的采樣點(diǎn)數(shù)為N,則采樣間隔將是Ts=T/N,則式(1)、式(2)離散化后得到DFT的公式可表達(dá)為:

          從式(3)和式(4)得出,使用DFT算法計(jì)算信號(hào)的一個(gè)諧波分量,共需 2N次乘法和(2N-1)次加法,這樣每次抽樣所需計(jì)算的數(shù)據(jù)量非常大,而且隨著N的增長(zhǎng),計(jì)算量將顯著增加。

          根據(jù)一般電力系統(tǒng)繼電保護(hù)的應(yīng)用,本文對(duì)13個(gè)通道的電流和電壓信號(hào)進(jìn)行采樣,在每周波采樣20個(gè)點(diǎn)的情況下,為了得到每個(gè)通道的幅值和相位,總共需要計(jì)算520次正余弦、520次乘法、507次加法、13次開平方和13次反正切,因此需要采用優(yōu)化措施以減小計(jì)算量。

          2.3.2 實(shí)時(shí)性優(yōu)化

          (1)快速查表

          為了避免在傅氏運(yùn)算中計(jì)算sin(2πk/N)、cos(2πk/N)(k=0,1,2,…,N)等三角函數(shù)的值,在系統(tǒng)初始化時(shí)應(yīng)將這些值事先計(jì)算出來并保存到一個(gè)表中,運(yùn)算過程中以查找表的形式直接獲取正余弦函數(shù)計(jì)算的值。

          (2)定點(diǎn)乘法

          AD7490輸入模擬電壓范圍是0 V~5 V,對(duì)應(yīng)的輸出數(shù)字范圍是0x00~0xFFF。由于SEP4020處理器不支持浮點(diǎn)運(yùn)算,所以對(duì)小數(shù)的運(yùn)算將非常耗時(shí)。為了避免進(jìn)行小數(shù)運(yùn)算,采用了小數(shù)定點(diǎn)運(yùn)算方法,用整型替代實(shí)型運(yùn)算。這里定點(diǎn)的定標(biāo)設(shè)為15,整型數(shù)0x8000就對(duì)應(yīng)實(shí)型數(shù)1.0。

          為了保持定點(diǎn)運(yùn)算,避免sin(2πk/N)、cos(2πk/N)帶來的小數(shù)運(yùn)算,這里對(duì)sin(2πk/N)、cos(2πk/N)計(jì)算出來的值進(jìn)行定點(diǎn)化處理,并將其乘以2的15次方取整后得到16 bit的有符號(hào)整數(shù)。這樣傅氏算法的循環(huán)浮點(diǎn)乘操作就轉(zhuǎn)變成整數(shù)乘法,既保留了傅氏算法的高精度特性,又極大地提高了傅氏算法的計(jì)算速度。

          (3)快速開方

          在利用傅氏計(jì)算得到的實(shí)部和虛部求幅值時(shí),需要進(jìn)行開平方運(yùn)算。而在RISC內(nèi)核的嵌入式處理器中,如果不對(duì)開平方運(yùn)算做特殊處理,則CPU的運(yùn)算時(shí)間較長(zhǎng),將影響整個(gè)系統(tǒng)的實(shí)時(shí)性,因此考慮采取快速算法來提高開平方運(yùn)算的速度。

          本文的開平方運(yùn)算對(duì)象是無符號(hào)的整型數(shù),可以采用一種只利用移位、加法實(shí)現(xiàn)整數(shù)開平方算法的方法。由于RISC內(nèi)核中有內(nèi)置的桶型移位器,因此該算法可以用匯編程序?qū)崿F(xiàn)[6]。
          整數(shù)快速開方算法函數(shù)的代碼如下:
          unsigned long isqrt(unsigned long x)
          {
          unsigned long temp,Q=0,b=0x8000,bShft=15;
          __asm
          {
          mov b,#0x8000
          mov bShft,#15
          mov Q,#0
          loop:
          add temp,b,Q,lsl#1
          subs temp,x,temp,lsl bShft addge Q,Q,b
          movgex,temp
          sub bShft,bShft,#1
          movs b,b,lsr#1
          bne loop
          }
          return Q;
          }

          3 測(cè)試及結(jié)果分析

          3.1 測(cè)試環(huán)境介紹

          硬件系統(tǒng)以32 bit RISC內(nèi)核微處理器SEP4020和12 bit ADC AD7490為核心,包括交流采集子模塊、電源子模塊、顯示與鍵盤子模塊和出口繼電器子模塊等。其系統(tǒng)框圖如圖2所示。


          3.2 優(yōu)化結(jié)果

          給傅氏算法提供一個(gè)理論采樣信號(hào):

          精度測(cè)試結(jié)果如表1所示,計(jì)算速度測(cè)試結(jié)果如表2所示(N=20)。

          可見,改進(jìn)后的傅氏算法與原有的傅氏算法相比較,數(shù)據(jù)處理的總時(shí)間縮短到原來的44.5%,計(jì)算實(shí)部、虛部運(yùn)算時(shí)間縮短到優(yōu)化前的43.4%,幅值部分整型快速開方的計(jì)算時(shí)間縮短到優(yōu)化前的87.8%。雖然與原來的傅氏算法相比在誤差方面稍大,但可以滿足精度要求。

          本文提出了基于VxWorks RTOS的電力系統(tǒng)繼電保護(hù)裝置的軟件系統(tǒng),并對(duì)其中的交流信號(hào)采樣及計(jì)算關(guān)鍵程序——DFT算法進(jìn)行了優(yōu)化設(shè)計(jì)。優(yōu)化后的數(shù)據(jù)處理結(jié)果仍保持了較高精度,但時(shí)間大幅度縮短。本文研究結(jié)果將有助于提高電力系統(tǒng)裝置的實(shí)時(shí)性,適用于更高采樣率和計(jì)算密度下的應(yīng)用。



          關(guān)鍵詞: 繼電保護(hù) VxWorks FFT

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();