ESP-12F驱动MPU6050使用DMP库姿态解算

一、准备工作

主芯片采用是安信可科技的ESF-12F模组(内置ESP8266芯片),使用GPIO模拟I2C驱动MPU6050,i2c驱动部分可直接参考官方例程中的i2c_master.c文件,(附件提供)亲测没问题。注意点:明确MPU6050的从设备地址,可根据设计的硬件引脚AD0接电平来取值,AD0接GND,slave_addr为0x68,AD0接3.3v,slave_addr为0x68。

DMP库(MPU6050自带的数字运动处理器)具体介绍就不啰嗦了,就是MPU6050可以将原始六轴数据直接换算除四元数从而计算除欧拉角,得到yaw,roll,pitch。DMP库源代码原本是在MSP430芯片上做的,这里我们可以移植过来。(附件提供),这里直接使用正点原子MPU6050例程中移植到STM32F4系列上的DMP库(重命名eMPL)进行修改适配ESP-12F。DMP库中mpu_dmp_init初始化中对MPU6050重新配置,注意点:原本为0x68,需不需要更改根据你的i2c写函数。ESP-12F驱动MPU6050使用DMP库姿态解算_第1张图片

主要修改的文件有inv_mpu_dmp_motion_driver.c,inv_mpu_dmp_motion_driver.h,inv_mpu.c,inv_mpu.h这几个文件,独立的文件需要自己配置Makefile,这里就不说明,可自行操作。

ESP-12F驱动MPU6050使用DMP库姿态解算_第2张图片

 

二、移植修改

从inv_mpu_dmp_motion_driver.c改起,inv_mpu_dmp_motion_driver.h不用更改.

inv_mpu_dmp_motion_driver.c修改点:

1、右边的user_main.h都包含了所需的头文件,根据自己项目头文件名称自己#include。

ESP-12F驱动MPU6050使用DMP库姿态解算_第3张图片

2、更改对应宏定义函数名。

ESP-12F驱动MPU6050使用DMP库姿态解算_第4张图片

然后是inv_mpu.c以及inv_mpu.h,

inv_mpu.c修改点:

1、跟上面的文件修改项一样,替换头文件,不过注意的是STM32系列上支持#include数学函数处理,而ESP-12F本身不具有该功能,需要自己实现用到的数学函数。

ESP-12F驱动MPU6050使用DMP库姿态解算_第5张图片

2、同样是替换对应函数的宏定义。

ESP-12F驱动MPU6050使用DMP库姿态解算_第6张图片

3、在mpu_dmp_init(void)函数处理过程,配置MPU6050参数,以及加载dmp固件所需要的处理时间较久,我的工程文件是在NONOS-SDK-3.0.0版本下,默认是开启软硬看门狗,底层设计者为了系统的稳定性,以应对多冲突的操作环境。这里不进行看门狗操作操作的话,由于该函数运行时间久会触发到软件看门狗复位(有软件+硬件看门狗的情况下,一个程序段如果运行时间超过 1600 ms,即有可能会触发软件看门狗复位,若超过 3200 ms 则一定会触发复位),所以需要引入system_soft_wdt_stop(),system_soft_wdt_restart()搭配来使用防止还没执行完成就触发看门狗。

ESP-12F驱动MPU6050使用DMP库姿态解算_第7张图片

4、mpu_dmp_get_data(float *pitch,float *roll,float *yaw)函数中也用到看门狗操作,以及上面提到的自写数学函数(附件提供)

ESP-12F驱动MPU6050使用DMP库姿态解算_第8张图片

inv_mpu.h修改点:

1、替换包含一些uint8,uint16等定义头文件。

截至,关于DMP库的移植部分都修改完毕,开始准备使用了。

 

三、调用使用

1、调用MPU6050的初始化配置,以及dmp库使用初始化。

ESP-12F驱动MPU6050使用DMP库姿态解算_第9张图片

 

2、 调用读取MPU6050六轴原始数据,以及姿态解算数据。注意点:如下框图,如果只读取一次mpu_dmp_get_data(&pitch,&roll,&yaw)会返回-2,原因在于FIFO溢出,使用循环读取得以解决,在STM32上一次读取即可。

ESP-12F驱动MPU6050使用DMP库姿态解算_第10张图片

四、结尾总结

以上操作步骤主要是点明几个关键点,一些添加DMP库文件等细碎操作不作说明,可自行百度,望理解。以上移植到ESP-12F上使用正常,可正确解算出三轴的姿态角,由于工程应用不属于高精度领域,所以不对数据再进行数据优化处理。如有高人发现错误务必批评指正,留言告知。

最后留一张MPU6050放置静止时解算出的数值,yaw会有偏移属于正常现象,需要辅助矫正。

ESP-12F驱动MPU6050使用DMP库姿态解算_第11张图片

上述附件文件下载地址:

官方DMP库资料:https://download.csdn.net/download/guohengsheng3882/11215101

自写数学处理函数:https://download.csdn.net/download/guohengsheng3882/11215115

ESP-12F驱动MUP6050以及DMP移植:https://download.csdn.net/download/guohengsheng3882/11215120

测试DEMO工程:https://download.csdn.net/download/guohengsheng3882/12330600

你可能感兴趣的:(ESP8266)