【FireFly试用体验】011-MPU6050实验

  • cztqwan
  • LV5工程师
  • |      2015-10-10 20:21:31
  • 浏览量 1884
  • 回复:0

一、简介


MPU6050InvenSense公司推出的全球首款整合性 轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了安装空间。MPU6050内部整合了3轴陀螺仪和3轴加速度传感器,并且含有一个第二IIC接口,可用于连接外部磁力传感器。该传感器广泛用于四轴、平衡车和空中鼠标等设计,具有非常广泛的应用范围。

这一讲将介绍FireBLEIIC如何操作以及MPU6050的驱动过程。


二、硬件电路



从电路图可以看到mpu6050FireBLE的连接主要是三个引脚,P23P24P31P23P24通过IICmpu6050通信,P31连接到mpu6050INT引脚,当mpu6050采集完一次数据后将会在该引脚输出一个低电平,所以可以根据中断判断mpu6050是否采集完一次数据。


三、软件设计


还是复制上一讲的工程,新建mpu6050.hmpu6050.c文件:



mpu6050.h中主要是寄存器的地址的宏定义以及函数声明。其中,有一个地址比较重要,就是mpu6050IIC地址,FireBLE通过IICmou6050通信时需要知道此地址,由于FireBLE中的mpu6050AD0口实际是接3.3V的,所以改地址为0x69,这在mpu6050数据手册中可以查到。



因为用到了IO口中断,所以需要添加IO口中断初始化函数:



然后需要在中断回调函数中设置标记,中断回调函数在key.c文件中,在中断回调函数判断是否是mpu6050产生了中断信号,如果是则标记采样完成,函数修改如下:



接下来在mpu6050.c文件中添加IIC初始化函数,由于FireBLE通过IICmou6050通信,所以需要用到IIC总线。



该函数中,首先设置引脚的复用功能,然后初始化IIC,设置波特率为400KHzFireBLEIIC最大可配置为400KHz,然后需要在内存中开辟104字节的空间给IIC

然后需要实现IIC的读操作和写操作函数,这里先实现写一个字节和读一个字节的函数:



这里主要是封装的FireBLEIIC底层驱动函数,使用了I2C_BYTE_WRITEI2C_BYTE_READ底层API,实现了读写操作,MPU_ADDRmpu6050IIC地址。这里可能有任觉得奇怪,为什么MPU_Write_Byte函数要返回一个0,这是因为这里的mpu6050驱动是移植来的,原来的IIC写函数是要返回一个值判断是不是写成功的,在FireBLE并没有提供这样的返回值,所以就直接返回一个0,使得移植程序简便一些。

实现了读写一个字节是不够的,还要实现读写多个字节的函数:



实际上,这里也是封装了FireBLEIIC底层驱动函数,还是那个原因,方便移植。

到这里,就可以和mpu6050进行通信了,首先mpu6050要进行工作需要对其很多的寄存器进行初始化,下面说一说怎么初始化mpu6050

1、复位MPU6050

2、唤醒MPU6050

3、设置陀螺仪传感器量程

4、设置加速度传感器量程

5、设置采样率

6、设置其他寄存器

下面直接看mpu6050初始化函数:



首先,初始化中断引脚,然后初始化IIC,使IIC可以使用,然后软件控制mpu6050复位,向其某个寄存器写入固定值即可,等待一段时间后再唤醒mpu6050,接下来调用3个函数设置陀螺仪传感器量程、加速度传感器量程、采样率,然后设置其他寄存器,包括关闭所有中断,设置IIC从模式,关闭FIFO,设置INT引脚中断属性等。最后,读取mpu6050的器件ID,判断是否正确,若正确则设置x轴为参考轴,加速度和陀螺仪都工作,从新设置采用率等,否则返回错误代码。

设置陀螺仪传感器量程、加速度传感器量程、采样率的3个函数代码如下,也是对mpu6050的寄存器写入一定的值,感兴趣的朋友可以去查看数据手册,都有详细介绍的。



mpu6050配置好了,接可以实现读数据函数,实现3个函数分别读取mpu6050的加速度、角速度的原始数据以及温度值。

读取温度的函数如下:



温度传感器的值,可以通过读取0X41(高8位)和0X42(低8位)寄存器得到:

温度换算公式为:

Temperature = 36.53 + regval/340

其中,Temperature为计算得到的温度值,单位为°Cregval为从0X410X42读到的温度传感器值。上面的函数就是根据这个换算公式编写的代码,最后把温度值扩大一百倍是为了把小数转换成整数来返回。

读取陀螺仪的函数如下:



这个函数从mpu6050中读取出xyz三轴的角速度的原始数据,每个轴上的数据都是16位的整形数据。

读取加速度的函数如下:



这个函数从mpu6050中读取出xyz三轴的加速度的原始数据。

到此,mpu6050驱动就完成了,在主函数中添加测试代码。添加以下几个变量保存温度值、六轴的值:



main.c文件完整代码如下:


【FireFly试用体验】011-MPU6050实验

【FireFly试用体验】011-MPU6050实验

【FireFly试用体验】011-MPU6050实验

【FireFly试用体验】011-MPU6050实验

【FireFly试用体验】011-MPU6050实验


初始化mpu6050后,根据标记判断mpu6050是否采样完成,如果采样完成则根据一定的格式把数据显示到LCD上,由于LCD刷新比较慢,这里读取10次数据才显示一次。


四、实验结果


把程序下载到FireBLE开发板后,在LCD上可以看到如下内容,晃动一下开发板可以看到数据跟着改变,把手按在mpu6050芯片上,可以看到温度上升。


  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子