加速度傳感器的原理和應用-手機翻轉、失重檢測、運動檢測、位置識別

本文介紹可穿戴設備加速度傳感器-Lis3dh的特性原理和應用場景。意法半導體研發的Lis3dh廣泛應用在智能手環、智能計步鞋等智能穿戴產品中。

Lis3dh有兩種工作方式,一種是其內置了多種算法來處理常見的應用場景(如靜止檢測、運動檢測、屏幕翻轉、失重、位置識別、單擊和雙擊等等),用戶只需簡單配置算法對應的寄存器即可開始檢測,一旦檢測到目標事件,Lis3dh的外圍引腳INT1會產生中斷。另一種是支持用戶通過SPI/I2C來讀取底層加速度數據,並自行通過軟件算法來做進一步複雜的處理,如計步等等。

本文以Lis3dh爲講解案例,但工作原理和應用場景對其他加速度傳感器同樣適用。更多嵌入式和物聯網原創技術分享敬請關注微信公衆號:嵌入式企鵝圈。

一、加速度傳感器工作原理

加速度傳感器自然是對自身器件的加速度進行檢測。其自身的物理實現方式咱們就不去展開了,可以想象芯片內部有一個真空區域,感應器件即處於該區域,其通過慣性力作用引起電壓變化,並通過內部的ADC給出量化數值。

Lis3dh是三軸加速度傳感器,因此其能檢測X、Y、Z的加速度數據,如下圖:

在靜止的狀態下,傳感器一定會在一個方向重力的作用,因此有一個軸的數據是1g(即9.8米/秒的二次)。在實際的應用中,我們並不使用跟9.8相關的計算方法,而是以1g作爲標準加速度單位,或者使用1/1000g,即mg。既然是ADC轉換,那麼肯定會有量程和精度的概念。在量程方面,Lis3dh支持(+-)2g/4g/8g/16g四種。一般作爲計步應用來說,2g是足夠的,除去重力加速度1g,還能檢測出1g的加速度。至於精度,那就跟其使用的寄存器位數有關了。Lis3dh使用高低兩個8位(共16位)寄存器來存取一個軸的當前讀數。由於有正反兩個方向的加速度,所以16位數是有符號整型,實際數值是15位。以(+-)2g量程來算,精度爲2g/2^15= 2000mg/32768 =0.061mg。

當以上圖所示的靜止狀態,z軸正方向會檢測出1g,X、Y軸爲0.如果調轉位置(如手機屏幕翻轉),那總會有一個軸會檢測出1g,其他軸爲0,在實際的測值中,可能並不是0,而是有細微數值。

在運動過程中,x,y,z軸都會發生變化。計步運動也有其固有的數值規律,因爲邁步過程也有擡腳和放腳的規律過程,如下圖。“腳蹬離地是一步的開始,此時由於地面的反作用力,垂直方向加速度開始增大,當腳達到最高位置時,垂直方向加速度達到最大;然後腳向下運動,垂直加速度開始減小,直到腳着地,垂直加速度減到最小值。接着下一步邁步。前向加速度由腳與地面的摩擦力產生,雙腳觸地時增大,一腳離地時減小。”[此處引用韓文正等人發表的《基於加速度傳感器LIS3DH的計步器設計》]。

二、理解加速度傳感器的一個座標系誤區

意法半導體針對LIS3DH發佈兩個文檔,官方規格書和應用設計指導。單獨提出這點是爲因爲本人之前在使用LIS3DH時可能是太久沒有運用過立體幾何思維,導致在X,Y,Z座標系上混淆概念,對位置識別遲遲沒能理解,現在指出這個誤區。

下圖的X,Y,Z除了代表我們所認識的三維座標系外,還有一個重要的認知,那就是X,Y,Z軸對應的寄存器分別按照芯片圖示(以芯片的圓點來確定)的方向來測加速度值,而不管芯片的位置如何,即X,Y,Z軸對應的三個寄存器總是以這樣工作的:Z軸寄存器測芯片垂直方向的數據、Y軸測芯片左右方的數據、X軸測芯片前後的數據(前後左右的定義可能不夠形象,大家能理解就好)。例如,圖示靜止狀態下,X軸寄存器測芯片前後方向的加速度;如果芯片如右邊圖示靜止時,X軸寄存器測的是座標系的Z軸方向加速度。

三、LIS3DH內置硬件算法工作原理

由於計步等場景是需要先讀取底層X,Y,Z軸數據再進行處理的,所以我們這裏不去探討這個算法。這裏主要闡述如何利用LIS3DH內置的硬件算法來檢測常用的場景。

LIS3DH的內置硬件算法主要由2個參數和1個模式選擇來確定。2個參數分別是閾值和持續時間。例如,在靜止的時候我們要去檢測芯片的運動(wakeup)時,我們可以設定一個運動對應的閾值,並且要求芯片檢測數據在超過這個閾值時要持續一定的時間纔可以認爲芯片是運動的。內置算法基本都是基於閾值和持續時間來進行檢測的。

LIS3DH一共有兩套能夠同時工作的硬件算法電路,一種是專門針對單擊、雙擊這種場景,如鼠標應用,另一種是針對其他所有場景的,如靜止運動檢測、運動方向識別、位置識別等等。這裏我們主要講述後者,其有四種工作模式:

第一種:OR或電路,即X,Y,Z任一軸數據超過閾值即可完成檢測。

第二種:AND與電路,即X,Y,Z所有軸的數據均超過閾值才能完成檢測。當然,其也允許只檢測任意兩個軸或者一個軸,不檢測的軸的閾值檢測可以認爲是永遠爲真。

以上兩種電路的閾值比較圖示如下,閾值比較是絕對值比較,沒有方向之分。不管在正方向還是負方向,只要絕對值超過閾值,那麼XH(YH、ZH)爲1,此時相應的XL(YL、ZL)爲0;否則XL(YL、ZL)爲1,相應的XH(YH、ZH)爲0。XH(YH、ZH)、XL(YL、ZL)可以認爲是檢測條件是否滿足的pending指示位。

第三種和第四種是一個物體六個方向的檢測,movement檢測芯片的運動方向變化,即從一種方向變化到另一種方向;而position檢測芯片穩定爲一種確定的方向(如穩定爲平放朝上、平放朝下、豎立前後左右)等等。

其閾值比較電路如下,該閾值比較使用正負數真實數據比較。正方向超過閾值,則XH(YH、ZH)爲1,否則爲0;負方向超過閾值,XL(YL、ZL)爲1,否則爲0。XH(YH、ZH)、XL(YL、ZL)代表了六個方向。由於靜止穩定狀態時,只有一個方向有重力加速度,因此可以據此知道當時芯片的位置姿勢。

四、加速度傳感器應用

如果能夠理解第三部分的工作原理,那麼也能夠很好理解以下的應用。

1.   靜止時進行運動檢測

使用OR電路工作方式,設置一個較小的運動閾值,只檢測X,Y軸數據是否超過該閾值(Z軸這時有1g,咱不管這個軸了)即可。只要X,Y任一軸數據超過閾值一定時間即認爲設備處於wakeup狀態了。

2.   失重檢測

失重時Z軸的加速度和重力加速度抵消,在短時間內會爲0,而且X,Y軸沒有變化,因此在短時間內三者都爲0。這裏使用AND電路工作方式,設置一個較小的運動閾值,當三個方向的數據都小於閾值一定時間時即認爲是失重。

3.   位置姿勢識別

例如手機翻轉等應用場景就是利用這個特性。這裏在第三部分講解工作原理時已經講得很清楚了。 

有了以上理解,以後在使用LIS3DH時直接找寄存器填數值就可以完成功能啦。


如轉載請務必全文轉載,保留嵌入式企鵝圈的微信公衆號,否則即視爲侵權。

    羣猴報喜,祝願大家在猴年事事如意!嵌入式企鵝圈堅持百分百地原創高質量技術研發文章。更多原創技術分享敬請關注微信公衆號:嵌入式企鵝圈



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章