关于MPU6050模块的使用

关于MPU6050模块的使用

MPU6050中有一个三轴陀螺仪三轴加速度计和一个温度传感器,陀螺仪是用来测角速度的,根据角速度和角加速度可以算出pitch(俯仰)、yaw(航向)、roll(横滚)三个角度。关于坐标方向已经在实物芯片中标明出来。

我们只需使用引脚VCC、GND、SCL、SDA、AD0。即可获得姿态数据。

MPU6050模块是通过IIC来传输数据的,它有两个IIC接口,我们只使用其中一个,是通过SCL和SDA两条线与MCU通信;第二个辅助IIC通道,通过AUX_CL和AUX_DA连接外部从设备,比如磁传感器,这样就可以组成一个九轴传感器。

AD0 是我们使用到的IIC 接口的地址控制引脚。当AD0 悬空/接 GND 的时候,模块的 IIC 从机地址为:0x68;当AD0 接 VCC 的时候,模块的 IIC 从机地址为:0x69。

补充

INT 引脚:中断输出引脚,每当MPU6050 有数据更新时,引脚INT 就会产生电平变化(会产生一个低电平,所以推荐外部中断设置成上拉,下降沿触发)。推荐使用这种方式,来读取数据。

二、程序移植

我们关于MPU6050的驱动程序可以移植正点原子的例程,

需要注意的是:

  1. 修改SCL和SDA引脚,如果需要用到AD0引脚,则修改,用不到就删除AD0的初始化代码

  2. 在DMP初始化函数atk_ms6050_dmp_init()中,注意有个自测试函数atk_ms6050_run_self_test()。函数中会判断传感器是否水平放置,只有水平放置的时候才能自检成功。

  3. 如果我们不采用INT中断读取数据(手动读取),那么需要保证读取ATK-MS6050 FIFO中数据的频率需与宏DEFAULT_MPU_HZ定义的频率一致,例如采样频率为100HZ,那么10ms读取一次数据是合适的。读取得太快或太慢都可能导致读取失败。所以在while循环中调用atk_ms6050_dmp_get_data(&pit, &rol, &yaw)来读取FIFO数据时,最好不要加延时函数,会影响速率,导致读取失败。

  4. 如果我们采用INT中断获取数据,那么在使用CubeMX配置完外部中断引脚后,需要先失能外部中断,在完成MPU6050模块初始化后,再使能外部中断,(经过测试发现,如果在初始化前开启外部中断,则会不断进入外部中断执行函数中,导致主程序卡死)。

  5. 不要在INT外部中断函数回调函数中使用Printf打印东西,会拖慢pid调整速度。
    6、另外MPU6050存在零漂,在Pit和Rol上还好,但在Yaw上,零漂严重

posted @   陈佳威  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示