一、术语介绍
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 ", data[0], data[1], data[2]); }