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