,
(中北大學(xué) 電氣與控制工程學(xué)院,太原 030051)
隨著生活節(jié)奏的加快,人們對電子產(chǎn)品的要求越來越高。使得很多開發(fā)商不得不采用高速處理器來滿足人們對于速度的追求。電子稱作為日常生活中經(jīng)常使用的電子產(chǎn)品之一,其顯示重量的精度與穩(wěn)定速度都有待提高。文獻(xiàn)[1-3]中采用平均濾波、中值濾波或者去極值滑動平均濾波的方式處理重量數(shù)據(jù),但是此類濾波方式不僅會降低系統(tǒng)的動態(tài)響應(yīng)速度[4],而且精確度也有待提高;文獻(xiàn)[5]僅采用硬件低通濾波,相對于硬件濾波,軟件濾波可靠性高,穩(wěn)定性好,且不存在阻抗匹配等問題[6]。為此,本設(shè)計提出一種Kalman濾波與一階低通數(shù)字濾波相結(jié)合的數(shù)據(jù)濾波方式,不僅提高了系統(tǒng)的動態(tài)響應(yīng)速度,而且使濾波后的數(shù)據(jù)更加精確。
為了拓展電子稱的功能,為用戶帶來更加貼心、人性化的使用體驗,借助STM32高性能、低功耗等優(yōu)勢,本設(shè)計集成了日常稱重過程中所需要的大部分功能,優(yōu)化了用戶的使用體驗。同時電子稱與互聯(lián)網(wǎng)的結(jié)合,使得用戶可以將消費金額上傳到云端,最終可以繪制一條長期的銷售額曲線,這對于用戶來說非常具有現(xiàn)實意義。
該系統(tǒng)以32位微控制器STM32作為主控芯片,外圍模塊主要包括等強(qiáng)度懸臂梁,應(yīng)變片組成的惠斯通電橋,A/D轉(zhuǎn)換模塊,HMI觸摸屏顯示模塊,OLED顯示模塊,時鐘模塊,WiFi通信模塊。系統(tǒng)的整體結(jié)構(gòu)圖如圖1所示。
圖1 系統(tǒng)整體結(jié)構(gòu)圖
當(dāng)被稱物體放在稱盤上時,懸臂梁因受力而產(chǎn)生微小的形變,使得稱重傳感器輸出一對差模電壓信號。A/D轉(zhuǎn)換器首先將該信號進(jìn)行放大,然后轉(zhuǎn)化為數(shù)字量供主控芯片使用。主控芯片接著將A/D數(shù)值轉(zhuǎn)換為重量,并對該重量數(shù)據(jù)進(jìn)行濾波處理,最后顯示在觸摸屏上;系統(tǒng)利用觸摸屏與用戶進(jìn)行交互,數(shù)據(jù)顯示與功能按鈕都一起顯示在觸摸屏上,方便用戶操作;OLED負(fù)責(zé)實時時鐘的顯示;ESP8266會在用戶需要上傳數(shù)據(jù)時自動連接附近可用熱點并完成數(shù)據(jù)上傳的任務(wù);電子秤在空閑時能夠自動進(jìn)入睡眠模式,暫停各個功能模塊,大大降低了系統(tǒng)的功耗。
該電子秤的硬件部分主要由稱重傳感器模塊、A/D轉(zhuǎn)換模塊、STM32主控模塊、顯示模塊、WIFI通信模塊以及時鐘模塊組成。為了達(dá)到國家標(biāo)準(zhǔn)《非自動稱通用檢定規(guī)程JJF 1336-2012》中三級稱的標(biāo)準(zhǔn)[7],本設(shè)計采用靈敏度為1 mV/V,最大量程為1 kg的稱重傳感器作為該電子秤的稱重傳感器,并設(shè)計電子秤的分度值為0.1 g,最大量程為500 g。
為了確保四個應(yīng)變片能夠承受到同等強(qiáng)度的應(yīng)力,設(shè)計采用特制的等強(qiáng)度懸臂梁[8],材料選用彈性較大的45號鋼材。其形狀如圖2所示。
圖2 等強(qiáng)度梁
在懸臂梁的等強(qiáng)度區(qū)域處黏貼有高精度電阻應(yīng)變片,上下兩面各等距離分布兩個。然后將電阻應(yīng)變片接成電橋的形式,這樣既可以提高測量精度,也可以防止因溫度影響電阻應(yīng)變片阻值造成的測量誤差[9]。電橋原理圖如圖3所示。
圖3 電橋原理圖
當(dāng)懸臂梁受到向下的壓力時,上面的應(yīng)變片將受到拉應(yīng)力,電阻變大;下面的應(yīng)變片將受到壓應(yīng)力,電阻減小[10]。假設(shè)R1=R2=R3=R4,變化均為ΔR,由電橋分壓原理可知:
(1)
(2)
通過上面的推導(dǎo)可以看出,橋臂輸出電壓與應(yīng)變片的電阻變化量成正比。圖4為0~500 g之間重量與輸出A/D值之間的擬合曲線。
圖4 重量、ADC擬合曲線
靈敏度與最大量程是電子秤最重要的兩個參數(shù)[3],由于該電子秤設(shè)計的分度值為0.1 g,最大量程為500 g,所以分度數(shù)為5 000,考慮到實際中噪聲的影響,一般增加裕量后設(shè)置為最小分辨率的10倍,故A/D轉(zhuǎn)換電路的分辨率設(shè)計為1/50 000。此時A/D轉(zhuǎn)換器至少為16位(16位A/D轉(zhuǎn)換器的分辨率為1/65 536)[1]。本設(shè)計采用的芯??萍?4位A/D轉(zhuǎn)換芯片CS1237是一款高精度、低功耗的Sigma-Delta模數(shù)轉(zhuǎn)換芯片,內(nèi)置一路ADC,一路差分輸入通道和一路溫度傳感器,完全能滿足上述計算的位數(shù)要求。圖5為A/D轉(zhuǎn)換電路原理圖。其中,CS1237采用差分輸入方式,參考電壓Vref=5.0 V。該芯片內(nèi)部通過低噪聲儀用放大器實現(xiàn)PGA放大,并且可以通過SPI通信接口配置特殊寄存器的方式來選擇放大倍數(shù),放大倍數(shù)可以設(shè)置為1、2、64、128。
設(shè)S為稱重傳感器的靈敏度,F(xiàn)max為其最大量程,us為稱重傳感器的電源電壓,Mmin為稱重傳感器能夠分辨的最小載荷量。所以在最小載荷下重傳感器的輸出umin為:
(3)
其中:S=1 mV/V,F(xiàn)max=1 kg,us=5 V Mmin=0.1 g,所以umin=0.5 μV。
采用24位A/D轉(zhuǎn)換器,能夠分辨的最小輸入電壓uin.min為:
(4)
因參考電壓Vref=5.0 V,所以uin.min≈0.29 μV。
當(dāng)稱重傳感器承受滿載負(fù)荷時,傳感器輸出電壓umax為:
(5)
因為A/D轉(zhuǎn)換器的最大輸入電壓uin.max=Vref=5 V,所以信號能夠進(jìn)行的最大放大倍數(shù)Amax為:
(6)
綜上所述,為了達(dá)到高精度的設(shè)計要求,選擇芯片的最大放大倍數(shù)128倍對信號進(jìn)行放大。
圖5 CS1237原理圖
主控芯片選用以ARM Cortex-M3為內(nèi)核的STM32系列微控制器STM32C8T6。相對于傳統(tǒng)電子秤使用的8位單片機(jī),該芯片CPU時鐘頻率高達(dá)72 M,更加適合處理復(fù)雜的計算情況。更重要的是,STM32C8T6具有3種低功耗模式——睡眠、停機(jī)和待機(jī)。其中在待機(jī)模式下,內(nèi)部電流僅有2 μA。并且可以任意配置低功耗模式下的喚醒方式——中斷喚醒或事件喚醒。本設(shè)計中,電子稱在一定時間內(nèi)自動進(jìn)入睡眠模式,其中就包含包含主控芯片的停機(jī)模式,大大降低了電量的消耗,達(dá)到了節(jié)能的目的。
因為A/D芯片在進(jìn)行數(shù)據(jù)轉(zhuǎn)換的時候,容易受到各種因素的干擾,包括電源的紋波以及參考電壓的浮動等,導(dǎo)致其輸出的數(shù)據(jù)無法很快穩(wěn)定在一個確定的數(shù)值。而傳統(tǒng)電子秤的數(shù)據(jù)處理多采用中值濾波或者去極值滑動平均濾波,但是類濾波算法主要應(yīng)用于高頻震蕩系統(tǒng),雖然濾波后曲線相對光滑,但是會給系統(tǒng)帶來很大的延遲,導(dǎo)致其動態(tài)響應(yīng)變慢。而且此類算法在計算時需要占用比較大的系統(tǒng)RAM資源。針對目前存在的濾波精度較低、數(shù)據(jù)更新不及時和計算復(fù)雜度較高等問題,本文設(shè)計了一種將Kalman濾波與一階低通數(shù)字濾波相結(jié)合的濾波算法。
隨著傳感器技術(shù)的發(fā)展,各種濾波技術(shù)也得到了大量的應(yīng)用和擴(kuò)展。而Kalman濾波又是目前應(yīng)用比較廣泛的一種濾波技術(shù)。下面以線性系統(tǒng)為例,介紹Kalman濾波器的基本理論。
假設(shè)線性離散系統(tǒng)方程為:
x(n)=Ax(n-1)+Bu(n)+w(n)
z(n)=H(n)x(n)+v(n)
(7)
式中,x(n)為系統(tǒng)的狀態(tài)向量,u(n)為輸入向量,w(n)為估計噪聲向量,A,B為系統(tǒng)矩陣,z(n)為量測向量,H(n)為量測轉(zhuǎn)移矩陣,v(n)為觀測噪聲向量。其中估計噪聲和觀測噪聲均為符合高斯分布的白噪聲,設(shè)其協(xié)方差矩陣為Q和R。
基于此系統(tǒng)方程,可以推導(dǎo)出線性離散系統(tǒng)方程的最優(yōu)解。根據(jù)系統(tǒng)的預(yù)測性,要想估計系統(tǒng)n時刻的值,只需要知道系統(tǒng)n-1時刻態(tài)即可:
x(n|n-1)=Ax(n-1|n-1)+Bu(n)
(8)
則系統(tǒng)在n時刻的協(xié)方差估計為:
P(n|n-1)=AP(n-1|n-1)AT+Q
(9)
因為由(9)式得到了n時刻的狀態(tài)預(yù)測結(jié)果x(n|n-1),而n時刻的系統(tǒng)的測量值為w(n),結(jié)合測量值和預(yù)測值,可以計算出系統(tǒng)在n時刻的最優(yōu)估計值x(n|n)。
x(n|n)=Ax(n|n-1)+
K(n)[z(n)-H(n)x(n|n-1)]
(10)
其中:K(n)表示Kalman增益系數(shù):
(11)
在計算出n時刻的最優(yōu)解x(n|n)的基礎(chǔ)上,為了實現(xiàn)下一次的迭代運算,還需要更新一下系統(tǒng)的在n時刻最優(yōu)解對應(yīng)的協(xié)方差:
P(n|n)=[I-K(n)H(n)]P(n|n-1)
(12)
式中,I為單位矩陣。式(9)~(13)就是線性離散系統(tǒng)的Kalman濾波的基本方程。
由上述分析可以看出,Kalman濾波的工作過程就是不斷的預(yù)測、矯正。它不需要知道全部過去的數(shù)據(jù),而是用前一個估計值和當(dāng)前的實際測量值來估計信號的當(dāng)前值,使用起來相對簡單,且易于工程實現(xiàn)[11-12]。
在利用C語言實現(xiàn)Kalman濾波器之前,考慮到該系統(tǒng)為一階線性系統(tǒng),故將上述公式中的矩陣向量全部用標(biāo)量替代,觀測值取當(dāng)前時刻傳感器的返回值,系統(tǒng)矩陣A,B取單位矩陣,過程噪聲的協(xié)方差矩陣Q取0.01倍的單位矩陣,觀測噪聲協(xié)方差矩陣R取單位矩陣。
因為電子秤最小量程為0.1 g,需要顯示的重量數(shù)據(jù)保留兩位小數(shù),考慮到繪圖精度的問題,下圖中縱坐標(biāo)是對原始的重量數(shù)據(jù)擴(kuò)大100倍之后再進(jìn)行繪制的。圖6(a)、(b)分別為電子稱在進(jìn)行稱重10 g和20 g重量時的濾波效果圖。從圖中曲線可以看出,濾波后的重量數(shù)據(jù)基本保持在0.05 g的誤差范圍之內(nèi)。
圖6 3種濾波算法效果圖
考慮到在數(shù)據(jù)上升階段,一階低通數(shù)字濾波器的動態(tài)響應(yīng)效果更好,因此設(shè)計采用一階低通數(shù)字濾波配合Kalman濾波來實現(xiàn)更好的濾波效果。具體實現(xiàn)思路是當(dāng)當(dāng)前采集的數(shù)據(jù)與上一次濾波后的數(shù)據(jù)之差大于某一范圍時,采用一階低通數(shù)字濾波,這樣有利于提高系統(tǒng)的動態(tài)響應(yīng)速度;而當(dāng)兩次數(shù)據(jù)之差小于這個范圍時,采用Kalman濾波,這樣有利于提高濾波后數(shù)據(jù)的準(zhǔn)確度。相對于傳統(tǒng)的濾波算法,該濾波方式具有響應(yīng)速度快、數(shù)字穩(wěn)定度高、占用RAM資源小等優(yōu)勢。圖7為Kalman濾波搭配一階低通數(shù)字濾波與上述兩種濾波算法的動態(tài)響應(yīng)曲線,圖中可以看出Kalman濾波與一階低通數(shù)字濾波的動態(tài)響應(yīng)性最好。
圖7 3種濾波算法的動態(tài)響應(yīng)曲線
考慮到衡量算法的主要指標(biāo)為算法的時間復(fù)雜度和空間復(fù)雜度[13],為了更深入的分析濾波算法對高精度電子秤的影響效果,下面根據(jù)這兩個指標(biāo)來對比分析上述兩種濾波算法。
假設(shè)x(n)為系統(tǒng)在n時刻的采樣值,L為去極值滑動平均濾波器需要的數(shù)據(jù)個數(shù),則n時刻濾波器的輸出x(n)為:
(13)
由上式可知,去極值滑動平均濾波器每接收一個新的采樣值,就把該值放在數(shù)據(jù)內(nèi)存單元的最后一個數(shù)據(jù)位置,再將所有數(shù)據(jù)向前移動一個內(nèi)存單元,以此覆蓋掉第一個內(nèi)存單元中的數(shù)據(jù);然后對這L個數(shù)據(jù)進(jìn)行排序,一般采用冒泡排序法;最后在去掉極大值和極小值之后,對中間的L-2個數(shù)據(jù)計算平均值并作為濾波后的返回值[14]。以后每調(diào)用一次這個濾波函數(shù),系統(tǒng)就會按照上述流程執(zhí)行一次。
故去極值滑動平均濾波在冒泡排序最壞的情況下,該算法的時間復(fù)雜度為:
O(L2)+O(log2(L-2))=O(L2)
(14)
空間復(fù)雜度為O(1)。
而本設(shè)計采用的線性離散系統(tǒng)的Kalman濾波與一階低通數(shù)字濾波算法的時間復(fù)雜度和空間復(fù)雜度均為O(1)。所以本設(shè)計的Kalman濾波與一階低通數(shù)字濾波具有明顯優(yōu)勢。
系統(tǒng)的軟件部分采用C語言編程實現(xiàn),通過在keil上對STM32進(jìn)行裸機(jī)編程,從而實現(xiàn)相應(yīng)的功能。本系統(tǒng)包含的程序功能函數(shù)分為濾波函數(shù),A/D采集函數(shù),重量顯示函數(shù),功能選擇與切換函數(shù),低功耗判斷函數(shù)等。圖8為系統(tǒng)整體流程圖。
圖8 系統(tǒng)整體流程圖
最后,根據(jù)國家最新的電子稱檢定標(biāo)準(zhǔn)《非自動稱通用檢定規(guī)程JJF 1336-2012》的相關(guān)要求,需要利用M1級檢定砝碼對本文設(shè)計的電子稱進(jìn)行偏載誤差、線性度誤差、重復(fù)性誤差、鑒別力、零點誤差等進(jìn)行檢定。表1為測試結(jié)果。
表1 模擬燃料組件測量實驗
測試結(jié)果表明,隨著稱重重量的增加,由于等強(qiáng)度梁線性度的微小偏差,使得測量誤差呈現(xiàn)增加趨勢,但是總體誤差始終保持在允許范圍內(nèi),測量精度達(dá)到0.1 g,最大量程達(dá)到500 g。因此,根據(jù)測試結(jié)果,采用Kalman濾波器的高精度電子秤各項指標(biāo)均達(dá)到國家規(guī)定的三級稱指標(biāo)。
本文設(shè)計并實現(xiàn)了基于Kalman濾波器的高精度電子秤稱重系統(tǒng),詳細(xì)介紹了各個模塊的基本原理及實現(xiàn)方案。該電子稱的最大量程為500 g,分度值為0.1 g。此類高精度電子稱設(shè)計的關(guān)鍵在于稱重傳感器的設(shè)計,難點在于其稱重數(shù)據(jù)的處理。由于外部因素的影響,導(dǎo)致電子稱顯示的數(shù)據(jù)會出現(xiàn)抖動和漂移。而本設(shè)計采用的一階低通數(shù)字濾波配合Kalman濾波很好的解決了這個問題,既提高了電子稱的精度,又加快了電子稱重量顯示的速度。在工廠流水線生產(chǎn)模式中,如果需要稱量產(chǎn)品的重量,本設(shè)計將節(jié)省大量時間。