正点原子 第65讲 MPU6050 六轴传感器实验

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初始化有可能会出错,因为干扰较多。  方法是将杜邦线 接短一点,将模块放平,一般初始化就能通过了。

  • 11
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
MPU6050是一种六轴传感器,它包含三轴的加速度传感器和三轴的陀螺仪(角速度传感器)。它可以用于测量物体的加速度和角速度,常用于姿态测量、运动控制和导航等应用领域。 以下是使用MPU6050六轴传感器的示例代码: ```python import smbus import math # MPU6050的I2C地址 MPU6050_ADDR = 0x68 # 加速度计的灵敏度范围 ACCEL_RANGE_2G = 0x00 ACCEL_RANGE_4G = 0x08 ACCEL_RANGE_8G = 0x10 ACCEL_RANGE_16G = 0x18 # 陀螺仪的灵敏度范围 GYRO_RANGE_250DEG = 0x00 GYRO_RANGE_500DEG = 0x08 GYRO_RANGE_1000DEG = 0x10 GYRO_RANGE_2000DEG = 0x18 # 初始化I2C总线 bus = smbus.SMBus(1) # 设置加速度计和陀螺仪的灵敏度范围 bus.write_byte_data(MPU6050_ADDR, 0x1C, ACCEL_RANGE_2G) bus.write_byte_data(MPU6050_ADDR, 0x1B, GYRO_RANGE_250DEG) # 读取加速度计和陀螺仪的原始数据 accel_x = bus.read_word_data(MPU6050_ADDR, 0x3B) accel_y = bus.read_word_data(MPU6050_ADDR, 0x3D) accel_z = bus.read_word_data(MPU6050_ADDR, 0x3F) gyro_x = bus.read_word_data(MPU6050_ADDR, 0x43) gyro_y = bus.read_word_data(MPU6050_ADDR, 0x45) gyro_z = bus.read_word_data(MPU6050_ADDR, 0x47) # 将原始数据转换为加速度和角速度的物理值 accel_scale = 16384.0 # 加速度计的比例因子 gyro_scale = 131.0 # 陀螺仪的比例因子 accel_x = accel_x / accel_scale accel_y = accel_y / accel_scale accel_z = accel_z / accel_scale gyro_x = gyro_x / gyro_scale gyro_y = gyro_y / gyro_scale gyro_z = gyro_z / gyro_scale # 计算加速度的合成值 accel = math.sqrt(accel_x**2 + accel_y**2 + accel_z**2) # 计算陀螺仪的合成值 gyro = math.sqrt(gyro_x**2 + gyro_y**2 + gyro_z**2) # 打印结果 print("加速度:", accel) print("角速度:", gyro) ``` 这段代码使用Python的smbus库通过I2C总线与MPU6050进行通信,读取加速度计和陀螺仪的原始数据,并将其转换为物理值。最后打印出加速度和角速度的合成值。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值