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