本文描述的應用旨在展示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%26;amp;Ox01) { thisnoise=thisnoise%26;amp;0xlff; } else { thisnoise=-1*(thisnoise%26;amp;Oxlff); } sample+=thisnoise; if(sample4095) 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有16位硬件乘加器,因此需要將浮點因數轉換成16位精度的定點因數。這一轉換會給理想的濾波器變換引入誤差。因此,該Java程序也給出建立在定點因數之上的實際變換結果,并以圖形方式給出了誤差。注意:盡管該程序既支持極點(突出頻率分量)也支持零點(衰減頻率分量),但演示代碼只使用零點。無限激勵響應濾波器(包含極點和零點)可以由另外的軟件來實現。在應用程序窗口底部的文本框中給出了生成的16位定點濾波因數以及其中的小數位數。 5 結論 MAXQ7654是一個高性能、應用廣泛的混合信號微處理器。MAXQ7654簡單的演示代碼和高集成設計可使性能最大化,該器件可在信號濾波應用領域為設計者提供易于使用的解決方案。 |