MPU6050的原始数据分析

个人经验来讲,如果对IIC总线协议很熟悉的情况下,获取6050的原始数据就不是什么太大的难题,毕竟再怎么复杂也只是一个传感器而已,就像你打电话给传感器,要它的数据,然后它返回给你,仅此而已。

首先,要了解6050是干什么的:

MPU-6000(6050)为全球首例整合性6轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时间轴之差的问题,减少了大量的封装空间。(来自百度百科)
简单说,就是该传感器能获取XYZ三个轴方向的角速度和加速度,包含6个16位的ADC来表示这些值,关于传感器的测量原理,可以简单想象类似下图的模式,是不很直观。

当然,用过AD转换的童鞋都知道,这个是会有精度问题的,6050也一样,而且受到的噪声影响更大,但本次不讨论这个问题,仅讨论怎么获取原始数据

话不多说,上代码

初始化代码实现

/*--------MPU6050地址宏定义---------*/
#define MPU6050_SLAVEAddr   0xd0    //IIC写6050地址
#define MPU6050_ACCAddr     0x3B    //MPU加速度读值地址
#define MPU6050_GYROAddr    0x43    //陀螺仪读值地址
#define MPU_Remove_Sleep    0x6B    //解除休眠地址
#define MPU_GYRO_Smple_DIV  0x19    //陀螺仪采样率寄存器1Khz
#define MPU_LOW_Pass        0x1a    //低通滤波器 带宽5K
#define MPU_ACC_Config      0x1c    //加速度传感器工作在2g模式
#define MPU_GYRO_Config     0x1b    //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
#define MPU_ACC_OUT_Addr    0x3b    //读取加速度寄存器
#define MPU_GYRO_OUT_Addr   0x43    //读取陀螺仪寄存器//MPU6050初始化
void mpu6050_Init(void)
{//进行IIC初始化IIC_Init();//进行一小段的延时 防止断电再上电的时候数据出错MPU_Dealy(1000);//解除休眠状态IIC_WriteData(MPU6050_SLAVEAddr,MPU_Remove_Sleep, 0x00);//陀螺仪采样率IIC_WriteData(MPU6050_SLAVEAddr,MPU_GYRO_Smple_DIV,0x07);//低通滤波器设置IIC_WriteData(MPU6050_SLAVEAddr,MPU_LOW_Pass,0x06);//配置加速度传感器工作在2g模式下IIC_WriteData(MPU6050_SLAVEAddr,MPU_ACC_Config,0x00);//配置陀螺仪量程和自检范围IIC_WriteData(MPU6050_SLAVEAddr,MPU_GYRO_Config, 0x18);
}   

关于寄存器的配置其实没什么好说的,看数据手册一点点进行即可,值得注意的是2g模式,这个是指6050的量程容易查到的是,这样的加速度输出量程在-16384——>+16384之间,所以计算出的加速度为(读取值)/16384(g)自然的,加速度也一样,不过,这不属于当前讨论的范围。
读取加速度和角速度的代码如下,其实6050还可以获取很多参数,这里不予赘述,查询手册即可。

void mpu6050Read_Acc(short *accData)                    //MPU6050读加速度
{u8 buf[6];//因为我们一次读取一个字节,而6050的ADC是16位的,所以先读取,后取或运算,顺序依次是XYZ轴IIC_ReadData(MPU6050_SLAVEAddr,MPU_ACC_OUT_Addr,buf,6);accData[0] = (buf[0] << 8) | buf[1];accData[1] = (buf[2] << 8) | buf[3];accData[2] = (buf[4] << 8) | buf[5];
}
void mpu6050Read_Gyro(short *gyroData)                  //MPU6050读陀螺仪
{u8 buf[6];IIC_ReadData(MPU6050_SLAVEAddr,MPU_GYRO_OUT_Addr,buf,6);gyroData[0] = (buf[0] << 8) | buf[1];gyroData[1] = (buf[2] << 8) | buf[3];gyroData[2] = (buf[4] << 8) | buf[5];
}//注意,因为6050有噪声信号存在,所以当6050平放时 读取到的加速度值约为16384即可视为程序正确
int main()
{short Accel[3];short Gyro[3];all_Init();while(1){mpu6050Read_Acc(Accel);printf("\r\n加速度:%8d%8d%8d\t",Accel[0],Accel[1],Accel[2]);mpu6050Read_Gyro(Gyro);printf("陀螺仪:%8d%8d%8d",Gyro[0],Gyro[1],Gyro[2]);delay_ms(1000);}
}

(解决几个问题 以下属于转载内容,侵权请提示删除)
1.MPU6050是什么?

MPU6050是一个6轴运动处理组件,包含了3轴加速度 和3轴陀螺仪。
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%变动的振荡器。

2.加速度传感器是干嘛用的?

总而言这,加速度传感器,其实是力传感器。用来检查上下左右前后哪几个面都受了多少力(包括重力),然后计算角度。

3.陀螺仪是干嘛用的?
简而言之,陀螺仪就是角速度检测仪。比如,一块板,以X轴为轴心,在一秒钟的时间转到了90度,那么它在X轴上的角速度就是 90度/秒 (DPS, 角速度单位,Degree Per Second的缩写°/S ,体现了转动的快慢)

4.MPU6050分辨率是多少?

3轴加速度 和3轴陀螺仪分别用了3个16位的ADC, 也就是说,加速度有3个16位ADC,其中每个轴使用了一个。也是说,每个轴输出的数据,是2^16 也就是 -32768 —- +32768。陀螺仪也是一样。

  1. 单位换算
    上面说的-32768 — +32768 ,那么这个数字到底代表了什么呢?比如陀螺仪 32768 到底是指角速度达到多少度/秒 ?
    这个其实是根据MPU6050设置的量程来决定的,量程不一样,32768代表的值就不一样。

MPU6050的量程设置,在 MPU6050::initialize() (MPU6050.cpp库)初始化函数中进行了设置:
setFullScaleGyroRange(MPU6050_GYRO_FS_250);
setFullScaleAccelRange(MPU6050_ACCEL_FS_2);
分别设置为,250度/秒 , 2g

按陀螺仪来说,MPU6050 有四个量程可选:
±250,±500,±1000,±2000 度/s
比方说,设置了是 ±250 , 那么-32768 —- +32768 就代表了 -250 —- +250 。此时它的LSB(拉傻B,最低有效位) 是 131 LSB/(度/s)

关于数据融合,最后得到欧拉角,是接下来的内容
简单说就是要,对原始数据先进行解算,滤波,基本就是这个过程。源码已经上传至CSDN资源(基于STM32的串口显示MPU6050原始数据)

转载于:https://www.cnblogs.com/chengxq/p/9174695.html

获取6050原始数据相关推荐

  1. Android 获取GNSS原始数据

    获取安卓设备的GNSS测量数据方法 2016 年 5 月,Google 在 I/O 开发者会议上宣布,将为 Android Nougat 操作系统中的应用程序提供原始 GNSS 观测数据. API参考 ...

  2. Spring Boot对图书MARC数据处理系列之一:91marc编码中心获取MARC原始数据

    定义 MARC是Machine Readable Catalog(ue)的缩写,意即"机器可读目录",即以代码形式和特定结构记录在计算机存储载体上的.用计算机识别与阅读的目录 图书 ...

  3. Xiaojie雷达之路---手把手教你从串口获取雷达原始数据(二)---环境搭建

    序言 Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章-利用串口获取毫米波雷达中的原始数据,本系列文章将从新建工程到最 ...

  4. Xiaojie雷达之路---手把手教你从串口获取雷达原始数据(三)---程序结构分析

    文章目录 序言 正文 序言 Hello,大家好,我是Xiaojie,欢迎大家能够和Xiaojie来一起学习毫米波雷达知识,Xiaojie准备连载一个系列的文章-利用串口获取毫米波雷达中的原始数据,本系 ...

  5. 安卓相机 高帧率_Android MediaCodec和摄像头:如何实现更高的帧速率从相机获取帧原始数据?...

    摄像机API有两个不同的参数用于控制帧速率: setPreviewFrameRate,它采用单帧速率值并且不推荐使用, setPreviewFpsRange采用一系列FPS值,是当前推荐的控制. 单F ...

  6. linux触摸屏信息,如何使用Linux获取触摸屏原始数据的坐标

    拥有3m的microtouch显示器.它通过USB连接到我的debian系统,并重新识别为人机界面(hid).我正在尝试访问和推送实时信息-如果被触摸,我想知道(x,y)的位置,并将其通过netcat ...

  7. Silverlight实用窍门系列:66.Silverlight的数据模板DataTemplate(二)获取数据模板控件...

    在Silverlight中我们使用了数据模板,在很多时候也需要获取到数据模板上的控件,并且进行改变.本文使用的实例数据源和上节相同,如需了解请下载源码查看. 当然在这里我们可以分为获取数据模板原始控件 ...

  8. ROS下获取kinectv2相机的仿照TUM数据集格式的彩色图和深度图

    准备工作: 1. ubuntu16.04上安装iai-kinect2, 2. 运行roslaunch kinect2_bridge kinect2_bridge.launch, 3. 运行 rosru ...

  9. 用AkShare库获取A股股票数据—获取实时A股数据

    前面给大家介绍了如何用Tushare获取A股股票数据,但是现在使用Tushare会受到积分限制,没有获得积分使用起来也麻烦.今天再给大家介绍一个免费的开源数据库AKShare. AKShare 是基于 ...

  10. ESI文章详细信息获取

      每次ESI数据更新之后,有些文章是热点文章,有些文章是研究前沿,就如下图中的红框标示出来的一样.但这部分数据,主要是研究前沿的文章,在ESI导出的数据中看不到.所以需要想办法获取这部分数据. 获取 ...

最新文章

  1. Amber计算MM能量
  2. 99 位职业设计师 99 个设计谏言
  3. Netty中集成Protobuf实现Java对象数据传递
  4. 马云:我不懂技术但欣赏技术 达摩院必须超越微软 - 20171011
  5. 复现强网杯python is the best language 2
  6. ajax 传递参数中文乱码解决办法
  7. 基于 java springboot+mybatis二手物品网站系统设计和实现
  8. setTimeout还是setInterval?
  9. mybatisplus 使用案例
  10. 外参矩阵转四元数,左右手坐标系转化1
  11. 【离散数学】图论 第七章(6) 图的结点着色和Welch Powell法、平面图着色、希伍德五色定理、四色定理
  12. 路由交换技术(一)---- 网络基础概述
  13. Word:快速插入水平分隔线(转)
  14. 【学习摘抄】渗透性测试方法和步骤
  15. esp32拍照传输到手机android,esp32-cam拍照上传云平台教程
  16. cmd把一个较大的文件分割_将文件分割成较小的文件
  17. 【持续更新】收集机器学习/深度学习比赛网站
  18. [PHP问题]Cannot redeclare xxxxxx() (previously declared in C:\WWW\xxx.xxx:xxx)
  19. OLAP实践 —— OLAP基本概念理解总计小记
  20. Div与Span标签详解

热门文章

  1. 提交百度快速收录真的能达到秒收录吗
  2. umount 无法成功
  3. 1946电子计算机诞生什么影响,自1946年世界上第一台电子计算机诞生至今.doc
  4. Cadence制作flash焊盘时找不到
  5. python编程 个人所得税计算器
  6. UNITY中帧动画的制作
  7. 全球游戏人热评CGDC 09 盛赞中国网游产业
  8. 看完这篇,轻松解决FastReport合并单元格!
  9. 用linux设计应用程序,ARM设计的uClinux及其应用
  10. Java聊天室界面代码