文獻(xiàn)標(biāo)識(shí)碼: B
文章編號(hào): 0258-7998(2012)09-0089-04
數(shù)據(jù)采集系統(tǒng)能實(shí)時(shí)采集生產(chǎn)過(guò)程中的各種數(shù)據(jù)、參數(shù),成為獲取系統(tǒng)工作狀態(tài)、運(yùn)行情況的非常重要的手段。近年來(lái),各種應(yīng)用領(lǐng)域?qū)?shù)據(jù)采集系統(tǒng)的性能提出了更加嚴(yán)格的要求:不但要求實(shí)現(xiàn)采集關(guān)鍵信息的功能,且對(duì)采集系統(tǒng)的抗干擾能力、無(wú)用信號(hào)的剔除能力提出了很高的要求。特別是在所采集信號(hào)被無(wú)用信號(hào)覆蓋或是采集系統(tǒng)工作在具有強(qiáng)干擾的環(huán)境下時(shí),如何從采集的數(shù)據(jù)中提取有用信號(hào),去除干擾信號(hào)是現(xiàn)如今數(shù)據(jù)采集系統(tǒng)的難點(diǎn)和研究的熱點(diǎn)。基于FPGA的FIR濾波器由于具有設(shè)計(jì)靈活、速度快、增益容易控制、穩(wěn)定性好的優(yōu)點(diǎn),逐漸成為數(shù)字信號(hào)提取的一種非常重要的手段。利用其作為數(shù)據(jù)采集系統(tǒng)的前端信號(hào)處理,已經(jīng)是高精度和抗干擾數(shù)據(jù)采集領(lǐng)域的很好的實(shí)現(xiàn)方案。
1 FIR 濾波器的簡(jiǎn)介
有限脈沖響應(yīng)FIR(Finite Impulse Response)濾波器由于其具有良好的線性相位和極高的穩(wěn)定性,在數(shù)字信號(hào)處理領(lǐng)域得到了極為廣泛的運(yùn)用。N階FIR濾波器基本系統(tǒng)函數(shù)如式(1):
一次輸出要做N次乘法和N-1次加法,所以如果用串行結(jié)構(gòu)來(lái)實(shí)現(xiàn),當(dāng)階數(shù)N較大時(shí),系統(tǒng)的延時(shí)就會(huì)很大。如今的數(shù)字FIR濾波器大體上可以分為基于DSP的FIR濾波器和基于FPGA的FIR濾波器:基于DSP的FIR濾波器實(shí)現(xiàn)簡(jiǎn)單,只需要幾條簡(jiǎn)單的語(yǔ)句就可以實(shí)現(xiàn),大量運(yùn)用于數(shù)字信號(hào)處理過(guò)程中。但是由于DSP的運(yùn)算是串行的,所以不可能設(shè)計(jì)出高階快速的FIR濾波器?;贔PGA的FIR濾波器是近幾年隨著FPGA資源的急速增長(zhǎng)而發(fā)展出來(lái)的一種新型的FIR濾波實(shí)現(xiàn)方案[2],它具有可配置性強(qiáng),靈活多樣,速度快,穩(wěn)定性高的優(yōu)點(diǎn),逐漸成為工業(yè)控制和航天領(lǐng)域中FIR濾波的首選實(shí)現(xiàn)方案。
2 系統(tǒng)實(shí)現(xiàn)方案
2.1 總體設(shè)計(jì)方案
系統(tǒng)采集的模擬信號(hào)是帶有很大噪聲和正弦信號(hào)的未解調(diào)的微弱電壓信號(hào),系統(tǒng)實(shí)現(xiàn)框圖如圖2所示。
調(diào)節(jié)滑動(dòng)變阻器, 將OPA2277的輸出電壓控制在0~5 V之內(nèi),雖然加入了一個(gè)簡(jiǎn)單的有源RC低通濾波,但是信號(hào)有用成分仍然被噪聲和疊加的高頻正弦波所覆蓋。
放大后的電壓信號(hào)雖然幅值在0~5 V之內(nèi),但是淹沒在其中的關(guān)鍵信號(hào)卻仍然只有幾毫伏,如果用普通的低精度ADC進(jìn)行模數(shù)轉(zhuǎn)換,由于ADC的轉(zhuǎn)換誤差正好和關(guān)鍵信號(hào)相差不大,使得轉(zhuǎn)換后的數(shù)字信號(hào)中引入了相對(duì)大的誤差。即使后續(xù)濾波,得到的也是疊加了誤差的關(guān)鍵信號(hào),無(wú)法實(shí)現(xiàn)高精度采集并解調(diào)。因此采用TI公司的24位16通道串行高精度ADC芯片ADS1258進(jìn)行模數(shù)轉(zhuǎn)換。電路圖如圖4所示。
ADC的主時(shí)鐘采用FPGA主時(shí)鐘分頻后的16 MHz方波信號(hào),選擇AIN0~AIN9通道作為模擬信號(hào)輸入,內(nèi)部采用自動(dòng)掃描方式。ADC的控制端口都接到了FPGA的通用I/O口。 ADC內(nèi)部寄存器配置數(shù)據(jù)從FPGA通過(guò)ADC的SPI口寫入。配置數(shù)據(jù)在SPI時(shí)鐘的上升沿寫入,轉(zhuǎn)換后的數(shù)據(jù)在SPI時(shí)鐘的下降沿讀出。內(nèi)部寄存器配置情況如表1所示。
本系統(tǒng)的主控制器采用XILINX公司的SPARTAN3E系列的FPGA XC3S200E,這款芯片在資源上能滿足系統(tǒng)的要求,而且最重要的是在開發(fā)環(huán)境ISE 9.1以后的版本中,對(duì)于SPARTAN3E系列的芯片系統(tǒng)都自帶了功能強(qiáng)大的FIR濾波器IP核,這樣方便設(shè)計(jì)高速可靠、占用資源少的FIR濾波器。數(shù)據(jù)傳送到上位機(jī)使用CY7C68013,由于這方面的設(shè)計(jì)不是本系統(tǒng)的重點(diǎn),因此不再累述。
2.3 系統(tǒng)程序設(shè)計(jì)
程序設(shè)計(jì)是本系統(tǒng)的關(guān)鍵所在,區(qū)別于以往系統(tǒng)的關(guān)鍵之處就是高精度ADC的使用和創(chuàng)新性的FIR濾波的引入,使得采集系統(tǒng)具備了超高精度和強(qiáng)抗干擾的能力。
ADS1258是一款多通道串行ADC,由于其控制方式是向其內(nèi)部寄存器寫入一定配置數(shù)據(jù)來(lái)完成A/D轉(zhuǎn)換,所以其使用較為靈活??膳渲玫牟ㄌ芈始皵夭üδ芤彩蛊骷男阅芨油怀?。器件控制流程如圖5所示。
ADC的讀寫時(shí)序特別重要,所以必須按照芯片資料將各個(gè)狀態(tài)之間轉(zhuǎn)換的延時(shí)控制好,既不影響轉(zhuǎn)換周期也能保證結(jié)果的正確。器件上電后的218個(gè)TCLK周期的延時(shí)必須保證,否則雖然芯片也能工作,能進(jìn)行A/D轉(zhuǎn)換,但是寫寄存器命名無(wú)法使用,無(wú)法將系統(tǒng)需要的配置數(shù)據(jù)寫到各個(gè)寄存器。在系統(tǒng)開發(fā)的前期,由于忽略了這個(gè)長(zhǎng)時(shí)間的復(fù)位時(shí)間,導(dǎo)致寫命令一直無(wú)法正確執(zhí)行,后來(lái)加上復(fù)位延時(shí)后,ADC工作正常,寄存器數(shù)據(jù)能順利寫進(jìn)去。每完成一次轉(zhuǎn)換,能從芯片SPI口讀出32位有效數(shù)據(jù)[3],數(shù)據(jù)格式如表2所示。
數(shù)據(jù)低24位為有效A/D數(shù)據(jù),高8位為狀態(tài)和通道標(biāo)志位,NEW位指示通道數(shù)據(jù)是否更新,NEW=1代表通道數(shù)據(jù)相對(duì)前一次讀取已經(jīng)更新,NEW=0代表未更新,這樣通過(guò)判斷NEW的值可以防止重復(fù)讀取同樣的數(shù)據(jù)。OVF位和SUPPLY位分別指示通道端口電壓和供電電壓是否正常。CHID4~CHID0用來(lái)判定讀出的數(shù)據(jù)是屬于哪個(gè)通道。通過(guò)把不同通道的低24位數(shù)據(jù)寫入FPGA不同的存儲(chǔ)空間,為接下來(lái)的FIR濾波做準(zhǔn)備。
FIR濾波器采用系統(tǒng)自帶的IP核來(lái)開發(fā),這樣可以保證FIR濾波器的可靠性并大大縮短開發(fā)周期。濾波系數(shù)采用Matlab的濾波器設(shè)計(jì)工具FDATOOL來(lái)產(chǎn)生數(shù)據(jù)。由于系統(tǒng)設(shè)計(jì)的是超高FIR濾波器,因此系數(shù)的生成也需特別注意,并進(jìn)行一些特定的計(jì)算。下面介紹系數(shù)的生成辦法。在Matlab主界面輸入FDATOOL命令,調(diào)用FDATOOL工具并設(shè)置好濾波系數(shù)[4]。由于ADC的采樣頻率為23.7 kS/s,因此濾波器的采樣頻率必須大于23.7 kS/s,設(shè)置為50 kHz。由于需要采集的關(guān)鍵信號(hào)的頻率低于100 Hz,因此設(shè)置截止頻率為200 Hz。之后,將數(shù)據(jù)導(dǎo)入到Matlab中,得到的數(shù)據(jù)全為小數(shù),默認(rèn)保留了小數(shù)點(diǎn)后面四位。
由于FPGA不能直接做浮點(diǎn)運(yùn)算,因此必須將系數(shù)整型化,整型化的好壞直接影響濾波的精度[5]。當(dāng)系數(shù)整型化后的系數(shù)精度不夠時(shí),由于是200階的高階濾波,哪怕一點(diǎn)的系數(shù)誤差,都會(huì)累積起來(lái)反應(yīng)在濾波結(jié)果上。經(jīng)過(guò)反復(fù)試驗(yàn)和研究,發(fā)現(xiàn)當(dāng)FIR濾波器的階數(shù)到200時(shí),整型化濾波系數(shù)必須將FDATOOL的值乘以220以上,上文所述濾波系數(shù)其實(shí)只是截取了小數(shù)點(diǎn)后面的四位,如果只將系數(shù)乘以104,則小數(shù)點(diǎn)4位以后的值便人為忽略了,這在高階FIR設(shè)計(jì)時(shí)會(huì)帶來(lái)極大誤差,造成濾波器不可用。通過(guò)觀察FDATOOL生成系數(shù)的格式,發(fā)現(xiàn)其為32位浮點(diǎn)型,其表示精度遠(yuǎn)遠(yuǎn)大于小數(shù)點(diǎn)四位。在Matlab中輸入如下命令:
coe=Num*16777216;
coe=round(coe);
fid=fopen(′fir300.txt′,′wt′);
fprintf(fid,′%d\n′,coe);
fclose(fid);
以上語(yǔ)句將系數(shù)擴(kuò)大了224倍,然后將系數(shù)取整,并以10進(jìn)制的格式保存到一個(gè)TXT文件中,通過(guò)手動(dòng)修改TXT文件內(nèi)容滿足ISE中系數(shù)文件COE的格式要求,最終將TXT文件的后綴名改為.COE[6],至此系數(shù)文件已經(jīng)生成好了。接下來(lái)便是在ISE中調(diào)用IP核設(shè)計(jì)高階FIR濾波器,具體步驟本文不再闡述。設(shè)計(jì)關(guān)鍵參數(shù)如表3所示。
3 系統(tǒng)實(shí)驗(yàn)結(jié)果
通過(guò)信號(hào)程序產(chǎn)生一路帶有很大噪聲的正弦信號(hào)輸入到FPGA進(jìn)行處理,將處理前和處理后的信號(hào)都發(fā)送到上位機(jī)進(jìn)行畫圖和頻譜分析,得到如圖6結(jié)果:其上半部分是輸入的帶噪聲的信號(hào),下半部分是經(jīng)過(guò)濾波后得到的信號(hào)。
從圖6可以看出,由FPGA設(shè)計(jì)的高階FIR濾波器良好地實(shí)現(xiàn)了有用信號(hào)的提取,輸入信號(hào)中的噪聲衰減到幾乎為零,即融入了FIR濾波器的本系統(tǒng)具有強(qiáng)抗干擾并同時(shí)解調(diào)信號(hào)的能力。圖7是濾波前和濾波后采集到信號(hào)的頻譜分析圖。
圖7可以看出,濾波后系統(tǒng)良好地提取出了頻率為0.08 kHz的信號(hào),而頻率為0.23 kHz、0.33 kHz、0.41 kHz的高頻干擾信號(hào)被削減到了幾乎為零,很好地實(shí)現(xiàn)了100 Hz內(nèi)的信號(hào)高精度解調(diào)。
具有FIR濾波功能的數(shù)據(jù)采集系統(tǒng)較過(guò)去的單一采集系統(tǒng)有很大的進(jìn)步。高階FIR濾波器的引入使得本采集系統(tǒng)集抗干擾和解調(diào)信號(hào)于一體,能適用于各種具有強(qiáng)干擾或者疊加大量無(wú)用信號(hào)的數(shù)據(jù)采集場(chǎng)合。
參考文獻(xiàn)
[1] 趙嵐,畢衛(wèi)紅,劉豐.基于FPGA分布式算法FIR濾波器設(shè)計(jì)[J].電子測(cè)量技術(shù),2007,30(7):101-104.
[2] 張維良.高速并行FIR濾波器的FPGA實(shí)現(xiàn)[J]. 系統(tǒng)工程與電子技術(shù),2009,31(8):1819-1822.
[3] TI. ADS1258 DATASHEET:30-40.
[4] 孫耀其. 基于MATLAB和FPGA的FIR數(shù)字濾波器設(shè)計(jì)與實(shí)現(xiàn)[J]. 通信與信息技術(shù),2008(11): 89-92.
[5] 徐峰,禹衛(wèi)國(guó),唐紅. 基于FPGA的流水線分布式算法的FIR濾波器的實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2004,30(7):70-73.
[6] XILINX. XILINX FIR_compiler_ds534:17-35.