MPU6050
教程
1.1 M P U6050
简介
如果½想玩四½,想搞什么空中鼠标,平衡½等待,那么
MPU6050
真的
是太强大了,½做很多东西。
玩
MPU6050
的步骤:
1.学习 I2C,I2C
就是
MPU6050
传送数据到单片机的一种协议,类似于
USB,
½然
USB
还是比较有难度的。
2.了解 MPU6050
相关寄存器,有中文版本的,一边学一边看例程就可以获取数
据了。
3.把获取的数据进行各种处理。
1.2 I I C
简介
IIC
可以去看下我们野火相关的教程,在这里只是简单地介绍下,先看下我
们的书或者教程,从
EEPROM
里面写入和读取数据,因为
EEPROM
写入和读取
数据也是根据
I2C
协议来的。I2C 有分½件和硬件,½件就½通过对
I2C
的时
钟线和数据线,可½½不知道时钟线和数据线,那还是先去学
I2C
的基础教
程。
½件模拟
I2C
就是根据下面的图然后再适½的时候给时钟线和数据线高½,具
½可以看
I2C
的协议见图
1- 1。
图
1- 1 IIC
起始字节时序图
第
错误!未定义书签。
页 共
10
页
这部分学习的诀窍就是:先写下
I2C
通讯的一个环节就½了,比如起始字节,
其他的也是大同小异,直接上½找例程就½了,想要用½件模拟出全部的时序
½然也可以。
还有一个方式可以用
I2C
读写数据,就是硬件
I2C,硬件 I2C
就是单片机内
部的电路,可以将
I2C
的时序用硬件电路搞出来,这样子½读写数据就方便很
多了。STM32 硬件
I2C
可以去看我们野火的教程。
1.3
读取
M P U6050
原始数据
我们先来认识下
MPU6050
的硬件,这是
MPU6050
模块的图片,注意是模
块,中间那个才是
MPU6050,只有 MPU6050
是不够的,还要有一些外围电路
才行,这就跟
51
芯片跟最小系统的区别一样。
图
1- 2 MPU6050
模块正面
第
错误!未定义书签。
页 共
10
页
图
1- 3 MPU6050
模块背面
管脚名称
VCC
GND
SCL
SDA
XCL
XDA
AD0
INT
说明
3.3-5V(内部有稳压芯片)
地线
MPU6050
½为从机时
IIC
时钟线
MPU6050
½为从机时
IIC
数据线
MPU6050
½为主机时
IIC
时钟线
MPU6050
½为主机时
IIC
数据线
地址管脚,该管脚决定了
IIC
地址的最½一½
中断引脚
这里重点讲解
AD0
的½用,I2C 通讯中从机是要有地址的,以区别多个从
机。½
AD0
管脚接½电平的时候,从机地址是
0xD0。从 MPU6050
的寄存器中
我们可以得到答案,MPU6050 ½为一个
IIC
从机设备的时候,有
8
½地址,高
7
½的地址是固定的,就是
WHO AM I
寄存器的默认——0x68,最½的一½是
由
AD0
的连线决定的。
第
错误!未定义书签。
页 共
10
页
图
1- 4 0x68
和
0xD0
的二进制
图
1- 5 WHO AM I
寄存器
读取原始数据这个过程中一个很重要的思路就是一步一步,确保每步½对
之后就很容易读出正确的数据。我们对
MPU6050
进行读写传感器数据就是对
MPU6050
的寄存器用
I2C
进行读写。我们还要了解下
MPU6050
的寄存器,这
个过程跟学习
52
单片机没有什么区别,就是配½寄存器,读取数据。
先来看下½件
IIC
读取
MPU6050
例程里面的初始化
MPU6050
的½数,
1
void
MPU6050_Init(void)
2
{
3
int
i=0,j=0;
4
//在初始化之前要延时一段时间,若没有延时,则断电后再上电数据可½会出错
6
for
(i=0; i<1000; i++) {
7
for
(j=0; j<1000; j++) {
8
;
9
}
10
}
11
PMU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00);
12
//解除休眠状态
13
PMU6050_WriteReg(MPU6050_RA_SMPLRT_DIV , 0x07);
14
//陀螺仪采样率,1KHz
15
PMU6050_WriteReg(MPU6050_RA_CONFIG , 0x06);
16
//½通滤波器的设½,截止频率是 1K,带½是 5K
17
18
PMU6050_WriteReg(MPU6050_RA_ACCEL_CONFIG , 0x00);
19
//配½加速度传感器工½在 2G
模式,不自检
20
21
PMU6050_WriteReg(MPU6050_RA_GYRO_CONFIG, 0x18);
22
//陀螺仪自检及测量范围,典型值:0x1
23
8(不自检,2000deg/s)
24 }
下面这句为什么可以解除休眠状态呢?至于为什么要接触休眠状态就要看
MPU6050
的
datasheet。
1
PMU6050_WriteReg(MPU6050_RA_PWR_MGMT_1, 0x00);
第
错误!未定义书签。
页 共
10
页
2
//解除休眠状态
首先
Single_WriteI2C();是给 MPU6050
寄存器写入数据的一个½数,需要
有寄存器的地址,关于寄存器的描述,教程的文件夹有两个文档。一个是中文
版,一个是英文版,中文版看得不是很明½,可½翻译得不½,英语可以的可
以看下英文版本的。
首先找到
PWR_MGMT_1
是某个寄存器的地址,其值如下
1 #define MPU6050_RA_PWR_MGMT_1
0x6B
我们在文档中找到地址为
0x6B
的寄存器,看下说明,可以知道为什么发
送
0x00
给这个寄存器。慢慢地这样子去读,配合
MPU6050
的寄存器文档。获
取数据也是差不多的。这个过程自己慢慢去看
MPU6050
的
datasheet
就½了,
方法已经介绍。
如果整个过程顺利的话,½可以用串口获得类似下面的数据。怎么检验这
些数据是不是对的,我直接将手放在
MPU6050
上面,可以看到温度稍微会升
高,而且我移动
MPU6050
的时候,数据会变化。初步证明数据是对的。
图
1- 6
串口数据读取原始数据
第
错误!未定义书签。
页 共
10
页
评论