详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角 联系客服

发布时间 : 星期二 文章详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角更新完毕开始阅读63868467f8c75fbfc67db221

详解MPU6050,用STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角

1.MPU6050是什么?

MPU6050是一个6轴运动处理组件,包含了3轴加速度 和3轴陀螺仪。

MPU-6000为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital Motion Processor)硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术

InvenSense的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。 MPU-6000的角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g±8g与±16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。 MPU-6000可在不同电压下工作,VDD供电电压介为2.5V±5%、3.0V±5%或3.3V±5%,逻辑接口VVDIO供电为1.8V± 5%。MPU-6000的包装尺寸4x4x0.9mm(QFN),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。

2.加速度传感器是干嘛用的?

总而言这,加速度传感器,其实是力传感器。用来检查上下左右前后哪几个面都受了多少力(包括重力),然后计算角度。

3.陀螺仪是干嘛用的?

简而言之,陀螺仪就是角速度检测仪。比如,一块板,以X轴为轴心,在一秒钟的时间转到了90度,那么它在X轴上的角速度就是 90度/秒 (DPS, 角速度单位,Degree Per Second的缩写°/S ,体现了转动的快慢)

4.MPU6050分辨率是多少?

3轴加速度 和3轴陀螺仪分别用了3个16位的ADC, 也就是说,加速度有3个16位ADC,其中每个轴使用了一个。也是说,每个轴输出的数据,是2^16 也就是 -32768 ---- +32768。陀螺仪也是一样。

5. 单位换算

上面说的-32768 --- +32768 ,那么这个数字到底代表了什么呢?比如陀螺仪 32768 到底是指角速度达到多少度/秒 ?

这个其实是根据MPU6050设置的量程来决定的,量程不一样,32768代表的值就不一样。

MPU6050的量程设置,在 MPU6050::initialize() (MPU6050.cpp库)初始化函数中进行了设置:

setFullScaleGyroRange(MPU6050_GYRO_FS_250); setFullScaleAccelRange(MPU6050_ACCEL_FS_2); 分别设置为,250度/秒 , 2g

按陀螺仪来说,MPU6050 有四个量程可选: ±250,±500,±1000,±2000 度/s 比方说,设置了是 ±250 , 那么-32768 ---- +32768 就代表了 -250 ---- +250 。此时它的LSB(拉傻B,最低有效位) 是 131 LSB/(度/s)

STM32自带I2C,但一般有两个I2C1(PB6,PB7)和I2C2(PB10,PB11),而且,I2C分为硬件、和模拟。

软件i2c是程序员使用程序控制SCL,SDA线输出高低电平,模拟i2c协议的时序. 硬件i2c程序员只要调用i2c的控制函数即可,不用直接的去控制SCL,SDA高低电平的输出

本模块采用的是IIC通信方式,所以我们只需要连接四跟线就可以完成电路的连接,简单方便!

原始数据有:AX、AY、AZ GX、GY、GZ 简单的算法之后可以得到 Roll,pitch,yaw

参考MPU-6050数据手册 引脚说明:

VDD 供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VDDIO 为1.8V± 5% 内建振荡器在工作温度范围内仅有±1%频率变化。可选外部时钟输入32.768kHz 或19.2MHz 找出几个重要的寄存器:

1)Register 25 – Sample Rate Divider (SMPRT_DIV)

1)SMPLRT_DIV 8位无符号值,通过该值将陀螺仪输出分频,得到采样频率

该寄存器指定陀螺仪输出率的分频,用来产生MPU-60X0的采样率。

传感器寄存器的输出、FIFO输出、DMP采样和运动检测的都是基于该采样率。 采样率的计算公式

采样率 = 陀螺仪的输出率 / (1 + SMPLRT_DIV)

当数字低通滤波器没有使能的时候,陀螺仪的输出平路等于8KHZ,反之等于1KHZ。 2)Register 26 – Configuration (CONFIG)

1)EXT_SYNC_SET 3位无符号值,配置帧同步引脚的采样 2)DLPF_CFG 3位无符号值,配置数字低通滤波器

该寄存器为陀螺仪和加速度计配置外部帧同步(FSYNC)引脚采样和数字低通滤波器(DLPF)。

通过配置EXT_SYNC_SET,可以对连接到FSYNC引脚的一个外部信号进行采样。 FSYNC引脚上的信号变化会被锁存,这样就能捕获到很短的频闪信号。 采样结束后,锁存器将复位到当前的FSYNC信号状态。

根据下面的表格定义的值,采集到的数据会替换掉数据寄存器中上次接收到的有效数据

数字低通滤波器是由DLPF_CFG来配置,根据下表中DLPF_CFG的值对加速度传感器和陀

螺仪滤波

3)Register 27 – Gyroscope Configuration (GYRO_CONFIG)

1)XG_ST 设置此位,X轴陀螺仪进行自我测试。 2)YG_ST 设置此位,Y轴陀螺仪进行自我测试。 3)ZG_ST 设置此位,Z轴陀螺仪进行自我测试。 4)FS_SEL 2位无符号值。选择陀螺仪的量程。

这个寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范围。 陀螺仪自检允许用户测试陀螺仪的机械和电气部分,通过设置该寄存器的 XG_ST、YG_ST和 ZG_ST bits可以激活陀螺仪对应轴的自检。每个轴的检测可以独立进行或同时进行。 自检的响应 = 打开自检功能时的传感器输出 - 未启用自检功能时传感器的输出 在MPU-6000/MPU-6050数据手册的电气特性表中已经给出了每个轴的限制范围。当自检的响应值在规定的范围内,就能够通过自检;反之,就不能通过自检。 根据下表,FS_SEL选择陀螺仪输出的量程:

4)Register 28 – Accelerometer Configuration (ACCEL_CONFIG)