STM32驱动MPU6050
扫描二维码
随时随地手机看文章
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
#ifndef__MPU6050_H_
#define__MPU6050_H_
#include"common.h"
#include"ioremap.h"
#include"stm32f10x.h"
#include"delay.h"
#include"uart.h"
#defineMPU_ACK_WAIT_TIME200//us
#defineMPU6050_ADDRESS_AD0_LOW0xD0//AD0为低的时候设备的写地址
#defineMPU6050_ADDRESS_AD0_HIGH0XD1//AD0为高的时候设备的写地址
#defineMPU_ADDR0xD0//IIC写入时的地址字节数据
#defineMPU_DEBUG1
//技术文档未公布的寄存器主要用于官方DMP操作
#defineMPU6050_RA_XG_OFFS_TC0x00//[bit7]PWR_MODE,[6:1]XG_OFFS_TC,[bit0]OTP_BNK_VLD
#defineMPU6050_RA_YG_OFFS_TC0x01//[7]PWR_MODE,[6:1]YG_OFFS_TC,[0]OTP_BNK_VLD
//bit7的定义,当设置为1,辅助I2C总线高电平是VDD。当设置为0,辅助I2C总线高电平是VLOGIC
#defineMPU6050_RA_ZG_OFFS_TC0x02//[7]PWR_MODE,[6:1]ZG_OFFS_TC,[0]OTP_BNK_VLD
#defineMPU6050_RA_X_FINE_GAIN0x03//[7:0]X_FINE_GAIN
#defineMPU6050_RA_Y_FINE_GAIN0x04//[7:0]Y_FINE_GAIN
#defineMPU6050_RA_Z_FINE_GAIN0x05//[7:0]Z_FINE_GAIN
#defineMPU6050_RA_XA_OFFS_H0x06//[15:0]XA_OFFS两个寄存器合在一起
#defineMPU6050_RA_XA_OFFS_L_TC0x07
#defineMPU6050_RA_YA_OFFS_H0x08//[15:0]YA_OFFS两个寄存器合在一起
#defineMPU6050_RA_YA_OFFS_L_TC0x09
#defineMPU6050_RA_ZA_OFFS_H0x0A//[15:0]ZA_OFFS两个寄存器合在一起
#defineMPU6050_RA_ZA_OFFS_L_TC0x0B
#defineMPU6050_RA_XG_OFFS_USRH0x13//[15:0]XG_OFFS_USR两个寄存器合在一起
#defineMPU6050_RA_XG_OFFS_USRL0x14
#defineMPU6050_RA_YG_OFFS_USRH0x15//[15:0]YG_OFFS_USR两个寄存器合在一起
#defineMPU6050_RA_YG_OFFS_USRL0x16
#defineMPU6050_RA_ZG_OFFS_USRH0x17//[15:0]ZG_OFFS_USR两个寄存器合在一起
#defineMPU6050_RA_ZG_OFFS_USRL0x18
/*陀螺仪的采样频率*/
/*传感器的寄存器输出,FIFO输出,DMP采样、运动检测、
*零运动检测和自由落体检测都是基于采样率。
*通过SMPLRT_DIV把陀螺仪输出率分频即可得到采样率
*采样率=陀螺仪输出率/(1+SMPLRT_DIV)
*禁用DLPF的情况下(DLPF_CFG=0或7),陀螺仪输出率=8khz
*在启用DLPF(见寄存器26)时,陀螺仪输出率=1khz
*加速度传感器输出率是1khz。这意味着,采样率大于1khz时,
*同一个加速度传感器的样品可能会多次输入到FIFO、DMP和传感器寄存器*/
#defineMPU6050_RA_SMPLRT_DIV0x19//[0-7]陀螺仪输出分频采样率
/*配置外部引脚采样和DLPF数字低通滤波器*/
#defineMPU6050_RA_CONFIG0x1A
//bit5-bit3一个连接到FSYNC端口的外部信号可以通过配置EXT_SYNC_SET来采样
//也就是说,这里设置之后,FSYNC的电平0或1进入最终数据寄存器,具体如下
//0不使用1FSYNC电平进入所有数据寄存器2FSYNC电平进入GYRO_XOUT_L3FSYNC电平进入GYRO_YOUT_L
//4FSYNC电平进入GYRO_ZOUT_L5FSYNC电平进入ACCEL_XOUT_L6FSYNC电平进入ACCEL_YOUT_L
//7FSYNC电平进入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
**/
/*陀螺仪的配置,主要是配置陀螺仪的量程与自检(通过相应的位765开启自检)*/
#defineMPU6050_RA_GYRO_CONFIG0x1B
//bit4-bit3量程设置如下
//0=+/-250度/秒
// 1 = +/- 500 度/秒