此文主要描述并使用MMA7260QT三軸加速計和低功耗的9S08QG8八位單片機實現求解位置的算法?。
在今天先進的電子市場,有不少增加了許多特性和智能的多功能的產品。定位和游戲只是得益于獲取到的位置信息的一部分市場。一個獲取這種信息的可選方案是通過使用慣性傳感器。從這些傳感器中取得的信號需要進行一些處理,因為在加速度和位置之間沒有一種直接轉換。
為了獲得位置,需要對加速度進行二次積分。本文介紹一種簡單的算法實現加速度的二重積分。為了獲取加速度的二重積分,一個簡單的積分要進行兩次,因為這樣也可以順便獲取速度。
接下來要展示的算法,能夠應該于任何傳感軸,所以一維、二維、三維的位置都可以被計算出。當在獲取三維位置信息時,要特別地除去重力加速度的影響。下面的算法實現還包括了一個二維系統的例子(比如鼠標)。
?
應用潛力
這種算法的應用潛力在于個人導航、汽車導航和(back-up)GPS、防盜設備、地圖追蹤、3D游戲、計算機鼠標等等。這類產品都需要用到求解位置信息的算法。
本文所介紹的算法在位移精度要求不是很嚴格的情況下很有用。其他的情況和影響特別是應用,當采用本文算法時,需要考慮一下。對最終程序進行微小的修改和調整,這種算法能夠達到更高的精度。
?
理論知識和算法
理解本文算法的最好方法是回顧一下數學上的積分知識。
加速度是一個對象速度的變化速率。同時,速度是同樣一個對象位置的變化速率。換句話說,速度是位置的導數,加速度是速度的導數,因此如下公式:
![1512728538929073693.png 301921127012208.png]()
積分和導數相反。如果一個物體的加速度已知,那么我們能夠利用二重積分獲得物體的位置。假設初始條件為0,那么有如下公式:
![1512728562271010618.png 301921134207821.png]()
一個理解這個公式的方法是將積分定義成曲線下面包圍的區域,積分運算結果是極小區域的總和,區域的寬度趨近于0。換句話說,積分的和表示了一個物理變量的大小(速度)。
![1512728579594067281.png 301921142642463.png]()
利用前面的一個概念——曲線下面的區域,我們能得出一個結論:對一個信號采樣,得到該信號大小的瞬時值,所以能夠在兩次采樣之間得到一個小的區域。為了獲得連貫的值采樣時間必須相同。采樣時間代表這塊區域的寬,同時采樣得到的值代表區域的高。為了消除帶有分數的乘法(微秒或毫秒),我們假定時間為一個單位。
現在,我們知道了每個代表區域寬度的采樣時間等于1。下一個結論是:
積分的值可以約等于區域面積之和。
如果采樣時間趨近于0,那么結論將是正確的。但在實際中,將會產生如下錯誤,在處理的過程中,這個誤差將會一直累積。
![1512728597108028656.png 301921150457292.png]()
這些錯誤稱為采樣損失。為了減少這些錯誤,我們再做進一步的假設。結果區域能夠看成由兩塊小的區域的組合:
![1512728614748002499.png 301921158267419.png]()
區域1是前一次采樣的值(方形),區域2是一個三角形,是前一次采樣和當前采樣之差的一半。
通過這種方法,我們現在有一個一階近似(插值)的信號。
![1512728632603028030.png 301921166399303.png]()
現在的錯誤比以前的近似的低得多。
盡管加速度有正有負,但采樣的值總是正的(基于MMA7260QT的輸出特性),因此需要做一個偏移判斷,換句話說,需要一個參考。這個程序即為校準程序。
校準程序用于在沒有移動情況下的加速度值上。這時,獲得的加速度值可以看成是零參考點。低于零參考點的值代表負值(減速),高于零參考點的值代表正值(加速)。
加速度計的輸出范圍為0v到Vdd,并且它通常由AD轉換器得到。0值接近Vdd/2。前面獲得的校準值會被芯片的方向和分解在各軸的靜態加速度(重力加速度)所影響。如果裝置剛好平行于地球表面,那么校準值將會很接近Vdd/2。
接下來的這張圖用于展示校準程序的結果。
![1512728652868097667.png 301921173422689.png]()
從采樣的信號減去零參考值,我們獲得真正的采樣加速度。
![1512728666502095614.png 301921180459775.png]()
A1代表正加速度,A2代表負加速度。
如果我們將這數據看作是采樣數據,那么信號值將和下圖非常接近。
![1512728681347038888.png 301921187641688.png]()
![1512728691092062734.png 301921193421345.png]()
通過使用上面的積分公式,Formula 1,我們將獲得速度的比例近似值。同樣,為了獲取位置,需要再進行一次積分。在獲得的速度數值上應用相同的公式和步驟,我們現在獲得了一個瞬時位置的比例近似值。(見圖6)
![1512728703437088909.png 301921206852601.png]()
軟件設計相關注意事項
當在現實世界的實現中應用這種算法,應該考慮一下下面的步驟和建議:
1.信號存在一定的噪聲,所以信號必須經過數字濾波。本算法中的濾波是一種移動平均算法,要處理的值是一定數量采樣值的平均結果。
2.即使以前過濾的一些數據可能由于機械噪聲導致錯誤,所以必須實現另一個濾波器。根據過濾的樣品數,一個真實加速度的窗口能夠被選擇(一般為16±2采樣次數)。
3.無運動狀態對獲得正確的數據是至關重要的。校準例程需要在應用程序的開頭。該校準值必須盡可能準確。
4.加速度的真實值等于采樣值減去校準值;它可以是正數或負數。當你在定義變量的時候,這絕對不能被忽略,需要定義為有符號數。
5.更快的采樣頻率意味著更精確的結果,因為采樣頻率越快誤差越少。但是需要更多的內存、時間和硬件方面的考慮。
6.兩次采樣之間的時間必須要相同。如果這個時間不相同,將會產生錯誤。
7.兩次采樣結果之間的線性近似值(插值)被推薦用于更精確的結果。