目录
MPU6050六轴传感器的驱动开发(一)
开发环境
简介
数据手册与寄存器手册下载
主要规格参数
MPU6050的主要寄存器简介
与初始化相关的寄存器
寄存器107
寄存器27
寄存器28
寄存器25
寄存器26
寄存器108
寄存器117
寄存器56
寄存器106
寄存器35
寄存器55
获取数据相关的寄存器
寄存器65和66
寄存器67-72
寄存器59-64
MPU6050六轴传感器的驱动开发(一)
开发环境
主控芯片为STM32F407VxT6、MPU6050六轴传感器
简介
MPU6050是InvenSense公司推出的整合性6轴运动处理组件,其内部整合了3轴陀螺仪和3轴加速度传感器,并且含有一个I2C接口,还可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过I2C接口,向应用端输出完整的9轴融合演算数据。 InvenSense 公司提供了一套基于DMP的运动处理驱动库,可大大降低单片机对动处理运算的负荷,同时也大大降低了编程难度。因此该模块广泛运用于飞控、计步等电子产品中。
数据手册与寄存器手册下载
下载链接如下: https://download.csdn.net/download/qq_45143522/90105379?spm=1001.2014.3001.5503
主要规格参数
工作电压:3-5V(模块带有LDO) 工作电流:5mA 通信接口: I2C
MPU6050的主要寄存器简介
我们在使用mpu6050模块时,首先需要理清楚它的一些主要的寄存器功能及配置。后续在进行开发时,我们通过对不同寄存器进行配置来实现MPU6050六轴传感器的初始化操作。 常用的初始化MPU6050的流程如下: 0、MPU6050的端口引脚初始化 1、复位操作、复位MPU6050的所有寄存器为默认值 2、唤醒操作、唤醒MPU6050进入正常工作状态 3、设置陀螺仪传感器的满量程范围 4、设置加速度传感器的满量程范围 5、设置陀螺仪的采样率与数字低通滤波器 6、关闭所有中断 7、关闭I2C主模式 8、关闭FIFO 9、配置中断引脚有效电平 10、设置时钟源 11、关闭陀螺仪与加速度传感器的待机模式 12、设置采样率和数字低通滤波器 以下按照常用的初始化流程来简要介绍一些主要的寄存器。
与初始化相关的寄存器
寄存器107
说明: 寄存器107中的Bit7(DEVICE_RESET) 当该位为1时,MPU6050会恢复内部寄存器为默认值。复位完成后,该位会自动清0。 因此,向寄存器107写入0x80即可将MPU6050进行复位操作。 寄存器107中的Bit6(SLEEP) 当该位为1时,MPU6050会进入睡眠模式。 因此,在MPU6050复位完成后,再向寄存器107中写入0x00即可唤醒MPU6050进入正常工作模式。 寄存器107中的Bit5(CYCLE) 当SLEEP位为0并且CYCLE为1时,MPU6050进入循环模式。设备会在睡眠模式和唤醒模式之间循环,根据寄存器108中的LP_WAKE_CTRL位设定的速率从加速度计采集数据。 寄存器107中的Bit3(TEMP_DIS) 该位为1时,温度传感器无效。 寄存器107中的Bit2-Bit0(CLK_SEL[2:0]) 这三位用于选择MPU6050的系统时钟源。
MPU6050的系统时钟源选择如下图所示:
由上图可知,当CLK_SEL值为0时,MPU6050使用内部的8MHz的振荡器作为时钟源。 但是通常我们一般会选择X轴陀螺仪PLL作为时钟源,以获得更高精度的时钟。 因此,我们向107寄存器写入0x01即可设置MPU6050的时钟源为X轴陀螺仪PLL。
寄存器27
说明: 该寄存器主要用来设置陀螺仪传感器的满量程范围和触发陀螺仪自检。 寄存器27的Bit4-Bit3(FS_SEL[1:0])用来设置陀螺仪传感器的满量程范围。 Bit7、Bit6、Bit5为1时分别表示对应的X、Y、Z轴进行自检。
寄存器27的Bit4-Bit3(FS_SEL[1:0])用来设置陀螺仪传感器的满量程范围。 具体配置对应关系如下:
可见,陀螺仪传感器有4种量程可以选择,分别为正负250dps、正负500dps、正负1000dps、正负2000dps。 这里以正负2000dps为例,我们需要将FS_SEL设置为3即可。
寄存器28
说明: 该寄存器主要用来设置加速度传感器的满量程范围和触发加速度计自检。 寄存器28的Bit4-Bit3(AFS_SEL[1:0])用来设置加速度传感器的满量程范围。 Bit7、Bit6、Bit5为1时分别表示对应的X、Y、Z轴进行自检。
寄存器28的Bit4-Bit3(AFS_SEL[1:0])用来设置加速度传感器的满量程范围。 具体配置对应关系如下:
可见,加速度传感器也有4种量程可以选择,分别为正负2g、正负4g、正负8g、正负16g。 这里以正负2g为例,我们需要将AFS_SEL设置为0即可。
寄存器25
说明: 该寄存器主要用于设置陀螺仪采样频率的分频设置。 一般公式如下: 采样频率 = 陀螺仪输出频率 / (1 + SMPLRT_DIV) 当寄存器26中的DLPF_CFG位为0或7时,陀螺仪的输出频率为8KHz。 当寄存器26中的DLPF_CFG位为1-6时,陀螺仪的输出频率为1KHz。
寄存器26
说明: 该寄存器主要用于配置外部FSYNC引脚采样及陀螺仪和加速度计的数字低通滤波器。
数字低通滤波器由DLPF_CFG控制,加速度计和陀螺仪根据该值被过滤。过滤情况如下图所示:
一般公式如下: 采样频率 = 陀螺仪输出频率 / (1 + SMPLRT_DIV) 当寄存器26中的DLPF_CFG位为0或7时,陀螺仪的输出频率为8KHz。 当寄存器26中的DLPF_CFG位为1-6时,陀螺仪的输出频率为1KHz。
寄存器108
说明: 该寄存器主要用来配置加速度计在低功耗模式下的唤醒频率以及配置是否让陀螺仪和加速度传感器的X、Y、Z三轴进入待机模式。 Bit5-Bit0 这6位对应位为1时,加速度或陀螺仪的对应轴进入待机模式。 因此,向寄存器108写入0x00即可关闭陀螺仪与加速度传感器的待机模式,使其进入正常工作模式。 如果用户通过LP_WAKE_CTRL配置加速度计在低功耗模式下的唤醒频率,设备会关闭除了主I2C接口外的所有设备。加速度计会在固定的间隔时间唤醒并测量一次。
加速度计的唤醒频率对应设置如下:
寄存器117
说明: 该寄存器为MPU6050的自检寄存器。用来检测MPU6050是否存在。WHO_AM_I的内容是MPU6050的7位I2C地址的前6位,最后一位的地址由AD0的引脚来确定。 当AD0接地时,读取该寄存器的值正常将返回0x68。 当AD0接VCC时,读取该寄存器的值正常将返回0x69。
寄存器56
该寄存器为中断使能寄存器,包含了MPU6050的4个中断使能控制,对应位为1表示使能该中断,反之,禁止该中断。
寄存器106
该寄存器为用户控制寄存器,其中的Bit5用来控制MPU6050的I2C主模式是否使能,该位为1,则使能I2C主模式,此时MPU6050作为I2C的主机使用。该位为0表示关闭MPU6050的I2C主模式。
寄存器35
该寄存器为FIFO使能控制寄存器,对应位为1,则使能FIFO功能,反之,关闭FIFO功能。
寄存器55
该寄存器主要功能为配置INT引脚的有效电平,Bit7位为1时,INT引脚低电平有效,为0时,高电平有效。
获取数据相关的寄存器
寄存器65和66
说明: 获取温度的寄存器由两个寄存器组成。温度测量值根据采样频率写入到该寄存器中。读取这两个寄存器可以获取温度的测量值。 温度换算公式为:Temperature = 36.53 + regval/340,温度值单位为℃。
寄存器67-72
说明: 该寄存器主要用来读取陀螺仪的测量原始值。分别有X、Y、Z三轴的数据。
陀螺仪的满量程范围与灵敏度最低分辨率对应如下:
寄存器59-64
说明: 该寄存器主要用来读取加速度计的测量原始值。分别有X、Y、Z三轴的数据。
加速度计的满量程范围与灵敏度最低分辨率对应如下:
以上寄存器就是在后续MPU6050驱动开发时常用的一些寄存器。具体的MPU6050的驱动代码见《MPU6050六轴传感器的驱动开发(二)》。