关于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的驱动程序可以移植正点原子的例程,
需要注意的是:
-
修改SCL和SDA引脚,如果需要用到AD0引脚,则修改,用不到就删除AD0的初始化代码
-
在DMP初始化函数atk_ms6050_dmp_init()中,注意有个自测试函数atk_ms6050_run_self_test()。函数中会判断传感器是否水平放置,只有水平放置的时候才能自检成功。
-
如果我们不采用INT中断读取数据(手动读取),那么需要保证读取ATK-MS6050 FIFO中数据的频率需与宏DEFAULT_MPU_HZ定义的频率一致,例如采样频率为100HZ,那么10ms读取一次数据是合适的。读取得太快或太慢都可能导致读取失败。所以在while循环中调用atk_ms6050_dmp_get_data(&pit, &rol, &yaw)来读取FIFO数据时,最好不要加延时函数,会影响速率,导致读取失败。
-
如果我们采用INT中断获取数据,那么在使用CubeMX配置完外部中断引脚后,需要先失能外部中断,在完成MPU6050模块初始化后,再使能外部中断,(经过测试发现,如果在初始化前开启外部中断,则会不断进入外部中断执行函数中,导致主程序卡死)。
-
不要在INT外部中断函数回调函数中使用Printf打印东西,会拖慢pid调整速度。
6、另外MPU6050存在零漂,在Pit和Rol上还好,但在Yaw上,零漂严重
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具