赞
踩
软件版本:MDK :v5.29
STM32cubeMX:5.6.1
STM32Cube MCU Package for STM32F4 Series 1.25
硬件:正点原子阿波罗F429开发板
问题描述:项目上要用mpu9250,起初自己用stm32cubemx建立的工程,循环读取mpu9250的欧拉角输出,移植官方的DMP姿态融合算法。本来用的是st官方的HAL库硬件读取I2C,在读写数据时都没有问题,但是在DMP自检时怎么都不能通过,如果屏蔽掉run_self_test()也可以正常使用,但是自检不通过总是不放心,也让人对其测量数据的准确性存疑。
在仔细对比了正点原子的官方例程后(模拟读取I2C)发现两种方式读取I2C的差别体现在DMP inv_mpu.c文件的函数mpu_run_6500_self_test 函数当中,在这个函数中加速度计和陀螺仪的自检不通过
- for (ii = 0; ii < tries; ii++)
- if (!get_st_6500_biases(gyro, accel, 0, debug))
- break;
- for (ii = 0; ii < tries; ii++)
- if (!get_st_6500_biases(gyro_st, accel_st, 1, debug))
- break;
以上两个函数分别循环2次读取 gyro,accel 和 gyro_st,accel_st四个值,两种I2C读取方式在保持硬件不动的情况下测量结果差距比较大,导致在下面的自检结果计算时 accel_result 和 gyro_result 的值不能通过自检。
-
- accel_result = accel_6500_self_test(accel, accel_st, debug);
- if(debug)
- log_i("Accel Self Test Results: %d\n", accel_result);
-
- gyro_result = gyro_6500_self_test(gyro, gyro_st, debug);
- if(debug)
- log_i("Gyro Self Test Results: %d\n", gyro_result);
解决办法:使用模拟I2C(参考正点原子)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。