陀螺仪加速度计 JY61(MPU6050) 原理简述及缺陷分析

——

该模块工作原理较为复杂,且涉及到数字信号处理,本文只是简单的描述其工作原理,并捎带上一些基础理论。

JY61(MPU6050)简介

MPU6050由四部分组成:加速度计、陀螺仪、DMP、温度传感器(检测温度,通过算法优化来减少温漂)。

JY61和MPU6050为从属关系。六轴模块jy61自带稳压电路,包含陀螺仪加速度计MPU6050和STM8单片机,STM8通过IIC读取 MPU6050 中DMP的测量数据然后通过串口输出,免去了用户自己去开发 MPU6050 复杂的 IIC 协议;同时保留了 MPU6050 的 IIC 接口,以满足用户访问底层测量数据(加速度、角速度)的需求。
在大部分情况下二者名称可以混用,因为通常MPU6050不会单独进行应用。实际上使用MPU6050作为搜索关键词能找到的资料更多。

jy61通过串口与外部单片机进行通信。
在这里插入图片描述

轴向说明

在这里插入图片描述
如上图所示,模块的轴向在上图标示出来,向上为 X 轴,向左为 Y 轴,垂直模块向外为 Z 轴。
旋转的方向按右手法则定义,即右手大拇指指向轴向,四指弯曲的方向即为绕该轴旋转的方向
X 轴角度(滚转角 Roll)即为绕 X 轴旋转方向的角度,Y 轴角度(俯仰角 Pitch)即为绕 Y 轴旋转方向的角度,Z 轴角度(偏航角 Yaw)即为绕 Z 轴旋转方向的角度, 三者合称姿态角/欧拉角(Euler angles)。

对于导航和控制问题,姿态角等同于欧拉角,这是因为旋转顺序是按ZYX提供坐标,二者实际有所不同
详情:https://zhuanlan.zhihu.com/p/28514084 欧拉角与姿态角,旋转矩阵和四元数的一些思考

在这里插入图片描述

姿态融合

MPU6050的正式名称为六轴运动姿态陀螺仪传感器,可测量三维加速度,三维角速度和三维角度,之所以称其为“六轴”,是因为MPU6050是一个6轴运动处理组件,包含了3轴加速度计和3轴陀螺仪,可分别输出三轴加速度和三轴角速度,然后再根据以上原始数据在DMP(Digital Motion Processor,数字运动处理器)中使用算法进行姿态融合解算出三轴的角度数据。
常用的姿态融合算法有四元数法 、一阶互补算法和卡尔曼滤波算法,其中第三者最为常用。

卡尔曼滤波算法简述:对于姿态传感器模块来说,角度解算来源与两种类型的数据,第一种是通过加速度和磁场数据进行运动学解算可以求出三轴的姿态角,优点是没有长期漂移和误差累计,但缺点是精度差,而且仅在静态时能保证精度。第二种时通过陀螺仪测量出来的角速度进行积分运算,可以得出三轴姿态角,优点是精度高,可以进行动态测量,对加速度不敏感,缺点是有累积误差和漂移,时间越长累积误差越大。卡尔曼滤波就是一种数据融合算法,结合加速度计和陀螺仪的信息,共同来解算姿态,集合二者的优点获得在动态环境下可以准确测量姿态的方法[^1]。

JY61工作的总体过程为:将模块的姿态用四元素表示,作为系统的状态量,模块的姿态运动学方程作为滤波的状态转移方程,加速度信息作为滤波的观察量信息,然后利用卡尔曼滤波的计算方法迭代计算更新[^2]。

由于没有参考量,所以无法求出当前的Yaw角的绝对角度(另外两个角可得出),因此Z轴角度通过角速度积分运算得来,会有累积误差。如果必须要获得绝对的Yaw角,那么应当选用MPU9250(九轴,jy901内置),它相比较前者自带一个三轴电子罗盘,从而根据地球磁场方向计算Z轴角度,避免漂移现象。(当 901 使用环境有磁场干扰时,可以在上位机中配置算法转换,尝试用 6 轴算法检测角度)

  1. https://zhuanlan.zhihu.com/p/77494866 维特智能JY61姿态陀螺仪模块的使用测评
  2. https://blog.csdn.net/a752109494/article/details/52387786 关于MPU6050陀螺仪模块的测量误差分析

数据校准

由于MPU6050输出的各项数据有偏移现象(零点漂移,静态时),且具有较大噪音,因此需要先对数据偏移进行矫正,再进行滤波

数据偏移处理
传感器在出厂时都会有不同程度的零偏误差,需要手动进行校准后,测量才会准确。
角速度:可通过统计求平均的方法来获得。
加速度:通常只进行单独校准读数偏移。
以上二者皆可通过上位机程序进行校正,详询厂商说明书。

数据滤波
即卡尔曼滤波算法。一个卡尔曼滤波器接受一个轴上的角度值、角速度值以及时间增量,估计出一个消除噪音的角度值。
这一过程实际上被包含在姿态融合过程中

https://zhuanlan.zhihu.com/p/20082486 Arduino教程:MPU6050的数据获取、分析与处理

提高输出精度的方法

jy61在日常实验应用中会时而表现出较大的角度输出误差,鉴于硬件(陀螺仪和加速度计)本身精度尚可,推测为:

  1. 姿态融合算法具有缺陷。由于对算法的更新需要极强的数学思维,对于学生来说,对算法更新的难度过大。
  2. Z轴角度的积分累计误差。此为硬件缺陷,可通过升级硬件进行修改。

综上,选用精度更高的传感器如jy901等从成本上来看显得更为划算。

详情可参考:
MPU6050 /jy61帮助文档 二者内容相似
MPU9250 /jy901帮助文档 二者内容相似

使用芯片:MPU-6050MPU-6050数据手册) 供电电源:3-5v(内部低压差稳压) 通信方式:标准IIC通信协议 芯片内置16bit AD转换器,16位数据输出 陀螺仪范围:±250 500 1000 2000 °/s 加速度范围:±2±4±8±16g MPU-6000(MPU-6000数据手册)为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了大量的包装空间。MPU-6000整合了3轴陀螺仪、3轴加速器,并含可藉由第二个I2C端口连接其他厂牌之加速器、磁力传感器、或其他传感器的数位运动处理(DMP: Digital Motion Processor)硬件加速引擎,由主要I2C端口以单一数据流的形式,向应用端输出完整的9轴融合演算技术 InvenSense的运动处理资料库,可处理运动感测的复杂数据,降低了运动处理运算对操作系统的负荷,并为应用开发提供架构化的API。 MPU-6000的角速度全格感测范围为±250、±500、±1000与±2000°/sec (dps),可准确追緃快速与慢速动作,并且,用户可程式控制的加速器全格感测范围为±2g、±4g±8g与±16g。产品传输可透过最高至400kHz的I2C或最高达20MHz的SPI。 MPU-6000可在不同电压下工作,VDD供电电压介为2.5V±5%、3.0V±5%或3.3V±5%,逻辑接口VVDIO供电为1.8V± 5%。MPU-6000的包装尺寸4x4x0.9mm(QFN),在业界是革命性的尺寸。其他的特征包含内建的温度感测器、包含在运作环境中仅有±1%变动的振荡器。 应用运动感测游戏 现实增强 电子稳像 (EIS: Electronic Image Stabilization) 光学稳像(OIS: Optical Image Stabilization) 行人导航器 “零触控”手势用户接口 姿势快捷方式 认证 市场智能型手机 平板装置设备 手持型游戏产品 3D遥控器 可携式导航设备 特征以数字输出6轴或9轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据。 具有131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)。 可程式控制,且程式控制范围为±2g、±4g、±8g和±16g的3轴加速器。 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。 数字运动处理(DMP: Digital Motion Processing)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等的负荷。 运动处理数据库支持Android、Linux与Windows 内建之运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。 以数位输出的温度传感器 以数位输入的同步引脚(Sync pin)支援视频电子影相稳定技术与GPS 可程式控制的中断(interrupt)支援姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能。 VDD供电电压为2.5V±5%、3.0V±5%、3.3V±5%;VDDIO为1.8V± 5% 陀螺仪运作电流:5mA,陀螺仪待命电流:5A;加速器运作电流:350A,加速器省电模式电流: 20A@10Hz 高达400kHz快速模式的I2C,或最高至20MHz的SPI串行主机接口(serial host interface) 内建频率产生器在所有温度范围(full temperature range)仅有±1%频率变化。 使用者亲自测试 10,000 g 碰撞容忍度 为可携式产品量身订作的最小最薄包装 (4x4x0.9mm QFN)
根据引用\[1\]和引用\[2\]的信息,JY901模块可以通过IIC接口与Arduino UNO开发板连接。IIC是一种串行通信协议,可以实现数据的双向传输。具体连接方式如下:将JY901模块的SCL引脚连接到Arduino UNO的SCL引脚,将SDA引脚连接到Arduino UNO的SDA引脚,将GND引脚连接到Arduino UNO的GND引脚,将VCC引脚连接到Arduino UNO的5V引脚。这样就可以通过IIC接口读取JY901模块的数据了。 请注意,具体的IIC读取代码需要根据Arduino的编程语言进行编写,可以参考JY901模块的使用说明和开发手册来了解如何读取模块的数据。 #### 引用[.reference_title] - *1* [Arduino UNO 的IIC去读取JY901的数据](https://blog.csdn.net/weixin_42138376/article/details/112013515)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STM32实现六轴姿态测量陀螺仪模块JY61P(标准库与HAL库实现)](https://blog.csdn.net/XiaoCaiDaYong/article/details/127771234)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值