1. 程式人生 > >加速度感測器的原理和應用-手機翻轉、失重檢測、運動檢測、位置識別

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

本文介紹可穿戴裝置加速度感測器-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時直接找暫存器填數值就可以完成功能啦。

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

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