一、加速度傳感器工作原理
? ? ? ?加速度傳感器自然是對自身器件的加速度進行檢測。其自身的物理實現方式咱們就不去展開了,可以想象芯片內部有一個真空區(qū)域,感應器件即處于該區(qū)域,其通過慣性力作用引起電壓變化,并通過內部的ADC給出量化數值。
? ? ? ?Lis3dh是三軸加速度傳感器,因此其能檢測X、Y、Z的加速度數據,如下圖:
?
?
?
? ? ? ?在靜止的狀態(tài)下,傳感器一定會在一個方向重力的作用,因此有一個軸的數據是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。
? ? ? ?當以上圖所示的靜止狀態(tài),z軸正方向會檢測出1g,X、Y軸為0.如果調轉位置(如手機屏幕翻轉),那總會有一個軸會檢測出1g,其他軸為0,在實際的測值中,可能并不是0,而是有細微數值。
? ? ? ?在運動過程中,x,y,z軸都會發(fā)生變化。計步運動也有其固有的數值規(guī)律,因為邁步過程也有抬腳和放腳的規(guī)律過程,如下圖。“腳蹬離地是一步的開始,此時由于地面的反作用力,垂直方向加速度開始增大,當腳達到最高位置時,垂直方向加速度達到最大;然后腳向下運動,垂直加速度開始減小,直到腳著地,垂直加速度減到最小值。接著下一步邁步。前向加速度由腳與地面的摩擦力產生,雙腳觸地時增大,一腳離地時減小。”[此處引用韓文正等人發(fā)表的《基于加速度傳感器LIS3DH的計步器設計》]。
?

?
? ? ? ?二、理解加速度傳感器的一個坐標系誤區(qū)
? ? ? ?意法半導體針對LIS3DH發(fā)布兩個文檔,官方規(guī)格書和應用設計指導。單獨提出這點是因為本人之前在使用LIS3DH時可能是太久沒有運用過立體幾何思維,導致在X,Y,Z坐標系上混淆概念,對位置識別遲遲沒能理解,現在指出這個誤區(qū)。
? ? ? ?下圖的X,Y,Z除了代表我們所認識的三維坐標系外,還有一個重要的認知,那就是X,Y,Z軸對應的寄存器分別按照芯片圖示(以芯片的圓點來確定)的方向來測加速度值,而不管芯片的位置如何,即X,Y,Z軸對應的三個寄存器總是以這樣工作的:Z軸寄存器測芯片垂直方向的數據、Y軸測芯片左右方的數據、X軸測芯片前后的數據(前后左右的定義可能不夠形象,大家能理解就好)。例如,圖示靜止狀態(tài)下,X軸寄存器測芯片前后方向的加速度;如果芯片如右邊圖示靜止時,X軸寄存器測的是坐標系的Z軸方向加速度。
?
?
? ? ? ?三、LIS3DH內置硬件算法工作原理
? ? ? ?由于計步等場景是需要先讀取底層X,Y,Z軸數據再進行處理的,所以我們這里不去探討這個算法。這里主要闡述如何利用LIS3DH內置的硬件算法來檢測常用的場景。
? ? ? ?LIS3DH的內置硬件算法主要由2個參數和1個模式選擇來確定。2個參數分別是閾值和持續(xù)時間。例如,在靜止的時候我們要去檢測芯片的運動(wakeup)時,我們可以設定一個運動對應的閾值,并且要求芯片檢測數據在超過這個閾值時要持續(xù)一定的時間才可以認為芯片是運動的。內置算法基本都是基于閾值和持續(xù)時間來進行檢測的。
? ? ? ?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檢測芯片穩(wěn)定為一種確定的方向(如穩(wěn)定為平放朝上、平放朝下、豎立前后左右)等等。
? ? ? ?其閾值比較電路如下,該閾值比較使用正負數真實數據比較。正方向超過閾值,則XH(YH、ZH)為1,否則為0;負方向超過閾值,XL(YL、ZL)為1,否則為0。XH(YH、ZH)、XL(YL、ZL)代表了六個方向。由于靜止穩(wěn)定狀態(tài)時,只有一個方向有重力加速度,因此可以據此知道當時芯片的位置姿勢。
?
?
? ? ? ?四、加速度傳感器應用
? ? ? ?如果能夠理解第三部分的工作原理,那么也能夠很好理解以下的應用。
? ? ? ?1.靜止時進行運動檢測
? ? ? ?使用OR電路工作方式,設置一個較小的運動閾值,只檢測X,Y軸數據是否超過該閾值(Z軸這時有1g,咱不管這個軸了)即可。只要X,Y任一軸數據超過閾值一定時間即認為設備處于wakeup狀態(tài)了。
? ? ? ?2.失重檢測
? ? ? ?失重時Z軸的加速度和重力加速度抵消,在短時間內會為0,而且X,Y軸沒有變化,因此在短時間內三者都為0。這里使用AND電路工作方式,設置一個較小的運動閾值,當三個方向的數據都小于閾值一定時間時即認為是失重。
? ? ? ?3.位置姿勢識別
? ? ? ?例如手機翻轉等應用場景就是利用這個特性。這里在第三部分講解工作原理時已經講得很清楚了。?
有了以上理解,以后在使用LIS3DH時直接找寄存器填數值就可以完成功能啦。