MPU-60X0 是全球首例 9轴运动处理传感器。它集成了 3轴 MEMS陀螺仪, 3轴 MEMS 加速度计,以及一个可扩展的数字运动处理器 DMP(Digital Motion Processor),可用 I2C 接口连接一个第三方的数字传感器,比如磁力计。扩展之后就可以通过其 I2C或 SPI接口 输出一个 9 轴的信号(SPI接口仅在 MPU-6000可用)。 MPU-60X0也可以通过其 I2C接口 连接非惯性的数字传感器,比如压力传感器。 MPU-60X0 对陀螺仪和加速度计分别用了三个 16位的 ADC,将其测量的模拟量转化 为可输出的数字量。为了精确跟踪快速和慢速的运动,传感器的测量范围都是用户可控的, 陀螺仪可测范围为±250,±500,±1000,±2000°/秒(dps),加速度计可测范围为±2,±4,±8,±16g 对MPU6050的配置主要需要1.上电检测芯片序列号,自检 2.设定加速度陀螺仪的阈值和检测频率3.设定外部链接设备的驱动模式以及地址4.设定中断模式,比如要打开自由落体中断需要的设置,数据准备好中断需要的设置等5.设定电源管理模式,防止进入休眠6.循环读取数据 MPU输出一共三种数据,包括陀螺仪输出加速度传感器输出和温度输出,温度输出需要计算,计算方法是读出16位温度数据temp,然后temp/340.0 + 36.53 另外,中断引脚的模式也是可以配置的,详细的说明在MPU6050驱动的头文件中有,包含每一个寄存器的说明,请查看源码,如下 1. MPU6050.h [cpp] view plain copy
- #ifndef __MPU6050_H_
- #define __MPU6050_H_
-
- #include "common.h"
- #include "ioremap.h"
- #include "stm32f10x.h"
- #include "delay.h"
- #include "uart.h"
-
- #define MPU_ACK_WAIT_TIME 200 //us
-
- #define MPU6050_ADDRESS_AD0_LOW 0xD0 // AD0为低的时候设备的写地址
- #define MPU6050_ADDRESS_AD0_HIGH 0XD1 // AD0为高的时候设备的写地址
- #define MPU_ADDR 0xD0 //IIC写入时的地址字节数据
-
-
- #define MPU_DEBUG 1
-
- //技术文档未公布的寄存器 主要用于官方DMP操作
- #define MPU6050_RA_XG_OFFS_TC 0x00 //[bit7] PWR_MODE, [6:1] XG_OFFS_TC, [bit 0] OTP_BNK_VLD
- #define MPU6050_RA_YG_OFFS_TC 0x01 //[7] PWR_MODE, [6:1] YG_OFFS_TC, [0] OTP_BNK_VLD
- //bit7的定义,当设置为1,辅助I2C总线高电平是VDD。当设置为0,辅助I2C总线高电平是VLOGIC
-
- #define MPU6050_RA_ZG_OFFS_TC 0x02 //[7] PWR_MODE, [6:1] ZG_OFFS_TC, [0] OTP_BNK_VLD
- #define MPU6050_RA_X_FINE_GAIN 0x03 //[7:0] X_FINE_GAIN
- #define MPU6050_RA_Y_FINE_GAIN 0x04 //[7:0] Y_FINE_GAIN
- #define MPU6050_RA_Z_FINE_GAIN 0x05 //[7:0] Z_FINE_GAIN
-
- #define MPU6050_RA_XA_OFFS_H 0x06 //[15:0] XA_OFFS 两个寄存器合在一起
- #define MPU6050_RA_XA_OFFS_L_TC 0x07
-
- #define MPU6050_RA_YA_OFFS_H 0x08 //[15:0] YA_OFFS 两个寄存器合在一起
- #define MPU6050_RA_YA_OFFS_L_TC 0x09
-
- #define MPU6050_RA_ZA_OFFS_H 0x0A //[15:0] ZA_OFFS 两个寄存器合在一起
- #define MPU6050_RA_ZA_OFFS_L_TC 0x0B
-
- #define MPU6050_RA_XG_OFFS_USRH 0x13 //[15:0] XG_OFFS_USR 两个寄存器合在一起
- #define MPU6050_RA_XG_OFFS_USRL 0x14
-
- #define MPU6050_RA_YG_OFFS_USRH 0x15 //[15:0] YG_OFFS_USR 两个寄存器合在一起
- #define MPU6050_RA_YG_OFFS_USRL 0x16
-
- #define MPU6050_RA_ZG_OFFS_USRH 0x17 //[15:0] ZG_OFFS_USR 两个寄存器合在一起
- #define MPU6050_RA_ZG_OFFS_USRL 0x18
-
- /*陀螺仪的采样频率*/
- /*传感器的寄存器输出,FIFO输出,DMP采样、运动检测、
- *零运动检测和自由落体检测都是基于采样率。
- *通过SMPLRT_DIV把陀螺仪输出率分频即可得到采样率
- *采样率=陀螺仪输出率/ (1 + SMPLRT_DIV)
- *禁用DLPF的情况下(DLPF_CFG = 0或7) ,陀螺仪输出率= 8 khz
- *在启用DLPF(见寄存器26)时,陀螺仪输出率= 1 khz
- *加速度传感器输出率是1 khz。这意味着,采样率大于1 khz时,
- *同一个加速度传感器的样品可能会多次输入到FIFO、DMP和传感器寄存器*/
- #define MPU6050_RA_SMPLRT_DIV 0x19 //[0-7] 陀螺仪输出分频采样率
-
- /*配置外部引脚采样和DLPF数字低通滤波器*/
- #define MPU6050_RA_CONFIG 0x1A
- //bit5-bit3 一个连接到FSYNC端口的外部信号可以通过配置EXT_SYNC_SET来采样
- // 也就是说,这里设置之后,FSYNC的电平0或1进入最终数据寄存器,具体如下
- // 0 不使用 1 FSYNC电平进入所有数据寄存器 2 FSYNC电平进入GYRO_XOUT_L 3 FSYNC电平进入GYRO_YOUT_L
- // 4 FSYNC电平进入GYRO_ZOUT_L 5 FSYNC电平进入ACCEL_XOUT_L 6 FSYNC电平进入ACCEL_YOUT_L
- // 7 FSYNC电平进入SYNC_ACCEL_ZOUT_L
- //bit2-bit0 数字低通滤波器 用于滤除高频干扰 高于这个频率的干扰被滤除掉
- /*对应关系如下
- * * | 加速度传感器 | 陀螺仪
- * * DLPF_CFG | 带宽 | 延迟 | 带宽 | 延迟 | 采样率
- * -------------+--------+-------+--------+------+-------------
- * 0 | 260Hz | 0ms | 256Hz | 0.98ms | 8kHz
- * 1 | 184Hz | 2.0ms | 188Hz | 1.9ms | 1kHz
- * 2 | 94Hz | 3.0ms | 98Hz | 2.8ms | 1kHz
- * 3 | 44Hz | 4.9ms | 42Hz | 4.8ms | 1kHz
- * 4 | 21Hz | 8.5ms | 20Hz | 8.3ms | 1kHz
- * 5 | 10Hz | 13.8ms | 10Hz | 13.4ms | 1kHz
- * 6 | 5Hz | 19.0ms | 5Hz | 18.6ms | 1kHz
- * 7 | Reserved | Reserved | Reserved
- * */
-
|