19.1 MPU6050简介
19.1.1 芯片概述
MPU6050是InvenSense公司推出的一款6轴运动处理芯片,内置3轴陀螺仪及3轴速度传感器,内置两组I2C接口,其中一组用于通信,另一组则用于连接外部磁力传感器,采用自带的数字运动处理器DMP(Digital Motion Processor),通过主I2C接口,直接读取完整的9轴融合演算数据。MPU6050检测轴及其检测方向如下图所示。
19.1.2 引脚介绍
MPU6050采用QFN-24封装,端口描述如下表所示。
引脚编号 | 引脚名称 | 功能 |
---|---|---|
1 | CLKIN | 外部参考时钟输入,如果不使用直接接地 |
2 | NC | 空引脚 |
3 | NC | 空引脚 |
4 | NC | 空引脚 |
5 | NC | 空引脚 |
6 | AUX_DA | 从I2C接口数据口,用于连接磁传感器的SDA组成九轴传感器 |
7 | AUX_CL | 从I2C接口时钟口,用于连接磁传感器的SCL组成九轴传感器 |
8 | VLOGIC | IO口逻辑电平,最低可以设置1.8V,默认连接VDD |
9 | AD0 | I2C接口地址控制端,端口为高电平默认地址0x69,端口为低电平默认地址0x68 |
10 | REGOUT | 外接稳压器的滤波电容 |
11 | FSYNC | 帧同步数字输入,如果不使用直接接GND |
12 | INT | 中断信号输出(可以配置为开漏输出) |
13 | VDD | 电源正极,供电范围0.5V~6VDC |
14 | NC | 空引脚 |
15 | NC | 空引脚 |
16 | NC | 空引脚 |
17 | NC | 空引脚 |
18 | GND | 电源地 |
19 | RESV | 保留 |
20 | CPOUT | 外部电荷泵电容 |
21 | RESV | 保留 |
22 | RESV | 保留 |
23 | SCL | 主I2C接口时钟 |
24 | SDA | 主I2C接口数据 |
19.1.3 硬件电路
由于MPU6050内部是可以自动计算X,Y和Z轴的方向及加速度的,使用者可以不考虑实际的数据转换问题,但是为了详细的了解MPU6050的计算过程,使用者最好还是应该具备了解原始数据如何转换为我们需要的角度与加速度值。
19.2 姿态解算与融合算法基础概念
19.2.1 方向矩阵
设有一个三位直角坐标系Oxyz,如下图所示。
19.2.2 方向余弦矩阵
19.2.3 欧拉角
欧拉角是用于确定定点转动缸体位置的3个1组的独立角参量,由章动角θ,旋转角(进动角)ψ和自转角φ组成,欧拉角有多种取法,下面是比较常见的一种。
如上图所示,由定点O做出固定坐标系Oxyz以及固定连在刚体的坐标系Ox’y’z’,以轴Oz和Oz’为基本轴。其垂直面Oxy和Ox’y’为基本平面,由轴Oz量到Oz’的角度θ称为章动角,平面zOz’的垂线ON称为节线,同时ON又是基本平面Ox’y’和Oxy的交线,在右手坐标系中,由ON的正端看,角θ应按照逆时针方向计算,由固定轴Ox到节线ON的角度ψ称为进动角,也叫作旋转角,由节线ON到动轴Ox’的角度φ称为自转角,有Oz和Oz’正端看,进动角ψ与自转角φ也应该按照逆时针方向计算。
从上面的描述过程可以发现,欧拉角实际是可以分解成三步来计算的:
第1步:绕z轴旋转α,使得x轴与N轴重合
第2步:绕x轴旋转β,使z轴与旋转后的z轴重合
第3步:绕z轴旋转y,是坐标系与旋转后的完全重合
根据上面的三个步骤,我们来通过以下实例来说明欧拉角与方向余弦矩阵的转换过程。
19.2.4 四元数与欧拉角的转换
四元数是一个简单的超复数,是由实数加上三个虚数单位i,j,k组成,每个四元数都是1,i,j,k的线性组合,四元数是爱尔兰数学家哈密顿在1843年发明的数学概念,四元数的乘法不符合交换律。
四元数姿态表达式是一个四参数的表达式,它的基本思路是一个坐标系转换到另一个坐标系可以通过绕一个定义在参考系中的矢量μ的单次转动来实现,四元数用符号q表示,是一个具有4个元素的矢量,这些元素是该矢量方向和转动大小的函数。定义四元数如下所示。
这里直接给出结论,不作证明。会用即可。四元数与欧拉角的转换公式为:
用方向余弦表示欧拉角,这里欧拉角不允许等于90度。
用四元数表示欧拉角
在姿态解算中常用的算法由欧拉角法,方向余弦法和四元数法,欧拉角在求解姿态时存在奇点,无法用于全姿态结算,方向余弦没有奇点,但是计算量大,无法满足实时性要求,四元数法,计算量小,无奇点可以满足飞行器运动过程中姿态的实时解算,姿态解算的原理是对于一个确定的向量,用不同的坐标系表示时,他们所表示的大小和方向一定是相同的。但是由于这两个坐标系的旋转矩阵存在误差,那么当一个向量经过一个有误差存在的旋转矩阵后,在另一个坐标系中肯定和理论值是有偏差的,我们通过这个偏差来修正这个旋转矩阵。这个旋转矩阵的元素是四元数,我们修正的就是四元数,以此来修正姿态。
19.3 实验例程
实验内容:利用MPU6050采集到数据获取欧拉角显示在TFTLCD上。
19.3.1 MPU6050内部相关寄存器
(1) 电源管理寄存器1 (地址0x6B)
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
DEVICE_RST | SLEEP | CYCLE | - | TEMP_DIS | CLKSEL[2:0] |
Bit 7:软件复位
0:不复位MPU6050
1:复位MPU6050
Bit 6:休眠模式
0:正常工作模式
1:睡眠模式
Bit 5:循环模式
0:默认状态
1:睡眠模式与唤醒模式交替运行
Bit 3:温度传感器使能
0:使能温度传感器
1:禁用温度传感器
Bit 2~Bit 0:选择系统时钟源
000:内部8M RC时钟源
001:PLL,使用X轴陀螺作为参考
010:PLL,使用Y轴陀螺作为参考
011:PLL,使用Z轴陀螺作为参考
100:PLL,使用外部32.768kHz作为参考
101:PLL,使用外部19.2MHz作为参考
110:保留
111:关闭时钟,保持时序产生电路复位状态