关于在GD32上使用MPU6050的问题记录

首先写好本单片机的IIC 相关的初始化代码,

如,IIC 时钟,GPIO口,使能等.

然后参考:

1.

b站 使用STM32F103 读取MPU6050 实例,其中使用DMP库算出各个方向的角度

https://www.bilibili.com/video/BV1Ma4y1i7Py/

百度网盘链接: https://pan.baidu.com/s/1guc85gIjGAVGJn-V-1ZddQ

提取码: d0bk

2.

其中csdn:

超详细(简略介绍了一下)陀螺仪MPU6050模块输出姿态角(有完整版源码)

https://blog.youkuaiyun.com/lihaotian111/article/details/117307644



 

注意点:

A.

其中, 在 inv_mpu.c 文件中有几个函数需要实现,其实也就是iic 读写的函数,还要实现单片机相关的延时函数,

具体位置在这里:

#if defined MOTION_DRIVER_TARGET_MSP430

/*#include "msp430.h"

#include "msp430_i2c.h"

#include "msp430_clock.h"

#include "msp430_interrupt.h" */



#define i2c_write   mpu_write_len

#define i2c_read    mpu_read_len

#define delay_ms    delay_ms

#define get_ms      myget_ms

mpu_write_len,mpu_read_len,delay_ms 这三个需要实现,myget_ms是空函数

为啥是 MOTION_DRIVER_TARGET_MSP430 这个宏定义,  

因为 DMP 官方为MSP430 写的,移植过来的,不要考虑这些.


 

其中1.中的代码:

在定时器中使用

void Read_DMP(float *Pitch,float *Roll,float *Yaw);

即可.或者在main函数中的while(1)直接使用。注意申明变量,函数返回即可得到角度值。

B. 代码编译ok后,为啥三个角度的值都是0呢? (在确保IIC 已经正常通讯获取设备地址的情况下)

    有网友说是,没有重置,没有唤醒,或者是延时时间不够

    其中1.的代码处:

    void DMP_Init(void);中  int mpu_init(void);函数

    已经对设备进行 reset 并且wakeup .难道不是吗?

    后面在正点原子的例子中找到:

    FIFO 中数据的频率需与宏 DEFAULT_MPU_HZ 定义的频率一致  (也是是定时器读取的速度要匹配)

    /**

     * * 读取得太快或太慢都可能导致读取失败

    * 读取太快 6050 还未采样,FIFO 中无数据,读取失败

    * 读取太慢 6050 的 FIFO 溢出,读取失败

    */


 

C.  关于读取角度值后.  Yaw角度有飘移的问题.

    这个问题目前没有很好的解法,或者修正,或者加精度高的辅助

MPU6050 资料链接:

MPU6050 卖家网盘地址连接:

GY-521 MPU6050资料请自行下载:

https://pan.baidu.com/s/17HVp2y87gfl-iHyGud-mLw?pwd=8888

提取码: 8888

正点原子网盘地址:

六轴传感器模块ATK-MPU6050

http://www.openedv.com/docs/modules/other/ATK-MPU6050.html

百度网盘-链接:

https://pan.baidu.com/s/1nk37K_esFaRrobjVyJJDfA

提取码: t206

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Teleger

你的支持是我前进的方向

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值