一、術語介紹
1、IMU
IMU是慣性測量裝置(Inertial Measurement Unit)的縮寫。
IMU裝置通常包含陀螺儀和加速度計。
2、加速度計
加速度計測量的是物體的加速度。
我們知道,重力加速度是一個物體受重力作用的情況下所具有的加速度。當物體處於靜止狀態時,加速度計測量出來的值就等於重力加速度1g, 約等於9.8米每平方秒。
重力加速度g的方向總是豎直向下的,通過獲得重力加速度在其X軸,Y軸上的分量,我們可以計算出物體相對於水平面的傾斜角度。
加速度計來測量傾角:
一個簡單的例子如下: 一個單軸的加速計位於重力水平面上的時候,它在垂直方向上受到的加速度為1g,在水平方向上受到的加速度為0。當我們把它旋轉一個角度的時候,就會在水平軸上產生一個加速度分量。通過它們的關系,就可以計算出該單軸加速計的傾角。
3、陀螺儀
陀螺儀測量的是角速度,即物體轉動的速度.
把速度和時間相乘,即可以得到某一時間段內物體轉過的角度。(但是積分運算得來的角度本身就存在誤差,隨着時間的累加,誤差會加劇,此時就需要加速度計輔助計算出姿態角度)
陀螺儀的角速度測量:
假如他的速度是1度/秒,那么通過速度乘以時間,我們就可以知道他距離起點走了多少度。
4、dps
dps是Degree Per Second的縮寫,是角速度單位。
二、LSM6DSL資料獲取
1、文檔
LSM6DSL的文檔獲取很方便,去ST官網即可:https://www.st.com/en/mems-and-sensors/lsm6dsl.html
主要關注其Datasheet和應用說明文檔:
2、代碼
LSM6DSL的源碼獲取也很方便:
單片機平台:https://github.com/stm32duino/LSM6DSL.git
三、LSM6DSL開發及調試
1、通信接口
LSM6DSL支持I2C或SPI兩種通信接口,以SPI為例:
(1)LSM6DSL做從機。
(2)SPI配置:時鍾線SCK空閑高電平+數據線SDI/SDO第一個下降沿采樣,即CPOL=1,CPHA=0,故SPI模式為MODE2。
(3)數據傳輸:MSB first。
(4)地址傳輸:讀寫標志位+地址為7位,傳輸順序為:RW-AD6-AD5-AD4-AD3-AD2-AD1-AD0。
(5)讀寫標志位:0-寫,1-讀,以地址0x55為例:
寫數據:Addr = 0x55;讀數據:Addr = 0x55 | 0x80
2、數據轉換
LSM6DSL芯片輸出的Accelerometer和Gyroscope各方向的數據是16位有符號數。
以正數為例,最大可到32767,如果是Accelerometer數據,量程為2g的情況下,32768個刻度,一個刻度代表:2g/32768 = 2000mg/32767 = 0.061035mg
例如:
如果讀出數據為16384,則加速度:16384x0.061035mg = 1000mg = 1g
不同量程下,每一個刻度代表數值都在Datasheet有標明,可見:4.1 Mechanical characteristics章節。
3、API使用
以讀取Accelerometer數據為例:
LSM6DSL_ACC_GYRO_XLDA_t aval = LSM6DSL_ACC_GYRO_XLDA_NO_DATA_AVAIL; LSM6DSL_ACC_GYRO_R_XLDA(NULL, &aval); // 1. 讀取芯片狀態寄存器 if (LSM6DSL_ACC_GYRO_XLDA_DATA_AVAIL == aval) { // 2. 判斷加速度數據是否有效 Get_X_Axes(data); // 3. 讀取加速度數據,單位mg printf("Acc: %d, %d, %d\r\n", data[0], data[1], data[2]); }
四、參考資料
(2)LSM6DS3(六軸傳感器)STM32驅動及6D功能實現