详解 MPU6050,用 STM32读取原始数据,并相互融合算出俯仰角、翻滚角、偏航角(2014-01-16 16:53:41)转 载 ▼1.MPU6050是什么?MPU6050是一个 6 轴运动处理组件,包含了 3 轴加速度 和 3 轴陀螺仪MPU-6000为全球首例整合性 6 轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间MPU-6000整合了 3 轴陀螺仪、 3 轴加速器,并含可藉由第二个I2C 端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital MotionProcessor) 硬件加速引擎,由主要 I2C 端口以单一数据流的形式,向应用端输出完整的 9 轴融合演算技术InvenSense 的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的APIMPU-6000的角速度全格感测范围为 ±250、±500、±1000 与±2000°/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、 ±4g±8g 与±16g。
产品传输可透过最高至400kHz 的 I2C 或最高达 20MHz的SPIMPU-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_DIV8 位无符号值,通过该值将陀螺仪输出分频,得到采样频率精品资料______________________________________________________________________________________________________________该寄存器指定陀螺仪输出率的分频,用来产生 MPU-60X0的采样率传感器寄存器的输出、 FIFO 输出、 DMP采样和运动检测的都是基于该采样率采样率的计算公式采样率 = 陀螺仪的输出率 / (1 + SMPLRT_DIV)当数字低通滤波器没有使能的时候,陀螺仪的输出平路等于 8KHZ,反之等于 1KHZ2) 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_SEL2 位无符号值选择陀螺仪的量程这个寄存器是用来触发陀螺仪自检和配置陀螺仪的满量程范围陀螺仪自检允许用户测试陀螺仪的机械和电气部分,通过设置该寄存器的 XG_ST、 YG_ST和 ZG_ST bits 可以激活陀螺仪对应轴的自检。
每个轴的检测可以独立进行或同时进行自检的响应 = 打开自检功能时的传感器输出 - 未启用自检功能时传感器的输出在 MPU-6000/MPU-6050数据手册的电气特性表中已经给出了每个轴的限制范围当自检的响应值在规定的范围内,就能够通过自检;反之,就不能通过自检根据下表, FS_SEL选择陀螺仪输出的量程:4) Register 28 –Accelerometer Configuration ( ACCEL_CONFIG)精品资料______________________________________________________________________________________________________________1) XA_ST 设置为 1 时, X 轴加速度感应器进行自检2) YA_ST 设置为 1 时, Y 轴加速度感应器进行自检3) ZA_ST 设置为 1 时, Z 轴加速度感应器进行自检4) AFS_SEL 2 位无符号值选择加速度计的量程具体细节和上面陀螺仪的相似根据下表, AFS_SEL选择加速度传感器输出的量程。