MAXQ7654在信號濾波中的應用
發布時間:2007/9/7 0:00:00 訪問次數:1590
本文描述的應用旨在展示MAXQ7654的混合信號特性。微控制器利用一個I)AC產生帶噪聲的正弦波。DA(:輸出被接入一個ADC輸入通道進行采樣。得到的采樣通過一個簡易的有限激勵響應(FIR)濾波器,以衰減信號中的高頻分量,從而在第二個DAC產生連續和光滑的正弦波輸出。利用豐富的模擬和數字外設,在很多有意義的應用中都可施展MAXQ7654的能力。本文聚焦于MAXQ7654的信號處理能力,主要展示其ADC、DAC和硬件乘加單元。采用IAR編譯器和MAXQ7654評估板(EV kit),通過一個應用實例說明如何從充滿噪聲的正弦波中濾出干凈的低頻信號。本應用的源代碼、項目文件和原理圖可在www.maxim—ic.com/MAXQ7654 Fiher下載。
1 集成的模擬功能和外設使信號濾波
MAXQ7654集成了16通道、12位ADC,完成一次轉換僅需16個時鐘周期。時鐘頻率為8MHz(最大值)時,每秒可完成500 000次采樣。測量單端模擬信號時可對多達16路信號進行采樣,測量差分信號時可對多達8路輸入信號進行采樣。該ADC也可進行溫度測量--MAXQ7654內含溫度傳感器,可讀取芯片(管芯)溫度。MAXQ7654包括一個用于信號處理硬件乘加單元。它能在一個周期中進行二個16位乘法,并且還有可選的累加器功能,可工作于帶符號或無符號模式。這樣一來簡化了FIR和IIR濾波器的實現;每個濾波因數只需3個機器周期的處理,其中包括調用濾波器的開銷。JT7AG調試引擎是MAXQ平臺公用的,當應用程序在目標硬件上運行時,利用它可完成寄存器和存儲器的讀、寫操作。采用.JTAG后還省掉了昂貴的仿真器。主要的C編譯器提供商,如Rowley、IAR和Python均支持MAXQ7654及其調試功能。
MAXQ平臺的一個新增外設是控制器局域網(CAN)2.0B接口,它是常用于工業和汽車領域的通信協議。MAXQ7654的CAN控制器支持15個消息中心,比特率高達1Mb/s。當收到或發出消息后以中斷形式通知系統。SPI?接口支持從機或主機模式,可進行8位或16位數據傳輸。SPI常見于小型電路,如可編程充電器、數字電位器、DAC、ADC和存儲器。MAXQ7654.有4個多功能定時器。這些定時器采用8位或16位計數方式,支持周期性中斷、脈寬調制、捕獲及比較功能的自動重裝載。
2 濾波應用的軟件架構
定時器產生中斷時第一個DAC輸出帶噪聲的正弦波,以確保輸出采樣具有固定的間隔。設計用于生成正弦波的代碼涉及復雜的浮點計算,實現的運算量很大。考慮到正弦波數據是周期性重復出現的。重新計算那些不會隨時間改變的正弦波數據會造成資源浪費,因此,在應用程序一開始就預先算出一組正弦波數據。在正弦波數據初始化之后,定時器產生周期性中斷。定時器中斷程序代碼中的一個偽隨機數產生器用來產生噪聲,噪聲被直接疊加到干凈的正弦波數據中,結果被傳給DAC產生輸出信號。為了保持演示程序代碼的簡潔,在用于產生輸出正弦波的定時中斷中同時對模擬輸入信號進行采樣。當讀取輸入采樣后,采樣信號通過簡易的FIR濾波軟件處理,為使效率最大化,該濾波軟件用匯編語言來實現。濾波后的采樣信號隨后從第2個DAC輸出。用示波器來比較二個DAC的輸出,可以發現一條正弦曲波較為粗糙,帶有噪聲,而另一條正弦比較干凈,由于FIR濾波器的長度有限,因而帶有輕微的相位延遲。
3 噪聲正弦波的生成和采樣
定時器中斷程序代碼如下,程序開始時已預先計算好正弦波數據,本段代碼將其轉換為噪聲正弦波數據。
sample=static-sin-data[sinindex++];
sinnoise=((sinnoise^0x5C)*31)+0xabcd;
thisnoise=sinnoise;
if(thisnoise&Ox01)
{
thisnoise=thisnoise&0xlff;
}
else
{
thisnoise=-1*(thisnoise&Oxlff);
}
sample+=thisnoise;
if(sample<0)
sample=sample*-1;
if(sample>4095)
sample=8192-sample;
DACll=sample; //Send value to DAC#1
if(sinindex>:SIN_WAVE_STEPS)
sinindex=0:
sinnoise變量用來存儲偽隨機噪聲(可能是正的或負的)。噪聲被疊加到干凈的正弦波數據后,所產生的噪聲正弦波數據被直接賦給DACll寄存器以進行數/模轉換。從ADC讀取采樣數據的過程幾乎同樣簡單。設置完ADC的采樣輸入引腳后,軟件可通過查詢BUSY位或者使能中斷來獲知轉換已經結束。本實例代碼使用了查詢方式。
inputsample=ADC_Convert_Poll(AIN0 | START CON
V | CONTINUOUS);
unsigned int ADC_Convert_Poll(unsigned int Con-
trol_Reg)
{
ACNT=Control Reg;//Set the ADC parameters
while(ACNT_bit.ADCBY==1); //Wait till
ADC is not busy
return ADCD; //Return the ADC result
}
注意,MAXQ7654中ADC的采樣率是500ks/s。在8MHz時鐘下,只需等待16個時鐘周期便可完成一次轉換。
4 簡單的數字濾波器設計
本應用所產生的波形中包含一個強低頻信號和大量的高頻噪聲。用一個簡單的低通濾波器可凈高精度的浮點濾波
本文描述的應用旨在展示MAXQ7654的混合信號特性。微控制器利用一個I)AC產生帶噪聲的正弦波。DA(:輸出被接入一個ADC輸入通道進行采樣。得到的采樣通過一個簡易的有限激勵響應(FIR)濾波器,以衰減信號中的高頻分量,從而在第二個DAC產生連續和光滑的正弦波輸出。利用豐富的模擬和數字外設,在很多有意義的應用中都可施展MAXQ7654的能力。本文聚焦于MAXQ7654的信號處理能力,主要展示其ADC、DAC和硬件乘加單元。采用IAR編譯器和MAXQ7654評估板(EV kit),通過一個應用實例說明如何從充滿噪聲的正弦波中濾出干凈的低頻信號。本應用的源代碼、項目文件和原理圖可在www.maxim—ic.com/MAXQ7654 Fiher下載。
1 集成的模擬功能和外設使信號濾波
MAXQ7654集成了16通道、12位ADC,完成一次轉換僅需16個時鐘周期。時鐘頻率為8MHz(最大值)時,每秒可完成500 000次采樣。測量單端模擬信號時可對多達16路信號進行采樣,測量差分信號時可對多達8路輸入信號進行采樣。該ADC也可進行溫度測量--MAXQ7654內含溫度傳感器,可讀取芯片(管芯)溫度。MAXQ7654包括一個用于信號處理硬件乘加單元。它能在一個周期中進行二個16位乘法,并且還有可選的累加器功能,可工作于帶符號或無符號模式。這樣一來簡化了FIR和IIR濾波器的實現;每個濾波因數只需3個機器周期的處理,其中包括調用濾波器的開銷。JT7AG調試引擎是MAXQ平臺公用的,當應用程序在目標硬件上運行時,利用它可完成寄存器和存儲器的讀、寫操作。采用.JTAG后還省掉了昂貴的仿真器。主要的C編譯器提供商,如Rowley、IAR和Python均支持MAXQ7654及其調試功能。
MAXQ平臺的一個新增外設是控制器局域網(CAN)2.0B接口,它是常用于工業和汽車領域的通信協議。MAXQ7654的CAN控制器支持15個消息中心,比特率高達1Mb/s。當收到或發出消息后以中斷形式通知系統。SPI?接口支持從機或主機模式,可進行8位或16位數據傳輸。SPI常見于小型電路,如可編程充電器、數字電位器、DAC、ADC和存儲器。MAXQ7654.有4個多功能定時器。這些定時器采用8位或16位計數方式,支持周期性中斷、脈寬調制、捕獲及比較功能的自動重裝載。
2 濾波應用的軟件架構
定時器產生中斷時第一個DAC輸出帶噪聲的正弦波,以確保輸出采樣具有固定的間隔。設計用于生成正弦波的代碼涉及復雜的浮點計算,實現的運算量很大。考慮到正弦波數據是周期性重復出現的。重新計算那些不會隨時間改變的正弦波數據會造成資源浪費,因此,在應用程序一開始就預先算出一組正弦波數據。在正弦波數據初始化之后,定時器產生周期性中斷。定時器中斷程序代碼中的一個偽隨機數產生器用來產生噪聲,噪聲被直接疊加到干凈的正弦波數據中,結果被傳給DAC產生輸出信號。為了保持演示程序代碼的簡潔,在用于產生輸出正弦波的定時中斷中同時對模擬輸入信號進行采樣。當讀取輸入采樣后,采樣信號通過簡易的FIR濾波軟件處理,為使效率最大化,該濾波軟件用匯編語言來實現。濾波后的采樣信號隨后從第2個DAC輸出。用示波器來比較二個DAC的輸出,可以發現一條正弦曲波較為粗糙,帶有噪聲,而另一條正弦比較干凈,由于FIR濾波器的長度有限,因而帶有輕微的相位延遲。
3 噪聲正弦波的生成和采樣
定時器中斷程序代碼如下,程序開始時已預先計算好正弦波數據,本段代碼將其轉換為噪聲正弦波數據。
sample=static-sin-data[sinindex++];
sinnoise=((sinnoise^0x5C)*31)+0xabcd;
thisnoise=sinnoise;
if(thisnoise&Ox01)
{
thisnoise=thisnoise&0xlff;
}
else
{
thisnoise=-1*(thisnoise&Oxlff);
}
sample+=thisnoise;
if(sample<0)
sample=sample*-1;
if(sample>4095)
sample=8192-sample;
DACll=sample; //Send value to DAC#1
if(sinindex>:SIN_WAVE_STEPS)
sinindex=0:
sinnoise變量用來存儲偽隨機噪聲(可能是正的或負的)。噪聲被疊加到干凈的正弦波數據后,所產生的噪聲正弦波數據被直接賦給DACll寄存器以進行數/模轉換。從ADC讀取采樣數據的過程幾乎同樣簡單。設置完ADC的采樣輸入引腳后,軟件可通過查詢BUSY位或者使能中斷來獲知轉換已經結束。本實例代碼使用了查詢方式。
inputsample=ADC_Convert_Poll(AIN0 | START CON
V | CONTINUOUS);
unsigned int ADC_Convert_Poll(unsigned int Con-
trol_Reg)
{
ACNT=Control Reg;//Set the ADC parameters
while(ACNT_bit.ADCBY==1); //Wait till
ADC is not busy
return ADCD; //Return the ADC result
}
注意,MAXQ7654中ADC的采樣率是500ks/s。在8MHz時鐘下,只需等待16個時鐘周期便可完成一次轉換。
4 簡單的數字濾波器設計
本應用所產生的波形中包含一個強低頻信號和大量的高頻噪聲。用一個簡單的低通濾波器可凈高精度的浮點濾波
熱門點擊
- OrCAD/PSpice9偏壓點和直流掃描分
- 16位Σ-ΔA/D轉換器AD7705與微控制
- 一種增大放大器增益的方法
- 基于FCHIP2指紋芯片的應用方案
- PCB線路板抄板方法及步驟
- 用于清除數據噪聲的簡單數字濾波器
- 用AD7008構成可程控正弦波信號發生器
- 基于Nios的掌紋鑒別系統設計與實現
- MAXQ7654在信號濾波中的應用
- Actel推出新款低成本CorePWM組件
推薦技術資料
- 泰克新發布的DSA830
- 泰克新發布的DSA8300在一臺儀器中同時實現時域和頻域分析,DS... [詳細]