查看: 1539|回复: 0
打印 上一主题 下一主题

读取MPU6050原始数据

[复制链接]
跳转到指定楼层
沙发
发表于 2015-10-7 14:43:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我学MPU6050的过程受到了论坛上的生来孤独的帮助。他的两篇MPU6050的帖子也很有代表性,静下心来慢慢看吧。其中他的一个很重要的思路就是一步一步,确保每步都对之后就很容易读出正确的数据。
MPU6050读取原始数据:
http://www.amobbs.com/forum.php? ... %E7%A0%81%2BMPU6050
DMP解析原始数据:
http://www.amobbs.com/thread-5576939-1-1.html
我们对MPU6050进行读写传感器数据就是对MPU6050的寄存器用I2C进行读写。
我们先来认识下MPU6050的硬件吧。
这是MPU6050模块的图片,注意是模块,中间那个才是MPU6050,只有MPU6050是不够的,还要有一些外围电路才行,这就跟52芯片跟最小系统的区别一样。
具体的电路我没有怎么了解。我只知道AD0决定MPU6050的地址,学过I2C的人都知道I2C通讯中从机是要有地址的,以区别多个从机。当AD0管脚接低电平的时候,从机地址是0x68。这里地址我当初还遇到了一个问题,可以看下我当初发的帖子看你会不会也错在这里:http://www.amobbs.com/thread-5580466-1-1.html
我们还要了解下MPU6050的寄存器,这个过程跟学习52单片机没有什么区别,就是配置寄存器,读取数据。
这个是一个51单片机获取数据后在LCD上显示出来的程序:http://yunpan.cn/Qi3Izk9NWTikv (提取码:5815)
记得要把液晶的那些管脚改下,这个是网上的例程,我也是拿过来,将管脚改下就可以用了。
这是一个用野火STM32板子的程序,接线:IIC_SDA.PB11  IIC_SCL.PB10:http://yunpan.cn/Qi3NW9wdZtn7t (提取码:1f0e)
还要两个文档,一个英文,一个中文是关于MPU6050整体的介绍。


在写之前我们先要读懂上面两个工程部分内容。怎么阅读呢?举个例子。
看下下面的函数,这个函数是初始化MPU6050。
//**************************************
//初始化MPU6050
//**************************************
void InitMPU6050()
{
        Single_WriteI2C(PWR_MGMT_1, 0x00);        //解除休眠状态
        Single_WriteI2C(SMPLRT_DIV, 0x07);
        Single_WriteI2C(CONFIG, 0x06);
        Single_WriteI2C(GYRO_CONFIG, 0x18);
        Single_WriteI2C(ACCEL_CONFIG, 0x01);
}
复制代码
下面这句为什么可以解除休眠状态呢?至于为什么要接触休眠状态就要看MPU6050的datasheet,其实也可以看别人的程序怎么写就可以。
Single_WriteI2C(PWR_MGMT_1, 0x00);        //解除休眠状态
复制代码
首先Single_WriteI2C();是给MPU6050寄存器写入数据的一个函数,需要有寄存器的地址,关于寄存器的描述,下面上次两个文档。一个是中文版,一个是英文版,中文版看得不是很明白,可能翻译得不好,英语可以的可以看下英文版本的。慢慢学着配合有道词典读下英文版的也好。

首先找到PWR_MGMT_1是某个寄存器的地址,其值如下
#define        PWR_MGMT_1                0x6B        //电源管理,典型值:0x00(正常启用)
复制代码
我们在文档中找到地址为0x6B的寄存器,看下说明,可以知道为什么发送0x00给这个寄存器。慢慢地这样子去读,配合MPU6050的寄存器文档。获取数据也是差不多的。这个过程自己慢慢去看MPU6050的datasheet就好了,方法已经介绍。
如果整个过程顺利的话,你可以用串口获得类似下面的数据。怎么检验这些数据是不是对的,我直接将手放在MPU6050上面,可以看到温度稍微会升高,而且我移动MPU6050的时候,数据会变化。初步证明数据是对的。
转载

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入中科因仑

本版积分规则

快速回复 返回顶部 返回列表