基于DSP的高精度數(shù)字頻率計(jì)的設(shè)計(jì)
鍵盤定時(shí)中斷掃描
為滿足系統(tǒng)實(shí)時(shí)性要求、完成鍵盤操作的實(shí)時(shí)響應(yīng),本系統(tǒng)設(shè)置了一個(gè)5ms的時(shí)基,采用事件管理器的EVB的time4定時(shí)周期中斷來完成。對鍵盤掃描、命令形成與標(biāo)志位設(shè)置功能,都在定時(shí)器中斷服務(wù)子程序完成。鍵盤定時(shí)中斷掃描流程圖如圖5所示。
本文引用地址:http://www.ex-cimer.com/article/163945.htm
捕獲中斷測頻
本系統(tǒng)使用TMS320F2812事件管理器模塊的捕獲單元來測頻,捕捉被測信號(hào)的有效電平跳變沿,由內(nèi)部的計(jì)數(shù)器記錄一個(gè)周波內(nèi)標(biāo)頻脈沖個(gè)數(shù),并通過相應(yīng)的運(yùn)算來得到被測頻率的大小。此模塊主要包括捕獲與定時(shí)的初始化設(shè)置與捕獲中斷子程序兩部分。
捕獲中斷測頻子程序的部分代碼如下:
(1)void InitEv1(void)//捕獲1初始化設(shè)置
{
EALLOW;
SysCtrlRegs.HISPCP.all = 0x00;// 外設(shè)高速時(shí)鐘
EDIS;
EvaRegs.CAPCONA.bit.CAP1EDGE=1; //檢測上升沿,計(jì)算周期脈沖寬度
EvaRegs.CAPFIFOA.bit.CAP1FIFO=0; //CAP1FIFO空
EvaRegs.CAP1FBOT=0;//棧底清零
EvaRegs.CAP1FIFO=0;
EvaRegs.EVAIFRC.bit.CAP1INT=1;//清捕獲中斷1標(biāo)志位
EvaRegs.EVAIMRC.bit.CAP1INT=1; //捕獲1中斷使能
}
(2)interrupt void CAPINT1_isr(void)//捕獲中斷1子程序
{
CAP1_t1=EvaRegs.CAP1FIFO;//
CAP2_t1=EvaRegs.CAP1FIFO;
if(CAP2_t1>CAP1_t1)
temp1=CAP2_t1-CAP1_t1;
else
temp1=CAP2_t1+EvaTimer1InterruptCount*65535-CAP1_t1;
f1= 1171875.0/(float)temp1;
value=f1;
fpart = modf(value, ipart);
a1=(long)ipart;//獲得頻率的32位整數(shù)
*(Uint16 *)0x80008=a10x0ffff;//獲的低16位
*(Uint16 *)0x80009=(a10xffff0000)>>16;//獲的高16位
EvaRegs.EVAIFRC.bit.CAP1INT=1;//清捕獲中斷1標(biāo)志位
EvaRegs.EVAIMRC.bit.CAP1INT=1; //捕獲1中斷使能
PieCtrlRegs.PIEACK.bit.ACK3 = 1;//開外設(shè)中斷應(yīng)答
}
LCD顯示處理
LCD的顯示分為信息區(qū)與顯示區(qū)兩部分。其中信息區(qū)包括固定信息(顯示煙臺(tái)大學(xué)DSP實(shí)驗(yàn)室等),顯示區(qū)包括通道號(hào)信息與各通道的頻率值信息的顯示。本模塊主要包括LCD的初始化設(shè)置與頻率值的顯示等子程序。
實(shí)驗(yàn)結(jié)果
本系統(tǒng)測試了如表1中的6組數(shù)據(jù),并做出了誤差分析。輸入信號(hào)頻率與實(shí)測信號(hào)頻率如表1所示。
誤差分析:本系統(tǒng)的誤差主要來自如下兩個(gè)方面,即計(jì)數(shù)脈沖和門控信號(hào)不同步以及晶振不穩(wěn)定。
結(jié)束語
本文設(shè)計(jì)了一種具有高精度和簡單結(jié)構(gòu)特點(diǎn)的測頻系統(tǒng),由于在實(shí)現(xiàn)上簡單,可以滿足低成本的要求,使測頻電路大為簡化,便于工程應(yīng)用,具有較大的應(yīng)用價(jià)值。
經(jīng)過反復(fù)測試后得出:系統(tǒng)的測頻誤差可達(dá)到0.1%,由于采用了實(shí)時(shí)的鍵盤定時(shí)中斷掃描,可以較好地滿足實(shí)時(shí)性要求。
評(píng)論