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