1.MPU6050 简介
2 硬件 连接
3 源码讲解& 例程测试
上图中2 单位表示的是 度/每秒
INT 为中断输出脚
CS 为片选脚
AD0/SD0 用于设置地址 AD0=0 地址=0x68 AD0=1 地址=0x69 表示为二进制是1101000X,
最低位可以是 0 也可以说是 1 , 由于 IIC地址不包含最低位 所以 对应就是0xD0,或者0xD1
主 IIC SCL(SCLK)
SDA(SDI)
从IIC AUX_CL
AUX_DA
FSYNC 暂时没用
复位 MPU6050 ,设置加速度传感器 和角速度传感器的满量程范围
这里要特别注意时钟源的选择,一般以陀螺仪的X轴作为参考,所以设置为 001
bit7-bit5 是用于传感器自测的,一般不进行设置。只需要看 bit4-3,他们用于设置陀螺仪的满量程范围
这里 灵敏度 为 16.4 LSB/(°/s) ,也是分辨率为 16.4个LSB代表陀螺仪的速度是 1度/秒
同样也只看 bit3-4, 这里它的量程我们设为2g,那么 1g的变化可以细分为 16384个等分,它的精度是最高的。
如果不使用传感器的DMP功能的时候,可以禁用FIFO.
陀螺仪的FIFO使能由3个位单独控制,加速度传感器由 bit3 一个位控制。
当 DLPF_CFG设置为 0或者7 的时候,输出频率( Fs(Khz) )为 8Khz,其他情况是输出频率是1khz,
带宽DLPF_CFG[2:0] 决定 输出频率Fs(Khz)(8或1) 和 采样频率
这里设置的时候, 带宽要等于1/2 的采样率。
这个在使用6050 的低功耗 设置的时候是需要用到的
下面看6050的DMP 的使用介绍
这里是 正点原子移植好的mpu6050 的 DMP驱动库
经过 DMP 处理后输出的 四元数存放在· quat 这个数组当中。这里的换算公式可以去百度学习。
其中 IIC 的 两个引脚 SDA SCL带了上拉电阻, VCC GND 接进去以后经过 RT9193 稳压,支持 5V和3.3V 系统。
SCL SDA INT AD0脚还串有 120欧的电阻作电平 匹配。AD0 内部带了 一个10K的下拉电阻,如果 MPU_AD0 这个脚什么·都不接的话,那么地址就是0x68(0xD0),如果接VCC那就是0x69(0xD1)
下图红框是6050驱动代码
这里主要看看 mpuiic.h 里面对 12c接口方向的设置
这里说一下 ,关于IO口方向的问题,
根据寄存器表中 MODER 寄存器的描述,每两个位表示一个 IO口,每组 IO口有15个IO。 例如 GPIOB0-GPIOB15
这行代码就表示 GPIOB9 写 11 再取反,表示 清除 GPIOB9 MODER 寄存器。然后 给 GPIOB9 MODER 寄存器写00 表示为输入
上图为读取陀螺仪的原始数据,读取出来的数据放在 buf里面,高字节在前,低字节在后。
上图为读取温度值
接下来先看看DMP的驱动代码。相关代码在 下图所示的位置。
接下来看 DMP 代码的初始化,这里 包含了很多函数,完整的需要下载 原子的例程 来看。
上面代码为 通过DMP获取四元数以后的 欧拉角(pitch\roll\yaw)计算。
这里用到了 匿名四轴上位机软件 ,所以波特率设置要为500k,
注意:杜邦线接MPU的时候 DMP初始化有可能会出错,因为干扰较多。 方法是将杜邦线 接短一点,将模块放平,一般初始化就能通过了。