STM32学习笔记----MPU6050的工作原理

MPU6050

介绍

    MPU6050内置了运动融合引擎,用于手持和桌面的应用程序、游戏控制器、体感遥控以及其他消费电子设备。它内置一个三轴 MEMS 陀螺仪、一个三轴 MEMS 加速度计、一个数字运动处理引擎(DMP)以及用于第三方的数字传感器接口的辅助 I2C 端口(常用于扩展磁力计)。当辅助 I2C 端口连接到一个三轴磁力计,MPU6050 能提供一个完整的九轴融合输出到其主 I2C 端口。
    MPU6050 拥有16位模/数转换器(ADC),将三轴陀螺仪及三轴加速度计数据转化为数字量输出。为了精确跟踪快速和慢速运动,MPU6050 支持用户可编程的陀螺仪满量程范围有:±250、±500、±1000 与 ±2000(单位为 °/s 或 dps),支持用户可编程的加速度计满量程范围有:±2G、±4G、±8G 与 ±16G。同时 MPU6050 内置了一个可编程的低通滤波器,可用于传感器数据的滤波。
    MPU6050 数据传输可通过最高至 400kHz 的 I2C 总线完成,它的封装尺寸为 4mm * 4mm * 0.9mm(QFN)。其他的特性包括内置的温度传感器以及在整个工作温度范围内的振荡频率仅有 ±1% 波动的振荡器,并具有高达 10000 GHz 的碰撞容忍度。
    MPU6050 的电源供应十分灵活,电源电压 VDD 供电范围为 2.375~3.46 V。此外,提供了 I2C 接口的逻辑参考电平 VLOGIC,它可以是 1.8 V ± 5% 或 VDD 的电压。MPU6050 的三轴陀螺仪正常工作电流为 3.6 mA,待机电流低至 5 μA;三轴加速度计正常工作电流为 500 μA,低功耗模式下工作电流最低为 10 μA。通过片上的数字运动处理引擎 DMP可减少复杂的融合运算负荷,由DMP完成四元数运算,微控制器只需要简单的读取和计算,即可得到融合姿态。使能六轴传感器以及 DMP 仅需 3.9 mA 的工作电流。
    要玩转 MPU6050,首先驱动 I2C 总线,然后初始化 MPU6050,最后从 MPU6050 读取数据。MPU6050的地址有两个0x68(ADO引脚接GND或不接)、0x69(ADO接VCC)。

参数

1、通信方式:IIC
2、工作电压:2.3~3.46V
3、工作模式:主模式、旁路模式
4、内部资源:陀螺仪、加速度计、DMP、从IIC
5、使用:一般使用陀螺仪和加速度计采用互补滤波算法就可以计算倾角,在四轴上常使用DMP利用四元数法获取融合姿态。

模块资源

A、一个三轴加速度计可测量三轴加速度;
B、一个三轴陀螺仪可测量三轴角速度;
C、16位AD模块用于采集传感器数值;
D、一个DMP模块,用于解算数据,输出四元数;
E、一个从IIC模块(AUX),用于与其他传感器模块通信;
F、一个主IIC模块,与控制器通信。

工作原理

1)加速度计
A、工作原理

    一个加速度计我们可以把它想作一个圆球在一个方盒子中。
STM32学习笔记----MPU6050的工作原理_第1张图片
    我们假定这个盒子不在重力场中或者其他任何会影响球的位置的场中,球处于盒子的正中央。你可以想象盒子在外太空中,远离任何天体,一切东西都处于无重力状态。在上面的图中你可以看到我们给每个轴分配了一对墙(我们移除了Y+以此来观察里面的情况)。设想每面墙都能感测压力。如果我们突然把盒子向左移动(加速度为1g=9.8m/s^2),那么球会撞上X-墙。然后我们检测球撞击墙面产生的压力,X轴输出值为-1g。
STM32学习笔记----MPU6050的工作原理_第2张图片
    请注意加速度计检测到的力的方向与它本身加速度的方向是相反的。这种力量通常被称为惯性力或假想力 。在这个模型中你你应该学到加速度计是通过间接测量力对一个墙面的作用力来测量加速度的,在实际应用中,可能通过弹簧等装置来测量力。这个力可以是加速度引起的,但在下面的例子中,我们会发现它不一定是加速度引起的。
如果我们把模型放在地球上,球会落在Z-墙面上并对其施加一个1g的力,见下图:
STM32学习笔记----MPU6050的工作原理_第3张图片
    在这种情况下盒子没有移动但我们任然读取到Z轴有-1g的值。球在墙壁上施加的压力是由引力造成的。在理论上,它可以是不同类型的力量 - 例如,你可以想象我们的球是铁质的,将一个磁铁放在盒子旁边那球就会撞上另一面墙。引用这个例子只是为了说明加速度计的本质是检测力而非加速度。只是加速度所引起的惯性力正好能被加速度计的检测装置所捕获。
    虽然这个模型并非一个MEMS传感器的真实构造,但它用来解决与加速度计相关的问题相当有效。实际上有些类似传感器中有金属小球,它们称作倾角开关,但是它们的功能更弱,只能检测设备是否在一定程度内倾斜,却不能得到倾斜的程度。
    到目前为止,我们已经分析了单轴的加速度计输出,这是使用单轴加速度计所能得到的。三轴加速度计的真正价值在于它们能够检测全部三个轴的惯性力。让我们回到盒子模型,并将盒子向右旋转45度。现在球会与两个面接触:Z-和X-,见下图:
STM32学习笔记----MPU6050的工作原理_第4张图片
    以上模型可以看作加速度计的通俗理解,实际上的加速度计有很多类型,但是原理差不多,下图是MMA7361的简化换能器物理模型,使用的就是电容型模型,在存在加速度时会使电容中间的极板发生位移,导致电容电平变化。
STM32学习笔记----MPU6050的工作原理_第5张图片
B、倾角计算原理
    事实上一个加速度计就快可以计算角度,但是单纯使用加速度计求角度,会有很大的噪声,且容易受到干扰,只适用于静态,所以不推荐,最好还是用陀螺仪+加速度计的方式获取角度。当然在要求不高的场合还是可以考虑只用加速度计的。
    如果芯片水平静置,X、Y方向的重力分量为0g,而Z轴方向的重力分量为g。如下图所示,X=0;Y=0 Z=g
STM32学习笔记----MPU6050的工作原理_第6张图片

图1 芯片水平静置

如果各边与水平方向有一些夹角,则其图像如图2所示,
X轴方向的加速度大小为Ax,其与水平线的夹角为α1,与重力加速度g的夹角α;
Y轴方向的加速度为Ay,与水平线的加速度为 β1,与重力加速度g的夹角为β;
Z轴方向的加速度为Az,与水平线的加速度为 γ1,与重力加速度g的夹角为γ。
STM32学习笔记----MPU6050的工作原理_第7张图片

图2 各边夹角

基于图2中的夹角概念,它们的关系为
α = 90度- α1, β = 90度- β1 , γ = 90度- γ1。
g在各轴方向上的分量为:
Ax = gcosα,
Ay = gcosβ ,
Az = gcosγ;
将3中数据代入得:
Ax = gcosα = gcos(90度- α1) =gsinα1 ,
Ay =gsinβ1 ,
Az = gsin γ1.
如图3所示。(其中各垂直虚线的大小为:g * g = Ax * Ax + gcosα1 * gcosα1, 则
gcosα1 = squr(g * g - Ax * Ax) ,
gcosβ1 = squr (g * g - Ay * Ay ),
gcosγ1 = squr(g * g - Az * Az ))。
STM32学习笔记----MPU6050的工作原理_第8张图片

图3 重力加速度g在各轴上的分量

根据立体几何中,g相当于立方体的对角线,Ax、Ay、Az相当于三条边,如图4所示,虚线大小等于 Ay * Ay+Az * Az,所以根据勾股定理Ax * Ax + Ay * Ay + Az * Az = g * g
由4和5可以知道,(以X轴为例) sinα1 = Ax/g, cosα1 = squr(g * g - Ax * Ax) / g ,
tanα1 =Ax / squr(g * g - Ax * Ax) = Ax / squr(Ay * Ay + Az * Az) 。
tanβ1 = Ay / squr(Ax * Ax+Az * Az) ,
tanγ1 = Az / squr(Ax * Ax +Ay * Ay)。
STM32学习笔记----MPU6050的工作原理_第9张图片

图4 重力加速度g 作为立方体的对角线

最后得出加速度传感器值与角度值(弧度)的关系为:
tanα1 = Ax / squr(Ay * Ay + Az * Az) ,
tanβ1 = Ay / squr(Ax * Ax+Az * Az) ,
tanγ1 = Az / squr(Ax * Ax +Ay * Ay)。

其中 α1 、β1 、γ1分别是X、Y、Z轴和水平线的弧度值(反三角函数计算的值是弧度),Ax 、Ay、Az是三个轴上的加速度值。那么弧度值分别为:
α1 = arctan(Ax / squr(Ay * Ay + Az * Az))
β1= arctan(Ay / squr(Ax * Ax+Az * Az))
γ1= arctan( Az / squr(Ax * Ax +Ay * Ay))
接下来就得使用数据公式:弧度= θπR/180 。 这样算得θ = 弧度 * 180/πR,其中R取1。最后得到的各轴的角度值分别为:

θx = α1 * 180/π = [arctan(Ax / squr(Ay * Ay + Az * Az))] * 180/π
θy =β1 * 180/π = [arctan(Ay / squr(Ax * Ax+Az * Az))] * 180/π
θz =γ1 * 180/π = [arctan( Az / squr(Ax * Ax +Ay * Ay))] * 180/π

2)陀螺仪
    陀螺仪(Gyroscope、GYRO-Sensor)也叫地感器,传统结构是内部有个陀螺,如下图所示(三轴陀螺),三轴陀螺仪的工作原理是通过测量三维坐标系内陀螺转子的垂直轴与设备之间的夹角,并计算角速度,通过夹角和角速度来判别物体在三维空间的运动状态。三轴陀螺仪可以同时测定上、下、左、右、前、后等6个方向(合成方向同样可分解为三轴坐标),最终可判断出设备的移动轨迹和加速度。
STM32学习笔记----MPU6050的工作原理_第10张图片
在如今的电子模块里使用的是电子陀螺仪,其工作原理利用了科里奥利加速度.
STM32学习笔记----MPU6050的工作原理_第11张图片
    陀螺仪的内部原理是这样的:对固定电极施加电压,并交替改变电压,让一个质量块做振荡式来回运动,当旋转时,会产生科里奥利加速度,此时就可以对其进行测量。 角速率由科氏加速度测量结果决定:

  • 科氏加速度 = 2 × (w × 质量块速度)
  • w是施加的角速率(w = 2 πf)

    科氏加速度与谐振器具有相同的频率和相位,因此可以抵消低速外部振动 ,施加变化的电压来回移动器件,此时器件只有水平运动没有垂直运动。如果施加旋转,可以看到器件会上下移动,外部指将感知该运动,从而就能拾取到与旋转相关的信号。
STM32学习笔记----MPU6050的工作原理_第12张图片
上面的动画,只是抽象展示了陀螺仪的工作原理,而真实的陀螺仪内部构造是下面这个样子
STM32学习笔记----MPU6050的工作原理_第13张图片
将加速度计和陀螺仪的数据读取出来后还需要进行融合算法才能得到角度,而融合算法 种类更多,有一阶互补滤波、二阶互补滤波、卡尔曼滤波、四元数法。具体看其他博文“MPU6050的DMP”以及“互补滤波”

你可能感兴趣的:(STM32笔记)