基于DSP/BIOS在電能質(zhì)量監測終端中的應用
DSP(數字信號處理器)在現今的工程應用中使用越來(lái)越頻繁。其原因主要有三點(diǎn):第一,它具有強大的運算能力,能夠勝任FFT、數字濾波等各種數字信號處理算法;第二,各大DSP廠(chǎng)商都為自己的產(chǎn)品設計了相關(guān)的IDE(集成開(kāi)發(fā)環(huán)境),使得DSP應用程序的開(kāi)發(fā)如虎添翼;第三,具有高性?xún)r(jià)比,相對于它強大的性能,不高的價(jià)格有著(zhù)絕對的競爭力。
本文引用地址:http://dyxdggzs.com/article/270761.htmTI為本公司的DSP設計了集成可視化開(kāi)發(fā)環(huán)境CCS(Code Composer Studio),而DSP/BIOS是CCS的重要組成部分。它實(shí)質(zhì)上是一種基于TMS320系列DSP平臺的實(shí)時(shí)操作系統內核,也是TI公司實(shí)時(shí)軟件技術(shù)——eXpress DSP技術(shù)的核心部分。DSP/BIOS主要包含三方面的內容:多線(xiàn)程內核、實(shí)時(shí)分析工具、外設配置庫。
1 系統功能需求
電能質(zhì)量監測終端主要功能是對電網(wǎng)(三相電壓、電流)的電能質(zhì)量進(jìn)行實(shí)時(shí)監測與分析。其主要監測量有:電壓、電流有效值,有功、無(wú)功功率,電壓頻率,三相不平衡,各次諧波電壓、電流含有率,功率因素,相移功率因素,電壓波動(dòng),長(cháng)時(shí)間、短時(shí)間閃變。
系統選用TI公司的高性能DSP芯片TMS320F2812作為處理核心,其150 MIPS的處理速度足以滿(mǎn)足本系統的實(shí)時(shí)性要求。按照系統需求,將本系統分成以下功能模塊:引導自檢模塊、采集任務(wù)執行模塊、電能質(zhì)量數據預處理模塊、電能質(zhì)量分析運算模塊、數據存儲模塊、通信模塊、人機交互模塊。按照傳統的編程方式,這些功能模塊將以順序結構形式組織在一起,各模塊之間的調用和切換都由各模塊自身的代碼來(lái)完成,使得應用程序各模塊之間處于一種耦合狀態(tài)。如果要添加新的功能模塊或者修改已有的功能模塊,不但要修改與之相關(guān)模塊的調用代碼,而且新增模塊也會(huì )明顯影響到原有系統的時(shí)間響應特性,使得升級、維護起來(lái)相當麻煩。DSP/BIOS的出現提供了另外一種組織應用程序各功能模塊的機制。它將各功能模塊作為任務(wù)線(xiàn)程來(lái)看待,通過(guò)可配置的內核服務(wù)使各任務(wù)線(xiàn)程在系統調度器的安排下按照優(yōu)先級的高低分時(shí)復用CPU資源,各個(gè)任務(wù)線(xiàn)程之間通過(guò)同步、通信、數據交換等進(jìn)行協(xié)調。這種機制使得應用程序可維護性提高,并且提供了更方便、更高級的謫試手段。根據以上特點(diǎn),本系統采用DSP/BIOS作為實(shí)時(shí)內核,并以此為基礎對整個(gè)系統進(jìn)行設計。
圖1為系統在DSP/BIOS下的功能模塊分類(lèi)。

2 基于DSP/BIOS的軟件設計
2.1 執行線(xiàn)程規劃
系統的實(shí)時(shí)運行中,一些功能函數由外部控制信號驅動(dòng)或者按既定周期運行,所以,函數的驅動(dòng)方式和執行周期對實(shí)時(shí)系統非常重要。DSP/BIOS支持多線(xiàn)程應用,線(xiàn)程可以定義為不同的優(yōu)先級。高優(yōu)先級線(xiàn)程可以中斷低優(yōu)先級的線(xiàn)程,而且不同的線(xiàn)程之間可以實(shí)現交互,比如阻塞、通信和同步,線(xiàn)程分為以下4種類(lèi)型(優(yōu)先級由高到低):硬件中斷(HWI)、軟件中斷(SWI)、任務(wù)(TSK)、后臺線(xiàn)程(IDL)。按照電能質(zhì)量監測終端系統的功能需求,將系統各子功能模塊分為以上4種類(lèi)型線(xiàn)程。
首先,安排硬件中斷線(xiàn)程(HWI)。一般情況下,系統的主要程序代碼放在軟件中斷或任務(wù)中;但是,與外部設備密切相關(guān)、實(shí)時(shí)性要求很高的功能模塊程序代碼必須放置在硬件中斷中。本系統按照上述要求,將以下幾個(gè)子功能模塊設置為硬件中斷線(xiàn)程:A/D采集任務(wù)模塊和通信模塊(接收)。A/D采集是本系統的重要基礎,并且與系統底層硬件緊密相連,所以將它設置為硬件中斷線(xiàn)程(HWI)。其主要流程是:A/D芯片以一定的頻率采集電網(wǎng)的實(shí)時(shí)數據,然后與DSP的McPSP口進(jìn)行通信。DSP接收A/D芯片采集的數據,并存儲在片內RAM的特定區域,為其他線(xiàn)程的運算作好準備。通信模塊采用RS485與上位機通信,其與系統的底層硬件密切相關(guān),而且DSP本身的SCI接口只有最大16個(gè)字的FIFO,如不及時(shí)對接收數據進(jìn)行處理,將會(huì )造成數據丟失。
下面介紹HWI模塊在DSP/BIOS中的參數設置。McBSP串口的接收中斷放在HWI模塊的HWI_INT6位置上,并且將接收中斷的ISR函數ad_rx_isr()填寫(xiě)到HWI_INT6中斷的函數調用項中;同時(shí)選擇使用DSP/RI-OS的HWI調度功能,當響應McBSP串口接收中斷時(shí),系統將自動(dòng)調用ad_rx_isr()函數。McBSP串口接收中斷設置如圖2所示。與McBSP串口接收中斷設置類(lèi)似,設置SCIA接收中斷為通信接收中斷,將其ISR函數scia_rx_isr()填寫(xiě)到HWI_INT9中斷的函數調用項中。響應接收中斷時(shí),系統調用scia_rx_isr()函數進(jìn)行處理。CLK線(xiàn)程也屬于HWI硬件中斷線(xiàn)程之一,它為整個(gè)系統的運行提供了時(shí)間基準,為用戶(hù)周期性地調用函數提供了方法,同時(shí)為一些代碼評估工具提供了時(shí)間參考。CLK模塊完全依賴(lài)于DSP的定時(shí)器中斷,TMS320C2812為DSP/BIOS提供了2個(gè)定時(shí)器。

其次,安排軟件中斷線(xiàn)程(SWI)。所有的軟件中斷都是通過(guò)DSP/BIOS內核的API調用來(lái)啟動(dòng)的,為了便于控制,系統為每個(gè)SWI對象都設置一個(gè)16位的郵箱(Mailbox),可以利用這個(gè)郵箱的值有條件地啟動(dòng)對應的軟件中斷??梢詫⑾鄬τ谄胀ㄈ蝿?wù)比較重要的、發(fā)生頻率比較頻繁的子功能模塊安排在軟件中斷線(xiàn)程(SWI)中。其子功能模塊包括:電能質(zhì)量數據預處理模塊、通信模塊(發(fā)送)。電能質(zhì)量數據預處理模塊主要完成對A/D轉換結果的后續處理。對A/D轉換結果進(jìn)行預處理是必要的。因為A/D芯片選用固定頻率進(jìn)行采集,但是電網(wǎng)的頻率fo是波動(dòng)的,所以直接對采集數據進(jìn)行FFT運算會(huì )產(chǎn)生頻譜泄漏,因此,必須對采集數據進(jìn)行預處理。例如,對4個(gè)周波每個(gè)周渡256點(diǎn)一共l024個(gè)數據進(jìn)行1024點(diǎn)的FFT運算。假設4個(gè)周波的平均頻率為f,則頻率分辨率為f/4,FFT運算結果依次為f/4、2f/4、3f/4、f、5f/4……頻率上的強度。因此,當電網(wǎng)頻率fo發(fā)生變化時(shí),進(jìn)行FFT運算的電網(wǎng)數據頻率f也要隨之變化,使得進(jìn)行FFT運算前的電網(wǎng)數據頻率f始終與當前電網(wǎng)的頻率fo保持一致。電能質(zhì)量數據預處理模塊具體操作是對A/D轉換后的數據進(jìn)行插值,插值算法采用線(xiàn)性插值。經(jīng)過(guò)驗證,額定電壓下,線(xiàn)性插值算法造成的FFT運算的誤差在O.1‰以?xún)?。除此之外,該模塊還有一個(gè)功能就是計算一個(gè)周波內的電壓有效值。這是計算電壓波動(dòng)和長(cháng)時(shí)間、短時(shí)間閃變的必要數據。通信模塊(發(fā)送)負責向上位機發(fā)送數據,雖然其實(shí)時(shí)性要求不高,但是與硬件底層密切聯(lián)系,所以設置為軟件中斷線(xiàn)程。當串口接收中斷發(fā)生時(shí),調用scia_rx_isr()函數對接收數據命令進(jìn)行處理,根據相關(guān)的命令發(fā)送相應的電能質(zhì)量數據。DSP/BIOS為軟件中斷對象提供了O~14的優(yōu)先級,按照上述線(xiàn)程的重要程度,將采集數據處理線(xiàn)程優(yōu)先級設為14,主機通信線(xiàn)程設為8,其他優(yōu)先級預留以便將來(lái)軟件升級。
需要注意的是:中斷線(xiàn)程(包括硬件中斷和軟件中斷)都運行于相同的堆棧。當高優(yōu)先級中斷發(fā)生導致系統進(jìn)行任務(wù)切換時(shí),高優(yōu)先級中斷線(xiàn)程會(huì )中斷低優(yōu)先級中斷線(xiàn)程;在運行高優(yōu)先級中斷線(xiàn)程前會(huì )保存低優(yōu)先級中斷線(xiàn)程相關(guān)寄存器內容,在高優(yōu)先級中斷線(xiàn)程運行結束后,寄存器會(huì )恢復為原先的內容,繼續完成原先低優(yōu)先級線(xiàn)程。所以,如果設置硬件中斷或軟件中斷線(xiàn)程過(guò)多,則堆棧將會(huì )溢出,為此必須將大部分任務(wù)模塊放置在任務(wù)線(xiàn)程中。接下來(lái),安排任務(wù)線(xiàn)程(TSK)。如同絕大多數實(shí)時(shí)系統,任務(wù)線(xiàn)程是整個(gè)系統的主要組成部分。任務(wù)線(xiàn)程中的函數可以獨立運行,也可以并行運行。DSP/BIOS任務(wù)管理模塊根據任務(wù)線(xiàn)程的優(yōu)先級安排運行,并通過(guò)切換函數完成從一項任務(wù)到另一項任務(wù)的轉換。每個(gè)任務(wù)有4種執行狀態(tài):運行(run)、就緒(ready)、暫停(blocked)和終止(terminated)。一月任務(wù)被創(chuàng )建,它總是處在4個(gè)狀態(tài)之一。DSP/BIOS為每個(gè)任務(wù)對象提供了-l~15的優(yōu)先級。任務(wù)會(huì )按照嚴格的優(yōu)先級順序來(lái)執行,相同優(yōu)先級的任務(wù)會(huì )按照“先來(lái)先服務(wù)”的原則來(lái)安排執行順序。需要注意的足,當創(chuàng )建一個(gè)任務(wù)線(xiàn)程時(shí),需要同時(shí)建立一個(gè)屬于該任務(wù)的專(zhuān)用堆棧。該堆棧用于存儲奉地局部變量或進(jìn)一步的函數調用嵌套。
我們將電能質(zhì)量分析運算模塊、數據存儲模塊、人機交互模塊設置在任務(wù)線(xiàn)程(TSK)中。電能質(zhì)量分析運算模塊又可以分為諧波計算任務(wù)線(xiàn)程、電壓波動(dòng)計算任務(wù)線(xiàn)程、閃變計算任務(wù)線(xiàn)程3部分。諧波計算任務(wù)線(xiàn)程主要負責對電能質(zhì)量數據預處理后的結果進(jìn)行FFT運算。FFT運算主要包括位轉換運算、加窗運算、以2為基的蝶形運算、分裂基運算、平方和運算5個(gè)部分。電壓波動(dòng)計算任務(wù)線(xiàn)程負責記錄3 min內電網(wǎng)電壓的波動(dòng)情況。前面電能質(zhì)量數據預處理模塊已經(jīng)得出每個(gè)周波的電壓有效值,這樣,只須記錄3min內電壓有效值最大值和最小值,兩者之差就是電壓波動(dòng)。閃變計算仟務(wù)線(xiàn)程包括計算短時(shí)間閃變和長(cháng)時(shí)間閃變?,F在一般采用IEC閃變儀設計方法,輸入適配自檢信號通過(guò)平方解調器、帶通加權濾波、平方一階低通濾波、在線(xiàn)統計評價(jià)4個(gè)過(guò)程最終得到閃變值;但足此方法復雜、耗時(shí)多。通過(guò)算法簡(jiǎn)化,得出一種簡(jiǎn)單可行的運算方法:對連續256個(gè)周波的電壓有效值進(jìn)行FFT運算,結果再經(jīng)過(guò)加權等一系列運算后可以得到12.8s的閃變值,10min內閃變值經(jīng)過(guò)相關(guān)運算就可得到短時(shí)間閃變,12次連續短時(shí)間閃變(2 h內)經(jīng)過(guò)運算可以得到長(cháng)時(shí)間閃變。經(jīng)過(guò)驗證,此種算法與IEC閃變儀算法相比,誤差在l‰以?xún)取?/p>
數據存儲模塊也放置在任務(wù)線(xiàn)程中,其過(guò)程是將電能質(zhì)量分析結果、電壓波動(dòng)以及閃變值存儲在FIash中。人機交互模塊包括鍵盤(pán)檢測任務(wù)和液晶顯示任務(wù)兩部分。鍵盤(pán)檢測任務(wù)線(xiàn)程可以通過(guò)周期函數PRD來(lái)完成。PRD可以根據實(shí)時(shí)時(shí)鐘來(lái)確定函數運行的時(shí)間。這里,設置鍵盤(pán)檢測任務(wù)100ms運行1次,檢測按鍵。根據按鍵情況,液晶顯示任務(wù)顯示當前最新電能質(zhì)量數據。
最后,就是后臺線(xiàn)程(IDL)。后臺線(xiàn)程(IDL)的優(yōu)先級最低,一般,將實(shí)時(shí)分析模塊(TRA)放在其中運行,其可以在應用程序執行期間對DSP應用程序進(jìn)行實(shí)時(shí)交互與診斷。CCS巾有CPU負載圖、執行圖示、主機通道控制、信息記錄、統計觀(guān)察、實(shí)時(shí)控制板和內核/對象觀(guān)察等實(shí)時(shí)分析工具。這一系列功能模塊都可以放置在IDL線(xiàn)程中,通過(guò)這些工具,整個(gè)DSP系統的運行情況將一目了然。
2.2 線(xiàn)程之間的通信與同步
在這個(gè)多線(xiàn)程系統中,對共享資源的訪(fǎng)問(wèn)需要線(xiàn)程之間的相互協(xié)調來(lái)解決。
DSP/BIOS環(huán)境下有3種通信方式,即基于管道(PIPE)的通信、基于流(SIO)通道的通信以及基于主機(HST)通道的通信。
表l顯示了4種線(xiàn)程共享數據和實(shí)現同步的途徑。

本系統中,選用數據管道來(lái)管理線(xiàn)程之間的數據交換,因為它適用于高速實(shí)時(shí)或大批量的數據交換。每個(gè)數據管道對象保留一個(gè)緩存,并將該緩存分成一定數據的定長(cháng)幀,所有通過(guò)數據管道的I/O操作1次處理l幀。多線(xiàn)程之間的同步主要采用郵箱方式。
3 系統實(shí)時(shí)分析與調試
DSP/BIOS內核本身的開(kāi)銷(xiāo)對系統程序實(shí)時(shí)性會(huì )有影響,為此需要對DSP/BIOS內核進(jìn)行優(yōu)化??梢允褂肅CS中提供的DSP/BIOS分析工具確定DSP/BIOS的開(kāi)銷(xiāo)以及整個(gè)應用系統的運算量。比如,DSP/BIOS提供的實(shí)時(shí)分析工具中的CPU負載圖就是常用工具之一。
在最后的集成階段,由于實(shí)時(shí)交互等原因,會(huì )經(jīng)常出現一些錯誤或者響應不及時(shí)的現象。一般來(lái)說(shuō),由于這些現象是非周期性的并且出現的頻率很低,因此難于發(fā)現和跟蹤。然而,由于DSP/BIOS中的RTA模塊是嵌入到其內核中去的,再結合開(kāi)發(fā)人員所提供的定制檢測向量,從而提供了對錯誤產(chǎn)生根源的獨一無(wú)二的町視性。該可視化功能極大地幫助了隔離和修正錯誤,是一般嵌入式開(kāi)發(fā)系統所不具備的。
可以從下面四個(gè)方面提高整個(gè)系統中應用程序的執行性能:為不同的程序函數仔細選擇線(xiàn)程的類(lèi)型;把系統堆棧放置在片上內存中;降低時(shí)鐘中斷頻率;增加流式輸入輸出緩沖器的大小。
4 總 結
DSP/BIOS作為CCS提供的一套工具,其本身僅占用極少的CPU資源,但卻提供相當高的性能,加快了開(kāi)發(fā)進(jìn)度。采用DSP/BIOS作為電能質(zhì)量監測終端實(shí)時(shí)操作系統,編寫(xiě)DSP程序時(shí)控制硬件資源容易、協(xié)調各個(gè)軟件模塊靈活,大幅加快軟件的開(kāi)發(fā)、調試進(jìn)度。最終實(shí)驗證明,整個(gè)系統實(shí)時(shí)性好,運行穩定可靠。
評論