基于TMS320F2812事件管理器的一種測頻方法
引言
頻率測量是電力系統(tǒng)測量中一個十分重要的環(huán)節(jié)。電力系統(tǒng)中采樣對測頻要求有一定的實時性。電網頻率范圍在45Hz與55Hz之間,一般在49.5與50.5之間波動。在精度要求不需要特別高的電網頻率測量中,本文給出一種基于DSP芯片TMS320F2812的一種簡易測頻方法。該方法有效利用F2812的片內外設事件管理器(EV)的捕獲功能,在被測信號的有效電平跳變沿捕獲計數(shù),電路實現(xiàn)多靠軟件設置,運算簡單,實時性好,精度達10-3,完全能夠滿足要求。
1 測頻原理及常用方法
測頻是電子測量技術中最基本的測量之一,通常采用的直接測頻方法有測頻法和測周法兩種。
測頻法就是在確定的閘門時間Tw內,記錄被測信號的變化周期數(shù)(或脈沖個數(shù))Nx,則被測信號的頻率為:fx=Nx/Tw。測周期法需要有標準信號的頻率fs,在待測信號的一個周期Tx內,記錄標準頻率的周期數(shù)Ns,則被測信號的頻率為:fx=fs/Ns。這兩種方法都會產生±1誤差(計數(shù)脈沖和門控信號不同步而產生)和標準頻率誤差(所使用的晶振不穩(wěn)定引起),且±1誤差較標準頻率誤差更大。為了保證測試精度,一般采用低頻端測周高頻端測頻。電網頻率在50Hz左右,采用測周法能達到較高的精度。捕獲測頻原理波形圖見圖1。精度更高的等精度測頻方法有多周期同步測頻法和多周期完全同步測頻法。但這兩種方法實現(xiàn)都比較復雜,可參看參考文獻[5].
2 測頻的硬件設計
2.1 TMS320F2812芯片簡介
TMS320F2812是TI公司2000系列的新型DSP芯片,具有32位低功耗定點處理器,最高主頻150MHz,有強大的操作能力和迅速的中斷響應處理能力。片內有18K字高速RAM,128K字的可加密Flash ROM。片上還集成了豐富的片內外設,有SPI、SCI、eCAN和McBSP等多個串口外圍設備,16通道的12位模數(shù)轉換器(ADC),兩個事件管理器(EVA,EVB),56個獨立的可編程、多用途通用I/O口(GPIO)。該DSP芯片集成了大量工業(yè)控制領域應用的外設接口,能大大簡化電路設計,同時它也具有足夠的處理能力,是應用于控制領域的一款高性能DSP處理器。
2.2 事件管理器及其捕獲單元
其片內外設事件管理器含有兩個模塊EVA和EVB,每個模塊都包括2個通用目的(GP)定時器、3個全比較/PWM單元、3個捕捉單元和1個正交編碼脈沖電路。事件管理器為用戶提供了眾多的功能和特點,在運動控制和馬達控制中特別有用。圖2是捕獲單元模塊圖,標出了一些相應的寄存器設置。
[!--empirenews.page--]
這里利用EV模塊的定時器,可以節(jié)省一個CPU定時器去處理其他工作。捕獲單元捕捉被測信號的有效電平跳變沿,由內部的計數(shù)器記錄一個周波內標頻脈沖個數(shù),并通過相應的運算來得到被測頻率的大小。頻率測量時應在接入DSP前接一比較電路,將被測信號整形為方波信號后輸出到DSP捕獲引腳。圖3為硬件電路模塊圖。
捕獲單元可以記錄捕獲單元引腳的變化,用戶可以指定診斷變化的方式(上升沿、下降沿或兩個邊沿)。當捕捉輸入引腳CAPx(x=1、2、3屬于EVA;x=4、5、6屬于EVB)檢測到變化時,它將捕捉所選擇的GP定時器的當前計數(shù)值,并把該計數(shù)值存儲在兩級深度的16位FIFO堆棧中。這里每個捕捉單元都有一個專用的2級深度FIFO堆棧,頂層堆棧由CAPFIFOx組成,底層由CAPxFBOT組成。測頻分兩次捕捉,第一次捕捉到引腳發(fā)生的指定變化時,捕獲單元將捕捉所選用計數(shù)器的計數(shù)值并把該值寫入FIFO堆棧的上層寄存器(如果堆棧為空)。如果在第一次捕捉的值讀取之前發(fā)生第二次捕捉,一個新的捕捉值會被送入底層寄存器。捕獲單元捕捉到數(shù)值后,相應的中斷標志位置1,如果沒有屏蔽中斷,就會產生外圍設備中斷請求。這里第一次捕捉屏蔽中斷,第二次設置為和第一次捕捉相同的跳變沿捕捉,并開中斷。響應中斷,就可以通過中斷服務程序讀出一對捕捉的數(shù)值。這樣的一對捕捉值正好是一個被測頻率周期的兩次計數(shù)。堆棧中的數(shù)值個數(shù)可以通過16位的FIFO狀態(tài)寄存器CAPFIFOA(或CAPFIFOB)檢測到。讀出堆棧中兩次存入的新舊捕獲值,就能計算出一個周波內的標頻脈沖數(shù),進而得出被測周波的頻率。
3 測頻軟件設計
3.1 事件管理器的初始化
初始化事件管理器時,在EVA的定時器1控制寄存器(T1CON)中設為連續(xù)增計數(shù)模式,64分頻(由于被測的電網頻率范圍在45Hz-55Hz,而TMS320F2812主頻為150MHz,計數(shù)器最大計數(shù)為0xFFFF,即65535.為使精度最高,選64分頻,150M/64/50=46875),并使能定時器T1。通過設置捕獲單元控制寄存器A(CAPCONA)的相應位來選用EVA模塊的CAP1和GP定時器T1,并設為上升沿捕獲。這里選用連續(xù)增計數(shù)模式,寫0xFFFF到周期寄存器T1PR以使兩次捕獲的計數(shù)值之差盡可能大。GP定時器T1根據(jù)輸入時鐘進行增計數(shù)直到計數(shù)器的計數(shù)值與周期寄存器(T1PR)的值相等時為止,在產生匹配后的下一個輸入時鐘上升沿定時器復位為0并重新開始計數(shù)。捕獲前要清中斷標志位,開捕獲中斷。初始化子程序下所示。
void InitEv(void)
{
EvaRegs.T1PR = 0xFFFF; //周期寄存器設為FFFF
EvaRegs.T1CNT=0;
EvaRegs.T1CON.all=0; //定時器控制寄存器
EvaRegs.T1CON.bit.TMODE=2; //連續(xù)增計數(shù)模式
EvaRegs.T1CON.bit.TPS=5; //4分頻
EvaRegs.T1CON.bit.TENABLE=1; //使能定時器
EvaRegs.CAPCON.all=0; //捕捉控制寄存器
EvaRegs.CAPCON.bit.CAPQEPN=1; //使能捕捉
EvaRegs.CAPCON.bit.CAP1EDGE=1; /檢測上升沿
EvaRegs.CAPCON.bit.CAP12TSEL=1; //選定時器1
EvaRegs.CAPFIFO.bit.CAP1FIFO=0; //CAP1FIFO空
EvaRegs.EVAIFRC.bit.CAP1INT=1;//清捕獲中斷1標志位
EvaRegs.EVAIMRC.bit.CAP1INT=1; //捕獲1中斷使能
}
3.2 捕獲中斷子程序[!--empirenews.page--]
進入捕獲中斷子程序時,保護現(xiàn)場后首先清CAP1中斷標志位,從2級深度FIFO中依次讀出兩次捕獲的計數(shù)值capnum1和capnum2。如果capnum2大于capnum1,則直接相減,之差即為在被測頻率的一個周波內記的定時器T1脈沖數(shù)t。若capnum2小于capnum1,則說明在計數(shù)過程中有計數(shù)溢出,即計數(shù)到周期寄存器T1PR內寫入的0xFFFF后回零重新計數(shù),因此在求脈沖數(shù)t時要在capnum2與capnum1之差上加上0xFFFF。被測的信號頻率:f = 時基T1的頻率/ t,這里時基T1的頻率為時鐘主頻除以分頻系數(shù),即fT1=150M/64,因此所測頻率f=150M/64t。下面為捕獲中斷子程序。
unsigned int capnum1;
unsigned int capnum2;
float f;
float pinlvf[5];
int fnum=0;
interrupt void CAPINT1_ISR(void) // EV-A捕獲中斷子程序
{
unsigned int temp;
EvaRegs.EVAIFRC.bit.CAP1INT=1;// 清捕獲中斷1標志位
capnum1=EvaRegs.CAP1FIFO;
capnum2=EvaRegs.CAP1FIFO;
if(capnum2 > capnum1)
temp = capnum2-capnum1;
else
temp = capnum2+(0xFFFF-capnum1);
pinlvf[fnum++] =temp;
if(fnum>4) fnum=0;//取5個數(shù)值后回零
f= 2343750.0/(float)temp;//f= 150M/64/temp
PieCtrl.PIEACK.bit.ACK3 = 1;//開外設中斷應答
}
結語
本文給出了基于DSP芯片TMS320F2812的一種測頻方法,主要利用了其自帶的片內外設事件管理器的捕獲功能。方法簡單,實時性好,所測頻率精度達到10-3,完全能夠滿足電力系統(tǒng)中經常要用到的測頻精度。并已在電網自動化FTU上應用,有較大的實用價值。