最近刚好在学习MPU6050传感器,想从原理到应用整个过程进行总结,查阅了无数资料,也借鉴了很多博主的知识内容,我会用最通俗易懂的语句,从原理到模块初始化再到数据处理,一一进行解释,通过耐心的学习,我相信你们会对模块有跟加全面的了解。我都懂了,更何况你们呢?
基于Arduino平台的开发,结合卡尔曼滤波,先给你们看看效果!有需要代码的小伙伴评论区留言哦,连上就能用!文件下载地址:(6条消息) 陀螺仪加速度计MPU6050模块加上卡尔曼滤波果然就不一样,连上就能用!-硬件开发文档类资源-CSDN文库
陀螺仪加速度计MPU6050模块应用!加上卡尔曼滤波果然就不一样。
目录
1 简介
2 原理说明
2.1 MEMS介紹
2.2 MEMS陀螺仪
2.3 MEMS加速度计
3 特性说明
3.1 电气特性
3.2陀螺仪特性
3.3 加速度計特性
4 使用说明
4.1 模块初始化
4.2 数据处理
4.2.1 数据格式
4.2.2 加速度计
4.2.3 角速度计
4.2.4 傾斜角计算
4.3 校正与滤波
总结
下期预告!
MPU6050是集成六轴运动处理模块,即三轴MEMS陀螺仪传感器和三轴MEMS加速度传感器,相较于多组件方案,集成模块可以免除各个组件时间轴之差的问题,还能大大减小封装的空间。 模块一般在智能手机、手持游戏产品、导航设备、电子稳像等领域发挥重要作用。是集成六轴运动处理模块,即三轴MEMS陀螺仪传感器和三轴MEMS加速度传感器,相较于多组件方案,集成模块可以免除各个组件时间轴之差的问题,还能大大减小封装的空间。 模块一般在智能手机、手持游戏产品、导航设备、电子稳像等领域发挥重要作用。
MEMS是微机电系统(Micro Electro Mechanical System)的英文缩写。 它是指可批量制作的,集微型机构、微型传感器、微型执行器以及信号处理和控制电路、通信和电源于一体的系统。 比较成熟的MEMS传感器有三种:加速度计、压力传感器和陀螺仪。
MEMS陀螺仪与传统的陀螺仪原理不同。 传统陀螺仪是一个不停转动的物体即转子,由于惯性其旋转轴的指向不会随着承载它的支架旋转而改变方向,如图2-1所示,三轴即横滚轴、俯仰轴和航向轴,通俗点说也就是X Y Z三轴,当三轴发生旋转时,旋转轴是不会随之变化的。 显然,将这样一个不停旋转的装置用微机技术在硅片衬底上加工是非常难的事情。
图2-1
为此,MEMS陀螺仪基于陀螺仪的特性利用科里奥利力来实现。 科里奥利力即科氏力,它是对旋转体系中进行直线运动的质点由于惯性相对于旋转体系产生的直线运动的偏移的一种描述。
我们以单轴偏航陀螺仪为例,讨论最简单的工作原理如图2-2。 两个正在运动的质点向相反的方向连续运动,如蓝色箭头,只要从外部施加一个角速度,就会产生一个与质点运动方向垂直的科氏力,如黄色箭头。 产生的科氏力会使质点在原来的运动方向上发生位移,位移的大小与角速度的大小成正比。 此位移会引起响应电容的变化,再利用专用的电路即可检测。 同理我们可以得到三轴的工作原理。
图2-2
技术成熟的MEMS加速度计分为三种:压电式、容感式和热感式。
1、设定时钟源。 可选的时钟源有:内部8MHz晶振、基于陀螺仪的时钟和外部时钟源。 默认为内部晶振,强烈建议选择其中一个陀螺仪(或者外部时钟源)作为时钟源,以提高稳定性。
2、陀螺仪配置。 对陀螺仪的量程进行设定。
3、加速度计配置。对加速度计的量程进行设定。
我们感兴趣的数据位于0X3B到0X48这14个字节的寄存器当中。 这些数据会被动态更新,下面是相关的寄存器地址与数据名称。 注意每个数据都是2个字节,高位在前低位在后。
关于模块的坐标系定义如下图4-1所示,将模块面朝自己,此时水平方向即为X轴,竖直方向为Y轴,指向自己的放向为Z轴。
图4-1
加速度计的三轴分量ACC_X、ACC_Y和ACC_Z均为16位有符号整数,其均以重力加速度g的倍数为单位,有四个可选量程:±2g、±4g、±8g、±16g。 此时以ACC_X为例,量程选择±2g,则实际加速度转换参考下面公式:
显然,量程越低精度越好,量程越大表示的范围也越大,精度也随之变低,这需要根据具体的应用来设定。我们可以把加速度计想象为一个正方体盒子里放了一个球如图4-2所示,假象盒子没有任何受力时(包括重力),小球将处于正中心的位置,三轴的加速度均为0。
图4-2
如果此时给盒子施加水平向左的力,盒子会获得向左的加速度,此时盒内的小球由于惯性会向右侧偏移如图4-3所示。
图4-3
为了保证数据的物理意义,加速度计是以小球在三轴坐标值的相反数为加速度值,即当小球的位置向轴的正方向偏移,该轴的加速度读数就位负值,同理当小球的位置向轴的负方向偏移,该轴的加速度读数就位正值。
绕X、Y和Z三个座标轴旋转的角速度分量GYR_X、GYR_Y和GYR_Z均为16位有符号整数,其均以"度/秒"为单位,有四个可选量程:±250, ±500, ±1000, ±2000°/s。同样我们以GYR_X為例,量程選擇±2000°/s,则实际角速度转换参考下面公式:
我们可以根据加速度计的数据推算出倾斜角。 我们以其中一个面为例,若只考虑 X 轴和 Z 轴(此时Y 轴垂直于屏幕),将重力加速度作在 X 轴上分解,传感器 X 坐标正方向与重力加速度 g 的夹角为 ∠b,如图4-4所示:
图4-4
从图中可以看到,重力加速度g(绿色箭头)分解为X轴上的 gx(黑色箭头)和Z轴上的gz(紫色箭头)。
则传感器X轴与自然坐标系X轴的夹角为90°—∠b
同理:
Y 轴则始终垂直于重力方向,夹角为 90°。
校正是相对比较简单的工作,我们只需在已知数据的场景下测试数据的offset,多次测量取平均值,之后的每一次读书减去offset即可。 例如角速度GYR_X的offset,当模块处于静止状态时,GYR_X读书理论上应该为0,但它往往会存在偏移量offset,我们10ms读取一次得到以下10个值:
-158.4, -172.9, -134.2, -155.1, -131.2
-146.8, -173.1, -188.6, -142.7, -179.5
10个数取平均之后得到offset为-158.25,之后,我们每一次读书都减去offset即可。
关于滤波,夹杂了大量噪音的资料,卡尔曼滤波器的效果无疑是最好的,相关的原理这边不展开讲解,如感兴趣可以自行查阅资料。
这里我们可以直接使用相关的库函数完成。 在我们的模型中,一个卡尔曼滤波器接受一个轴上的角度值、角速度值以及时间增量,估计出一个消除噪音的角度值。 跟据当前的角度值和上一轮估计的角度值,以及这两轮估计的间隔时间,我们还可以反推出消除噪音的角速度。
本文对MPU6050进行了全方位的解释,包括工作原理、电气特性以及如何使用。相信通过耐心的学习,这篇文章可以给你不少的启发。