历史上的今天
返回首页

历史上的今天

今天是:2024年12月06日(星期五)

正在发生

2021年12月06日 | 正点原子STM32学习笔记——MPU6050介绍

2021-12-06 来源:eefocus

一、MPU6050简介

1.什么是MPU6050?

        MPU6050是InvenSense公司推出的全球首款整合性6轴运动处理组件,内带3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器,利用自带数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主IIC接口,可以向应用端输出完整的9轴姿态融合演算数据。


        有了DMP,我们可以使用InvenSense公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度 。


2.MUP6050特点。

MPU6050 的特点包括:

① 以数字形式输出 6 轴或 9 轴(需外接磁传感器)的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据(需 DMP 支持)。

② 具有 131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000 与±2000°/sec 的 3 轴角速度感测器(陀螺仪)。

③ 集成可程序控制,范围为±2g、±4g、±8g 和±16g 的 3 轴加速度传感器。

④ 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。

⑤ 自带数字运动处理(DMP: Digital Motion Processing)引擎可减少MCU复杂的融合演算数据、感测器同步化、姿势感应等的负荷。

⑥ 内建运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。

⑦ 自带一个数字温度传感器。

⑧ 带数字输入同步引脚(Sync pin)支持视频电子影相稳定技术与 GPS。

⑨ 可程序控制的中断(interrupt),支持姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G 中断、零动作感应、触击感应、摇动感应功能。

⑩ VDD 供电电压为 2.5V±5%、3.0V±5%、3.3V±5%;VLOGIC 可低至 1.8V± 5%。

⑪ 陀螺仪工作电流:5mA,陀螺仪待。

⑫ 自带 1024 字节 FIFO,有助于降低系统功。

⑬ 高达 400Khz 的 IIC 通信接口。

⑭ 超小封装尺寸:4x4x0.9mm(QFN)。


3.MPU6050框图。

MPU6050

        其中,SCL 和 SDA 是连接 MCU 的 IIC 接口,MCU 通过这个 IIC 接口来控制 MPU6050,另外还有一个 IIC 接口:AUX_CL 和 AUX_DA,这个接口可用来连接外部从设备,比如磁传感器,这样就可以组成一个九轴传感器。VLOGIC 是 IO 口电压,该引脚最低可以到 1.8V,我们一般直接接 VDD 即可。AD0 是从 IIC 接口(接 MCU)的地址控制引脚,该引脚控制IIC 地址的最低位。如果接 GND,则 MPU6050 的 IIC 地址是:0X68,如果接 VDD,则是0X69,注意:这里的地址是不包含数据传输的最低位的(最低位用来表示读写)!!


另:

①ATK-MPU6050 六轴传感器模块外观:

在这里插入图片描述

        模块自带了 3.3V 超低压差稳压芯片,给 MPU6050 供电,因此外部供电可以选择:3.3V / 5V 都可以。模块通过 P1 排针与外部连接,引出了 VCC、GND、IIC_SDA、IIC_SCL、MPU_INT 和 MPU_AD0 等信号,其中,IIC_SDA 和 IIC_SCL 带了 4.7K上拉电阻,外部可以不用再加上拉电阻了,另外 MPU_AD0 自带了 10K 下拉电阻,当 AD0悬空时,默认 IIC 地址为(0X68)。

②ATK-MPU6050 模块原理图:

在这里插入图片描述

4.MPU6050初始化。

1 )初始化 IIC 接口

        MPU6050 采用 IIC 与 STM32F1 通信,所以我们需要先初始化与 MPU6050 连接的 SDA和 SCL 数据线。


2 )复位 MPU6050

        这一步让 MPU6050 内部所有寄存器恢复默认值,通过对电源管理寄存器 1(0X6B)的bit7 写 1 实现。 复位后,电源管理寄存器 1 恢复默认值(0X40),然后必须设置该寄存器为0X00,以唤醒 MPU6050,进入正常工作状态。


3 )设置角速度传感器(陀螺仪)和加速度传感器的满量程范围

        这一步,我们设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围为±2g。


4 )设置其他参数

        这里,我们还需要配置的参数有:关闭中断、关闭 AUX IIC 接口、禁止 FIFO、设置陀螺仪采样率和设置数字低通滤波器(DLPF)等。本章我们不用中断方式读取数据,所以关闭中断,然后也没用到 AUX IIC 接口外接其他传感器,所以也关闭这个接口。分别通过中断使能寄存器(0X38)和用户控制寄存器(0X6A)控制。MPU6050 可以使用 FIFO 存储传感器数据,不过本章我们没有用到,所以关闭所有 FIFO 通道,这个通过 FIFO 使能寄存器(0X23)控制,默认都是 0(即禁止 FIFO),所以用默认值就可以了。陀螺仪采样率通过采样率分频寄存器(0X19)控制,这个采样率我们一般设置为 50 即可。数字低通滤波器(DLPF)则通过配置寄存器(0X1A)设置,一般设置 DLPF 为带宽的 1/2 即可。


5 )配置系统时钟源并使能角速度传感器和加速度传感器

        系统时钟源同样是通过电源管理寄存器 1(0X1B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值是 0(内部 8M RC 震荡),不过我们一般设置为 1,选择 x 轴陀螺 PLL 作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器 2(0X6C)来设置,设置对应位为 0 即可开启。


        至此,MPU6050 的初始化就完成了,可以正常工作了(其他未设置的寄存器全部采用默认值即可),接下来,我们就可以读取相关寄存器,得到加速度传感器、角速度传感器和温度传感器的数据了。不过,我们先简单介绍几个重要的寄存器。


5.寄存器介绍

①电源管理寄存器1(寄存器地址为 0X6B)

电源管理寄存器1各位描述

        其中,DEVICE_RESET 位用来控制复位,设置为 1,复位 MPU6050,复位结束后,MPU硬件自动清零该位。SLEEEP 位用于控制 MPU6050 的工作模式,复位后,该位为 1,即进入了睡眠模式(低功耗),所以我们要清零该位,以进入正常工作模式。TEMP_DIS 用于设置是否使能温度传感器,设置为 0,则使能。最后 CLKSEL[2:0]用于选择系统时钟源,选择关系如下表所示:

CLKSEL 选择列表

        默认是使用内部 8M RC 晶振的,精度不高,所以我们一般选择 X/Y/Z 轴陀螺作为参考的 PLL 作为时钟源,一般设置 CLKSEL=001 即可。


②陀螺仪配置寄存器(寄存器地址为0X1B)

陀螺仪配置寄存器各位描述

        该寄存器我们只关心 FS_SEL[1:0]这两个位,用于设置陀螺仪的满量程范围:0,±250°/S;1,±500°/S;2,±1000°/S;3,±2000°/S;我们一般设置为 3,即±2000°/S,因为陀螺仪的 ADC 为 16 位分辨率,所以得到灵敏度为:65536/4000=16.4LSB/(°/S)。


③加速度传感器配置寄存器(寄存器地址为0X1C)

加速度传感器配置寄存器各位描述

        该寄存器我们只关心 AFS_SEL[1:0]这两个位,用于设置加速度传感器的满量程范围:0,±2g;1,±4g;2,±8g;3,±16g;我们一般设置为 0,即±2g,因为加速度传感器的ADC 也是 16 位,所以得到灵敏度为:65536/4=16384LSB/g。


④ FIFO 使能寄存器(寄存器地址为0X23)

FIFO 使能寄存器各位描述

        该寄存器用于控制 FIFO 使能,在简单读取传感器数据的时候,可以不用 FIFO,设置对应位为 0 即可禁止 FIFO,设置为 1,则使能 FIFO。注意加速度传感器的 3 个轴,全由 1个位(ACCEL_FIFO_EN)控制,只要该位置 1,则加速度传感器的三个通道都开启 FIFO了。


⑤陀螺仪采样率分频寄存器(寄存器地址为0X19)

陀螺仪采样率分频寄存器各位描述

        该寄存器用于设置 MPU6050 的陀螺仪采样频率,计算公式为:

                        采样频率 = 陀螺仪输出频率 / (1+SMPLRT_DIV)

        这里陀螺仪的输出频率,是 1Khz 或者 8Khz,与数字低通滤波器(DLPF)的设置有关,当 DLPF_CFG=0/7 的时候,频率为 8Khz,其他情况是 1Khz。而且 DLPF 滤波频率一般设置为采样率的一半。采样率,我们假定设置为 50Hz,那么 SMPLRT_DIV=1000/50-1=19。


⑥配置寄存器(寄存器地址为0X1A)

配置寄存器各位描述

        这里,我们主要关心数字低通滤波器(DLPF)的设置位,即:DLPF_CFG[2:0],加速度计和陀螺仪,都是根据这三个位的配置进行过滤的。DLPF_CFG 不同配置对应的过滤情况如下表所示:

DLPF_CFG 不同配置对应的过滤情况

        这里的加速度传感器,输出速率(Fs)固定是 1Khz,而角速度传感器的输出速率(Fs),则根据 DLPF_CFG 的配置有所不同。一般我们设置角速度传感器的带宽为其采样率的一半,如前面所说的,如果设置采样率为 50Hz,那么带宽就应该设置为 25Hz,取近似值 20Hz,就应该设置 DLPF_CFG=100。


⑦电源管理寄存器2(0X6C)

电源管理寄存器2

        该寄存器的 LP_WAKE_CTRL 用于控制低功耗时的唤醒频率,本章用不到。剩下的 6位,分别控制加速度和陀螺仪的 x/y/z 轴是否进入待机模式,这里我们全部都不进入待机模式,所以全部设置为 0 即可。


⑧陀螺仪数据输出寄存器(共6个寄存器,地址为0X43~0X48)

陀螺仪数据输出寄存器各位描述

        陀螺仪数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的陀螺仪传感器数据,高字节在前,低字节在后。


⑨加速度传感器数据输出寄存器(6个,地址为0X3B~0X40)

加速度传感器数据输出寄存器各位描述

        加速度传感器数据输出寄存器总共由6个寄存器组成,输出X/Y/Z三个轴的加速度传感器值,高字节在前,低字节在后。


⑩温度传感器数据输出寄存器(0X41~0X42)

温度传感器数据输出寄存器各位描述

        通过读取0X41(高8位)和0X42(低8位)寄存器得到,温度换算公式为:

                                                Temperature = 36.53 + regval/340

        其中,Temperature为计算得到的温度值,单位为℃,regval为从0X41和0X42读到的温度传感器值。


二、DMP使用简介

        MPU6050 自带了数字运动处理器,即 DMP,并且,InvenSense 提供了一个 MPU6050 的嵌入式运动驱动库,结合 MPU6050 的 DMP,可以将我们的加速度传感器和角速度传感器的原始数据,直接转换成四元数输出,而得到四元数之后,就可以很方便的计算出欧拉角:航向角(yaw)、横滚角(roll)和俯仰角(pitch)。


        使用内置的 DMP,大大简化了四轴的代码设计,且 MCU 不用进行姿态解算过程,大大降低了 MCU 的负担,从而有更多的时间去处理其他事件,提高系统实时性。


        使用 MPU6050 的 DMP 输出的四元数是 q30 格式的,也就是浮点数放大了 2 的 30 次方倍。在换算成欧拉角之前,必须先将其转换为浮点数,也就是除以 2 的 30 次方,然后再进行计算,计算公式为:

        q0=quat[0] / q30; //q30 格式转换为浮点数

        q1=quat[1] / q30;

        q2=quat[2] / q30;

        q3=quat[3] / q30;

        //计算得到俯仰角/横滚角/航向角

        pitch=asin(-2 * q1 * q3 + 2 * q0* q2)* 57.3; //俯仰角

        roll=atan2(2 * q2 * q3 + 2 * q0 * q1, -2 * q1 * q1 - 2 * q2* q2 + 1)* 57.3; //横滚角

        yaw=atan2(2*(q1q2 + q0q3),q0q0+q1q1-q2q2-q3q3) * 57.3; //航向角


        其中 quat[0]~ quat[3]是 MPU6050 的 DMP 解算后的四元数,q30 格式,所以要除以一个2 的 30 次方,其中 q30 是一个常量:1073741824,即 2 的 30 次方,然后带入公式,计算出欧拉角。上述计算公式的 57.3 是弧度转换为角度,即 180/π,这样得到的结果就是以度(°)为单位的。关于四元数与欧拉角的公式推导,这里不进行详细说明。

推荐阅读

史海拾趣

Azoteq公司的发展小趣事

近年来,Azoteq在传感技术方面取得了重大突破。其最新产品系列——ProxFusion®,是世界上第一个单芯片集成多传感器功能的解决方案。这一创新产品将多种传感功能集成在一个芯片上,为客户提供了更加便捷、高效的解决方案。ProxFusion®的推出,再次展现了Azoteq在传感技术领域的领先地位。

Bals Elektrotechnik GmbH & Co KG公司的发展小趣事

进入21世纪,Bals Elektrotechnik继续致力于技术创新和产品升级。1998年,公司推出了具有革命性的CEE插头和插座无螺纹连接技术。这一技术不仅提高了连接的安全性和效率,还为用户节省了大量时间。Bals因此成为第一家提供这种创新技术的公司,进一步巩固了其在电气行业的领先地位。

这些故事虽然基于假设和现有信息,但尽量保持了客观性和事实性。它们展示了Bals Elektrotechnik GmbH & Co. KG公司在电子行业发展的不同阶段和关键事件,从一个运输公司成功转型为电气行业的领军企业。这些故事不仅反映了公司的成长历程,也体现了其不断创新、追求卓越的精神。

Crystek公司的发展小趣事

为了更好地满足客户需求和推动业务发展,Crystek公司设立了专门负责频率控制的部门——Crystek Crystals和Crystek Microwave。这两个部门分别致力于开发和制造使用石英谐振器的频率产品以及为微波行业开发频率控制和支持产品。这种专业化的分工不仅提高了公司的运营效率,也使得Crystek公司能够更好地为客户提供定制化的解决方案和优质的服务。

德力西(DELIXI)公司的发展小趣事

1984年,胡成中偕其弟胡成国等人在浙江省乐清市创立了“乐清县求精开关厂”,这便是德力西的前身。当时,企业仅有3位股东,5万元的资本,8名员工,以及单一的热继电器产品。凭借“以质取胜”的经营理念和灵活的机制,德力西在温州市电器行业中逐渐崭露头角。

EPC公司的发展小趣事

最后一家EPC公司深知创新是企业发展的核心动力。公司注重研发投入和人才培养,建立了专业的研发团队和完善的研发体系。公司不断跟踪行业发展趋势和技术动态,积极引进新技术、新工艺和新材料,推动产品升级和产业升级。同时,公司注重创新成果的转化和应用,将新技术、新工艺和新材料应用于实际项目中,提高了项目的竞争力和附加值。通过持续的创新和积累,公司逐渐在电子行业中形成了独特的技术优势和核心竞争力。

请注意,以上故事仅为框架性描述,并未包含具体的公司名称、项目细节和具体数字。您可以根据这些框架性描述进一步深入了解相关公司的发展情况,并结合实际案例进行具体分析和撰写。

永丰盈(CST)公司的发展小趣事

作为一家有社会责任感的企业,CST始终关注环境保护和社会公益事业。公司严格执行环保法规,积极推广绿色生产理念,努力减少生产过程中的污染排放。此外,CST还积极参与社会公益活动,为当地的教育、文化等事业做出了积极贡献。这些举措进一步提升了CST的企业形象和社会声誉。

问答坊 | AI 解惑

ARK推出耗尽型功率MOSFET

ARK推出耗尽型功率MOSFET 近日,成都方舟微电子有限公司(ARK Microelectronics, Co., Ltd., 简称ARK)推出全新系列耗尽型(Depletion Mode)高压功率MOSFET。 该系列产品采用了ARK专有的高密度平面工艺和坚固的多晶硅栅元胞结构,实现了极低的 ...…

查看全部问答>

朽而不锈看模拟应用设计

by ni_labview 看到一个文章,转载来与大家分享: 模拟设计可以老但不可以朽 安静的生活不需再起什么波澜,即将进入四十岁不再进入研发黄金时间段,想把自己做过的想过的都留下来,没有什么名利场的事情了,说出来格外轻松。面对目前大部分国内 ...…

查看全部问答>

请教tlc2543 ad芯片的问题

在用arm直接读tlc2543 ad芯片的时候,转换的结果都是4位起跳的,就是第一个数据是1000,第二个数据不是996或者1004其他的数据如:1001,1002,1003等都不会出现,而且每次数据都是4个4个往上加的,不知道为什么。模拟电路里的量应该是连续变化的吧 ...…

查看全部问答>

WINCE开机画面LOGO的问题

关于开机logo一般有两种实现方法: 方法一:以头文件的形式打包在EBOOT.bin中,但是该方法往往导致EBOT.bin太大; 目前解决办法两个: 1.压缩,feishanm提出一个插值法的压缩办法: http://blog.eeworld.net/feishanm/archive/2009/08/02/44008 ...…

查看全部问答>

弱问:如何实现开机自动加载dll驱动?

现在有一个设备的dll驱动,每次插入usb口都要提示输入驱动名称,所以想实现开机自动加载xxx.dll。 我把dll添加到文件夹里了,platform.bib也修改了,请问,platform.reg里应该如何写?我不清楚reg里怎么写来实现开机自动加载dll。 请您指点下,谢 ...…

查看全部问答>

求LCD资料

有那位同仁有单片机控制LCD显示屏的资料,带程序及控制说明更佳,可以的话发到我邮箱:gxw144@163.com 谢谢!…

查看全部问答>

单片机,初级问题2,大家指教。初学者,大家指教了。谢谢了。

3.26 常用的通信方式有两大类:串行通信和并行通信。目前串行通信协议有很多种:USB、I2C、RS-232、SPI 等都是串行通信协议。并行通信协议有SPP、EPP、ECP等。 ------------------------USB、I2C、RS-232、SPI等都是串行通信协议-----这些串行通 ...…

查看全部问答>

LPC2460 USB HOST 驱动例程哪里找

1.一定要是主机驱动 2.NXP LPC 24XX 系列以下的,我都看过,是模拟设备的,和我们的任务开发板处理设备数据不符。 留下我的联系方式 msn:lvz89871037@163.com …

查看全部问答>

无线摄像头的应用

个监控系统里需要布设大量的各种各样的线材。一方面耗去了大量的人力,另一方面也消耗了大量的铜和塑料。真是劳命伤财,浪费资源,也于环保的理念相违背。人们期待着更简便的音视频传输方式。随着视频压缩技术和无线网络技术的成熟,无线摄像机应运 ...…

查看全部问答>

如何在复位时对RAM进行初始化

系统是异步复位,复位信号有效时,要将RAM中的所有值清零,复位信号结束前,要完成对RAM的复位,这样的初始化程存用Verilog代码应该怎么写啊(可综合!)????希望大家能给点意见!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ...…

查看全部问答>