LSM6DSL惯性模块开发记录

一、术语介绍

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的源码获取也很方便:

Linux平台:https://github.com/STMicroelectronics/STMems_Linux_Input_drivers/tree/linux-3.10.y-gh/drivers/input/misc/st/imu/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]);
}

四、参考资料

(1)姿态角解算(MPU6050 加速度计加陀螺仪)

(2)LSM6DS3(六轴传感器)STM32驱动及6D功能实现

(3)pitch、yaw、roll三个角

原文地址:https://www.cnblogs.com/rockyching2009/p/15071669.html