当前位置:   article > 正文

记录STM32F429 调试MPU9250 DMP自检不通过的问题_run_self_test

run_self_test

软件版本: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 函数当中,在这个函数中加速度计和陀螺仪的自检不通过

 

 

  1. for (ii = 0; ii < tries; ii++)
  2. if (!get_st_6500_biases(gyro, accel, 0, debug))
  3. break;

 

  1. for (ii = 0; ii < tries; ii++)
  2. if (!get_st_6500_biases(gyro_st, accel_st, 1, debug))
  3. break;

 以上两个函数分别循环2次读取 gyro,accel 和 gyro_st,accel_st四个值,两种I2C读取方式在保持硬件不动的情况下测量结果差距比较大,导致在下面的自检结果计算时 accel_result 和 gyro_result 的值不能通过自检。

  1. accel_result = accel_6500_self_test(accel, accel_st, debug);
  2. if(debug)
  3. log_i("Accel Self Test Results: %d\n", accel_result);
  4. gyro_result = gyro_6500_self_test(gyro, gyro_st, debug);
  5. if(debug)
  6. log_i("Gyro Self Test Results: %d\n", gyro_result);

 解决办法:使用模拟I2C(参考正点原子)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/404208?site
推荐阅读
相关标签
  

闽ICP备14008679号