原创 STM32驱动MPU6050

2019-10-11 13:31 1851 7 2 分类: MCU/ 嵌入式 文集: 测试测量
[导读]MPU-60X0是全球首例9轴运动处理传感器。它集成了3轴MEMS陀螺仪,3轴MEMS加速度计,以及一个可扩展的数字运动处理器DMP(Digital Motion Processor),可用I2C接口连接一个第三方的数字传感器,比如磁力计。扩展之后就

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 度/秒

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

curton 2019-10-11 22:37

学习
相关推荐阅读
minicaihong 2020-10-22 16:44
场效应管放大电路的直流偏置电路详解
什么是偏置电路晶体管构成的放大器要做到不失真地将信号电压放大,就必须保证晶体管的发射结正偏、集电结反偏。即应该设置它的工作点。所谓工作点就是通过外部电路的设置使晶体管的基极、发射极和集电极处于所要求的...
minicaihong 2020-10-22 16:37
场效应管偏置电路-场效应管偏置电路的工作原理及作用分析
什么是偏置电路晶体管构成的放大器要做到不失真地将信号电压放大,就必须保证晶体管的发射结正偏、集电结反偏。即应该设置它的工作点。所谓工作点就是通过外部电路的设置使晶体管的基极、发射极和集电极处于所要求的...
minicaihong 2020-10-22 16:27
MOS管偏置电路-MOS管直流、恒流等偏置电路图文及方程详解
MOS管偏置电路MOS管直流偏置电路MOS管的单电源直流偏置电路有两种:1、只能用于结型和耗尽型MOS管的自给偏置电路。2、可用于各种MOS管的分压式偏置电路自给MOS管偏置电路(1)图解法根据图中电...
minicaihong 2020-05-27 09:50
sprintf 格式化字符串
sprintf 格式化字符串好久没写博客了,又遇到自己觉得很傻的问题,格式化字符串还要找下定义和用法sprintf() 函数把格式化的字符串写入变量中。arg1、arg2、++ 参数将被插入...
minicaihong 2020-05-25 15:07
12T和1T的单片机
标准51是12T的,就是说12个时钟周期(晶振周期,例如12M的,周期是1/12M,单位秒),机器做一个指令度周期,刚好就是1/12M*12=1uS,常见指令例如nop就是一个周期,刚好1uS,其他的...
minicaihong 2020-05-23 16:22
4HC595驱动8*8点阵屏
74HC595驱动8*8点阵屏置顶 菜袅1号 2020-05-19 10:00:03   52   收藏展开该项目使用国产M0核单片机,驱动方式类似于stm32平台;点阵驱动芯片:...
EE直播间
更多
我要评论
1
7
关闭 站长推荐上一条 /3 下一条