記錄STM32F429 調試MPU9250 DMP自檢不通過的問題

軟件版本: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(參考正點原子)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章