打印
[STM32F4]

STM32F4_MPU6050六轴传感器详解

[复制链接]
5589|51
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kqh11a|  楼主 | 2023-6-29 18:25 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
        MPU6050是当下最流行的一款六轴(三轴加速度+三轴角速度(陀螺仪))传感器。该传感器广泛的用于四轴、平衡车和空中鼠标等设计,具有非常广泛的应用范围。STM32F4板载了MPU6050传感器,本节我们将使用STM32F4来驱动MPU6050读取其最原始的数据,并且利用其自带的DMP实现姿态解算,结合匿名四轴上位机软件和LCD进行显示。

1. 姿态检测的基本概念
        在飞行器中,飞行姿态是非常重要的参数,以飞机自身的中心建立坐标系,当飞机绕坐标轴旋转的时候,会分别影响到偏航角、横滚角及俯仰角。



        假设我们知道飞机初始时是左上角的状态,只要想办法测量出基于原始状态的三个姿态角的变化量,再进行叠加,就可以获知它的实时姿态了。

使用特权

评论回复
沙发
kqh11a|  楼主 | 2023-6-29 18:27 | 只看该作者
坐标系:

        抽象的说,姿态是载体坐标系和地理坐标系之间的转换关系。

        地球坐标系:以地球球心为原点,Z轴沿地球自转轴方向,X、Y轴在赤道平面内的坐标系。

        地理坐标系:它的原点在地球表面,Z轴沿当地地理垂线的方向,也就是重力加速度的方向,XY轴沿当地经纬线的切线方向。跟我们说的东南西北是一样的。

        载体坐标系:载体坐标系以运载体的质心为原点,一般根据运载体自身结构方向构成坐标系,如Z轴上由原点指向载体顶部,Y轴指向载体头部,X轴沿载体两侧方向。



其中,北轴、天轴、东轴对应的是地理坐标系。

使用特权

评论回复
板凳
kqh11a|  楼主 | 2023-6-29 18:28 | 只看该作者
使用陀螺仪检测角度:

        陀螺仪是最直观的角度检测器,他可以检测物体绕坐标轴转动的角速度, 如同将速度对时间积分可以求出路程一样,将角速度对时间积分就可以计算出旋转的角度。

使用特权

评论回复
地板
kqh11a|  楼主 | 2023-6-29 18:28 | 只看该作者
利用加速度计检测角度:

        由于直接用陀螺仪测量角度在长时间测量时会产生累积误差,因而我们又引入了检测倾角的传感器。

测量倾角最常见的例子是建筑中使用的水平仪,在重力的影响下,水平仪内的气泡能大致反映水柱所在直线与重力方向的夹角关系,利用T字型水平仪,可以检测横滚角与俯仰角,但是偏航角是无法以这样的方式检测的。

        在电子设备中,一般使用加速度传感器来检测倾角,他通过检测器件在各个方向的形变情况而采样得到受力数据,根据F=ma转换,传感器直接输出加速度数据,因而被称为加速度传感器。

        由于地球存在重力场,所以重力在任何时刻都会作用于传感器,当传感器静止的时候(实际上加速度为0),传感器会在该方向检测出加速度g,不能认为重力方向测出的加速度为g,就表示传感器在该方向作加速度为g的运动。

使用特权

评论回复
5
kqh11a|  楼主 | 2023-6-29 18:28 | 只看该作者
磁场检测:

        为了弥补加速度传感器无法检测偏航角的问题,我们再引入磁场检测传感器,它可以检测出各个方向上的磁场大小,通过检测地球磁场,它可以实现指南针的功能,所以也称为电子罗盘。由于地磁场与地理坐标系的 “南北” 轴固联,利用磁场检测传感器的指南针功能,就可以测量出偏航角了。

使用特权

评论回复
6
kqh11a|  楼主 | 2023-6-29 18:29 | 只看该作者
磁场检测器的缺陷:

        与指南针的缺陷一样,使用磁场传感器会受到外部磁场干扰,如载体本身的电磁场干扰,不同地理环境的磁铁矿干扰等等。

使用特权

评论回复
7
kqh11a|  楼主 | 2023-6-29 18:29 | 只看该作者
GPS检测:

        使用GPS可以直接检测出载体在地球上的坐标,假如载体在某时刻测得坐标在A,另一时刻测得坐标为B,利用两个坐标即可求出它的航向,即可以确定偏航角,且不受磁场的影响,但这种检测方式只有当载体产生大范围位移的时候才有效(GPS民用精度大概为10米级)

使用特权

评论回复
8
kqh11a|  楼主 | 2023-6-29 18:29 | 只看该作者
姿态融合:

        可以发现,使用陀螺仪检测角度时,在静止状态下存在缺陷,且受时间影响,而加速度传感器检测角度时,在运动状态下存在缺陷,且不受时间影响,刚好互补。假如我们同时使用这两种传感器,并设计一个滤波算法,当物体处于静止状态时,增大加速度数据的权重,当物体处于运动状态时,增大陀螺仪数据的权重,从而获得更准确的姿态数据。

        同理,检测偏航角,当载体在静止状态时,可增大磁场检测器数据的权重,当载体在运动状态时,增大陀螺仪和GPS检测数据的权重。这些采用多种传感器数据来检测姿态的处理算法被称为姿态融合。

使用特权

评论回复
9
kqh11a|  楼主 | 2023-6-29 18:29 | 只看该作者
四元数:

        在姿态融合解算的时候常常使用 “四元数” 来表示姿态,它由三个实数及一个虚数组成,因而被称之为四元数。使用四元数表示姿态并不直观,但因为使用欧拉角(也就是前面说的偏航角、横滚角及俯仰角)表示姿态的时候会有 “万向节死锁” 问题,且运算比较复杂,所以一般在处理数据的时候会使用四元数,处理完毕后再把四元数转换成欧拉角。

        也就是说,四元数是姿态角的另一种表达方式。

使用特权

评论回复
10
kqh11a|  楼主 | 2023-6-29 18:29 | 只看该作者
传感器的基本概念
        之前,我们学到的DS18B20温度传感器、DHT11温湿度传感器,以及我们本节学习的 MPU6050 六轴传感器都属于传感器中的一种。这一部分我们来总结何为传感器?

使用特权

评论回复
11
kqh11a|  楼主 | 2023-6-29 18:30 | 只看该作者
传感器原理
        在电子技术中,传感器一般是指把物理量转化成电信号量的装置。



        敏感元件直接感受被测物理量,并输出与该物理量有确定关系的信号,经过转换元件将该物理量信号转换为电信号,变换电路对转换元件输出的电信号进行放大调制,最后输出容易检测的电信号量。

        例如:温度传感器可以把温度量转换成电压信号量输出,且温度值与电压值成比例关系(这也就是敏感元件的作用:输出与该物理量有确定关系的信号),我们只要使用ADC测量出电压值,并根据转换关系即可求得实际温度值。

        陀螺仪、加速度及磁场传感器也是类似的,它们检测的角速度、加速度及磁场强度与电压值有确定的转换关系。

使用特权

评论回复
12
kqh11a|  楼主 | 2023-6-29 18:31 | 只看该作者
传感器参数
传感器一般使用精度、分辨率及采样频率这些参数来进行比较,衡量它的性能:

        精度:指传感器测量值与真实物理量值之间的拟合度误差。
        分辨率:指传感器可检测到的最小物理量的单位。
        采样频率:指在单位时间内的采样次数。

使用特权

评论回复
13
kqh11a|  楼主 | 2023-6-29 18:31 | 只看该作者
物理量的表示方法
        大部分传感器的输出都是与电压成比例关系的,电压值一般采用ADC来测量,而ADC一般有固定位数,如8位ADC、12位ADC等,ADC的位数会影响测量的分辨率及量程。

        假设使用一个2位的ADC来测量长度,那么2位ADC可以测量的值就只能是00 01 10 11,也就是0 1 2 3。假设它的分辨率(传感器可以检测到的最小物理量的单位)为20厘米,那么它最大的测量长度为60厘米。假如它的分辨率为10厘米,那么它的最大测量长度为30厘米,由此可知,对于特定位数的ADC,量程和分辨率不可兼得。

        在实际应用中,常常直接用ADC每位表征的物理量值来表示分辨率,如每位代表20厘米,我们称它的分辨率为1LSB/20cm,它等效于5位表示1米:5LSB/m。其中的LSB(Least Significant Bit),意为ADC的低有效位。

        使用采样得到的ADC数值,除以分辨率,即可求取得到物理量。例如使用分辨率为5LSB/m、线性误差为0.1m的传感器进行长度测量,其ADC采样得到数据值为 “20” ,可计算知道该传感器的测量值为4米,而该长度的真实值介于3.9-4.1米之间。

使用特权

评论回复
14
kqh11a|  楼主 | 2023-6-29 18:31 | 只看该作者
MPU6050简介
        MPU6050模块是一个六轴传感器模块,采用InvenSense公司的MPU6050作为主芯片,能同时检测三轴加速度、三轴陀螺仪(三轴角速度)的运动数据以及温度数据。

        利用MPU6050芯片内部的DMP模块(Digital Motion Processor数字运动处理器),可对传感器数据进行滤波、融合处理,他直接通过IIC接口向主控器输出姿态解算后的姿态数据,降低主控器的运算量。其姿态解算频率最高可达200Hz,非常适合用于对姿态控制实时要求较高的领域。常见应用于手机、智能手环、四轴飞行器及计步器等的姿态检测。

使用特权

评论回复
15
kqh11a|  楼主 | 2023-6-29 18:32 | 只看该作者
基本参数:
供电:3.3V~5V
        通讯接口:IIC协议,支持IIC时钟最高频率为400KHz
        测量维度:加速度3维,陀螺仪3维
        ADC分辨率:加速度16位,陀螺仪16位
        
        加速度测量范围:g、4g、g、g  其中g为重力加速度常数,g=9.8m/
        加速度最高分辨率:16384 LSB/g
        加速度线性误差:0.1g
        加速度输出频率:最高1000Hz
        
        陀螺仪测量范围:250○/s、500○/s、1000○/s、2000○/s  其中g为重力加速度常数,g=9.8m/
        陀螺仪最高分辨率:131 LSB/(○/s)
        陀螺仪线性误差:0.1○/s
        陀螺仪输出频率:最高8000Hz
        DMP姿态解算频率:最高200Hz
        
        温度传感器测量范围:-40~+85℃
        温度传感器分辨率:340 LSB/℃
        温度传感器线性误差:1℃、

使用特权

评论回复
16
kqh11a|  楼主 | 2023-6-29 18:32 | 只看该作者
DMP模块(Digital Motion Processor数字运动处理器):

        从MPU6050的参数中可以得到,加速度计和陀螺仪的采样频率分别是1000Hz和8000Hz,它们是指加速度及角速度数据的采样频率,我们可以使用STM32控制器把这些数据读取出来然后进行姿态融合解算,以求出传感器当前的姿态(包括偏航角、横滚角、俯仰角)

        而如果我们使用传感器内部的DMP数字运动处理器单元进行解算,他可以直接对采样得到的加速度及角速度进行姿态解算,解算得到的结果再输出给STM32控制器,即STM32无需自己计算,可直接获取偏航角、横滚角及俯仰角,该DMP每秒可输出200次姿态解算。、

使用特权

评论回复
17
kqh11a|  楼主 | 2023-6-29 18:32 | 只看该作者
MPU6050芯片引脚:

使用特权

评论回复
18
kqh11a|  楼主 | 2023-6-29 18:33 | 只看该作者
   SCL:IIC从时钟信号线SCL,模块需要外接上拉电阻,一般为4.7K
        SDA:IIC从时钟信号线SDA,模块需要外接上拉电阻,一般为4.7K
        INT:中断输出引脚
        AUX_CL:IIC主串行数据信号线,用于外接传感器
        AUX_DA:IIC主串行时钟信号线,用于外接传感器
        VDD:3.3/5V电源输入
        VLOGIC:IO口电压,该引脚最低可以到1.8V,我们一般直接接VDD即可
        AD0:从IIC接口(接MCU)的地址控制引脚,该引脚控制IIC地址的最低位。如果接GND,则MPU6050的IIC地址是:0X68;如果接VDD,则是0X69

使用特权

评论回复
19
kqh11a|  楼主 | 2023-6-29 18:33 | 只看该作者
注意:

        这里的地址是不包含数据传输的最低位的(最低位用来表示读写)!!!

        在STM32F4开发板上,AD0是接GND的,所以MPU6050的IIC地址是0X68(不含最低位)。

使用特权

评论回复
20
kqh11a|  楼主 | 2023-6-29 18:33 | 只看该作者
注:

        这里解释一下为什么MPU6050在有SCL和SDA两条IIC通讯信号线的基础之上,还要设置AUX_CL和AUX_DA引脚?

        我们本次使用的是MPU6050六轴传感器,其中包括三轴的加速度传感器和三轴的陀螺仪(角速度传感器)。在实际使用的过程中,可能还会使用到九轴MPU6050传感器,扩展三轴的磁场传感器。三轴的磁场传感器就需要外接芯片到MPU6050上,通过IIC和MPU6050进行通信,通讯过程中使用的引脚就是AUX_CL和AUX_DA引脚;

        MPU6050模块可以把从主机SDA/SCL接收的数据或命令通过AUX_CL和AUX_DA引脚转发到磁场传感器中。但是实际上这种功能比较鸡肋,控制麻烦且效率低,一般会直接把磁场传感器之类的IIC传感器直接与MPU6050挂载在同一条总线上(也就是都连接到SDA/SCL),使用主机直接控制。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

499

帖子

0

粉丝