FPGA實(shí)現(xiàn)的FIR算法在汽車動(dòng)態(tài)稱重儀中的應(yīng)用
摘 要:本文介紹了用FPGA實(shí)現(xiàn)的FIR算法,并對(duì)這種算法應(yīng)用于汽車動(dòng)態(tài)稱重儀表中的結(jié)果做了分析。實(shí)踐證明此算法用于動(dòng)態(tài)稱重具有良好的效果。
關(guān)鍵詞: FPGA;FIR;動(dòng)態(tài)稱重
引言
車輛在動(dòng)態(tài)稱重時(shí),作用在平臺(tái)上的力除真實(shí)軸重外,還有許多因素產(chǎn)生的干擾力,如:車速、車輛自身諧振、路面激勵(lì)、輪胎驅(qū)動(dòng)力等,給動(dòng)態(tài)稱重實(shí)現(xiàn)高精度測(cè)量造成很大困難。若在消除干擾的過(guò)程中采用模擬方法濾波,參數(shù)則不能過(guò)大,否則將產(chǎn)生過(guò)大的延遲導(dǎo)致不能實(shí)現(xiàn)實(shí)時(shí)處理,從而造成濾波后的信號(hào)仍然含有相當(dāng)一部分的噪聲。所以必須采用數(shù)字濾波消除干擾。
FIR濾波的原理及實(shí)現(xiàn)
本文采用FIR數(shù)字濾波,其原理如公式1所示。
Y(n)= (1)
其中h(k)為系統(tǒng)濾波參數(shù),x(n)為采集的信號(hào),Y(n)為濾波后的輸出信號(hào)。
FIR濾波器的h(n)0≤n≤N-1
H(z)= (2)
在本文中N=17。由于h(n)具有對(duì)稱性質(zhì),即:
h(n)=h(N-1-n) (n=0,1,...,(N-1)/2) (3)
這樣就可以把FIR濾波器設(shè)計(jì)成具有線性相位。利用這一情況,可以得到的乘法結(jié)構(gòu),需要(N+1)/2次乘法,僅是級(jí)聯(lián)或并聯(lián)結(jié)構(gòu)所需次數(shù)的一半,因此,實(shí)際應(yīng)用中多采用此方法。
我們選用17點(diǎn)的FIR濾波算法,這樣實(shí)現(xiàn)一次FIR卷積運(yùn)算需要執(zhí)行9次乘法和16次加法。為了實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)處理,需要在20ms內(nèi)完成這個(gè)卷積運(yùn)算,如果選用單片機(jī)89C51(12M晶振)則無(wú)法實(shí)現(xiàn)。所以我們選用了Altera公司的FLEX10K20。FLEX10K系列是工業(yè)界第一個(gè)嵌入式的PLD,采用重復(fù)可構(gòu)造的CMOS SRAM工藝,把連續(xù)的快速通道互連與獨(dú)特的嵌入式陣列結(jié)構(gòu)相結(jié)合,同時(shí)也結(jié)合了眾多可編程器件的優(yōu)點(diǎn)來(lái)完成普通門陣列的宏功能。具有高密度、低成本、低功率等特點(diǎn)。
圖1 硬件結(jié)構(gòu)框圖
圖2
圖3
圖4
硬件設(shè)計(jì)
由于我們選用的AD1674芯片轉(zhuǎn)換時(shí)間為10ms,而所設(shè)計(jì)的電路每隔20ms啟動(dòng)轉(zhuǎn)換一次,所以有足夠的時(shí)間完成模數(shù)轉(zhuǎn)換。軸重臺(tái)的寬度為40cm,汽車通過(guò)軸重臺(tái)的最大速度為15km/h,通過(guò)計(jì)算可知在這段時(shí)間里系統(tǒng)可采集4800個(gè)數(shù)據(jù)。由于前30ms是傳感器的反應(yīng)時(shí)間,將剩下的數(shù)據(jù)進(jìn)行FIR數(shù)字濾波后,噪聲會(huì)被有效的抑制。為了進(jìn)一步平滑波形,對(duì)每8個(gè)數(shù)據(jù)做一次平均,這樣就消弱了由于汽車高速通過(guò)軸重臺(tái)時(shí)由于顛簸產(chǎn)生的尖峰信號(hào)。FPGA的每次濾波包含有FIR運(yùn)算和8個(gè)數(shù)據(jù)的平均值運(yùn)算,完成一次濾波就會(huì)向單片機(jī)發(fā)一個(gè)中斷請(qǐng)求,此時(shí)單片機(jī)讀取濾波后的數(shù)據(jù)。由于我們選用的A/D轉(zhuǎn)換器是12位,而單片機(jī)89C51是8位的,所以經(jīng)過(guò)處理后的數(shù)據(jù)必須分兩次讀入。第一次讀入低8位,第二次讀入高4位,然后對(duì)數(shù)據(jù)處理。此時(shí)我們可以認(rèn)為單片機(jī)接收的數(shù)據(jù)為濾波后不含有噪聲的數(shù)據(jù)。根據(jù)軸重稱量的波形圖可以知道,只要求出此時(shí)的最大值就是汽車的真實(shí)重量。
在此儀表中,串行口即用來(lái)顯示也用來(lái)通訊,我們可以通過(guò)FPGA很容易實(shí)現(xiàn)切換。如圖1所示,當(dāng)控制信號(hào)為1的時(shí)候RXD、TXD用于顯示,而當(dāng)控制信號(hào)為0的時(shí)候用于和上位機(jī)通訊。
我們選用加海明窗的理想低通濾波器,其歸一化截至頻率為0.25,如圖2所示。汽車稱重信號(hào)為含有多種成分噪聲的直流信號(hào)如圖3所示,這1000個(gè)數(shù)據(jù)經(jīng)過(guò)FPGA的FIR濾波和8點(diǎn)數(shù)據(jù)平均后,提供給單片機(jī)125個(gè)數(shù)據(jù),其波形如圖4所示。
濾波之前的噪聲的峰峰值在0.1V左右,而此時(shí)的軸重信號(hào)為1,這將嚴(yán)重影響測(cè)量精度。濾波后我們看到情況得到了明顯的改善,噪聲信號(hào)的峰峰值被抑制在0.02V的范圍內(nèi),大大改善了信噪比,從而提高了測(cè)量精度。
結(jié)語(yǔ)
本設(shè)計(jì)不但實(shí)現(xiàn)了硬件數(shù)字濾波電路,而且減少了許多門電路和組合邏輯電路。用比較少的器件實(shí)現(xiàn)了比較復(fù)雜的功能,減少了故障率。用此方法設(shè)計(jì)的汽車動(dòng)態(tài)稱重儀表具有良好的實(shí)時(shí)性和較高的精度,現(xiàn)已投入批量生產(chǎn)。
參考文獻(xiàn)
1 徐愛(ài)鈞.單片機(jī)高級(jí)語(yǔ)言C51應(yīng)用程序設(shè)計(jì),電子工業(yè)出版社,1998.6
2 楊德華.汽車檢測(cè)與診斷技術(shù),江蘇科學(xué)技術(shù)出版社,1994.10
3 曾繁泰等.VHDL程序設(shè)計(jì),清華大學(xué)出版社,2001.1
評(píng)論