本文全文转载自:arduino学习笔记37 – Arduino Uno + MPU6050首例整合性6轴演示实验(极客工坊论坛),本文对板式稍作了修改。

MPU6050的资料也可以在这里下载到,包含了Arduino的例子。下载GY521mpu-6050资料

Arduino.cc网站给出的详细资料地址:http://playground.arduino.cc/Main/MPU-6050

——————————————————————————

经过和lucsong 一起学习了几天时间,慢慢的有些了解MPU6050这个6轴的姿态模块,现在决定整理一下这个模块与Arduino的结合使用方法!(如有错误麻烦请指出,谢谢!) Mpu6050为全球首例整合3轴陀螺仪、3轴加速器、含9轴融合演 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±

应用 运动感测游戏 现实增强 电子稳像 (EIS: Electronic Image Stabilization) 光学稳像(OIS: Optical Image Stabilization) 行人导航器 “零触控”手势用户接口 姿势快捷方式

认证市场 智能型手机 平板装置设备 手持型游戏产品 游戏机 3D遥控器 可携式导航设备

特征 1、以数字输出6轴或9轴的旋转矩阵、四元数(quaternion)、欧拉角格式(Euler Angle forma)的融合演算数据。 2、具有131 LSBs/°/sec 敏感度与全格感测范围为±250、±500、±1000与±2000°/sec 的3轴角速度感测器(陀螺仪)。 3、可程式控制,且程式控制范围为±2g、±4g、±8g和±16g的3轴加速器。 4、移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。 5、数字运动处理(DMP: Digital Motion Processing)引擎可减少复杂的融合演算数据、感测器同步化、姿势感应等的负荷。 6、运动处理数据库支持Android、Linux与Windows 7、内建之运作时间偏差与磁力感测器校正演算技术,免除了客户须另外进行校正的需求。 8、以数位输出的温度传感器 9、以数位输入的同步引脚(Sync pin)支援视频电子影相稳定技术与GPS 10、可程式控制的中断(interrupt)支援姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、high-G中断、零动作感应、触击感应、摇动感应功能。 11、VDD供电电压为2.5V± 12、陀螺仪运作电流:5mA,陀螺仪待命电流:8A;加速器运作电流:8A,加速器省电模式电流: 8A@10Hz 13、高达400kHz快速模式的I2C,或最高至20MHz的SPI串行主机接口(serial host interface) 14、内建频率产生器在所有温度范围(full temperature range)仅有± 15、使用者亲自测试 16、10,000 g 碰撞容忍度 17、为可携式产品量身订作的最小最薄包装 (4x4x0.9mm QFN) 18、符合RoHS及环境标准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±

从MPU6050的技术文档里我们可以看得出来一些重要参数出来!如果比例数是多少,芯片的特性都是可以看得出来的!

下面可以看一下以下几个图片,这样你也许会了解一些!

第一张是MPU6000与MPU6050芯片的比较!

6050芯片图.jpg

第二张是MPU6000与MPU6050芯片的最小驱动电路的连接! 6050连线图.jpg 第三张是陀螺仪的设计规范表格!

比例数6050.jpg

第四张是加速度的设计规范表格!

ACC 比例数.jpg

如果您需要更多的知识,请翻看MPU6050的英文技术文档,里面已经写的很清楚了,还有中文文档,最近在准备进行翻译,稍后有中午的话也会给大家贴出!

下面是arduino与MPU6050的小模块的连线图:

硬件连接图.jpg

IMG_2149.jpg

A4接SDA     A5接SCL   vcc接3v3商家说可以接5v但是保守起见还是接了3.3v   GND接GND 不过mpu受温度的影响精度相差比较大!

注意:本模块采用的是IIC通信方式,所以我们只需要连接四跟线就可以完成电路的连接,简单方便!

1.关于6050 陀螺仪和加速度计 的角速度和角度计算。 A.陀螺仪角度计算,很多帖子中都提到了用的是积分,但是我这里还是重新讲下。 angle_n = angle_n-1 + (Gyro-C_Gyro)*R_Gyro; (1)angle_n  当前角度值,它的单位是度(°) (2)angle_n-1 上一次计算出的角度值 (3)Gyro 陀螺仪敏感轴偏转值,也就是当前敏感轴读数 (4)C_Gyro 陀螺仪零点偏移值,这个值的测量方法是:将陀螺仪敏感轴水平放置静止时的读数,我的零点偏移值是水平、垂直、倒置,分别取1024次,作平均值得出的,读数是-177.8865041,但是最后在程序实践中,调整到-99.90。或许还有别的办法,自己看着办吧。 (5)R_Gyro 是陀螺仪比例。飞思卡尔的参考中提到这个值是可以计算出来的,下面我会提供下载,大家自己去看看怎么算的,但是在其论坛和调试手册中都提到,这个比例值还是实验法测量出来的比较准确。 B.加速度仪 角度计算。 加速度仪的角度计算有很多方法,论坛里就有2中。但是都用到了三角函数,数学没学好,照抄了也不行。参考了飞思卡尔的计算方法后大概是这样的。 Angle_Z = (az-C_Z)*R_Z; (1)angle_z 加速度计敏感轴Z轴产生倾角计算出的角度,单位度(°) (2)az 是加速度仪 Z轴读数 (3)C_Z Z轴零点偏移量 测量方法和陀螺仪的一样。 (4)R_Z 加速度计Z轴比例 C.反复试验,MPU6050加速度计Z轴对应的是陀螺仪的X轴。不知道是不是我的有问题,还是就这么设计的? 接着就是提供一下测试代码给大家玩玩,方便测试!

 

以上这个代码是没有添加算法的,所以显示的是只是原始数据! 我们可以通过串口监视串口可以看到这样的结果!

MPU6050的水平原始数据.jpg 第二个测试代码是加了简简单单的算法之后的!其实很简单,看技术文档就可以了!

校正后的数据.jpg 以上的结果有些偏差,原因是没有经过校正的,这个只是给大家提供参考,希望对您有所帮助谢谢!

另外有什么问题,也可以去翻看lucsong的,关于MPU6050的调试帖子,里面还是有些重要的东西哦! 下面是MPU6050的因为文档,中文还在找时间翻译。 不经过同意,请勿转载,谢谢! 添加实验时的文件相关库: