1. 程式人生 > >四旋翼飛行器製作過程中遇到的問題及解決方法

四旋翼飛行器製作過程中遇到的問題及解決方法

作為一款四旋翼飛行器,能夠得到實時姿態的晶片自然必不可少,於是博主選用了較為常見的MPU6050來獲得姿態。同時輔以HMC5883L三軸電子羅盤感測器來矯正航向角,配備了MS5611氣壓計來做定高。(主控晶片也選擇了較為常見的STM32F407,並且博主是用MDK進行程式設計、除錯的)。

下面說說博主在製作該飛行器中遇到的問題及解決辦法(硬體問題就不說了,就說說軟體吧)。

  • MPU6050能讀到正確的器件ID,但是無法讀出原始資料?
    因為MPU6050上電後需要一段時間才能正常工作,故博主在MPU6050復位後延時了300ms才將其喚醒。
    MPU_Write_Byte(MPU_PWR_MGMT1_REG,0
X80)
; //復位MPU6050 delay_ms(300); MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //喚醒MPU6050
  • HMC5883L經過計算得出來的角度值在0、1、-1間跳動?
    博主在檢查這個錯誤時,先打印出了X,Y,Z的三個值,發現是正確的,那麼錯誤只可能是轉換成角度的公式有問題,後來發現是因為atan2這個函式沒有宣告,故編譯器為它隱式聲明瞭,導致無法呼叫該函式,但是編譯依然可以通過。加上標頭檔案math.h完美解決。
#inlcude "math.h"
angle = atan2((double)HMCY, (double)HMCX) * (180
/3.14159265) + 180;
  • USART2作為與上位機通訊介面,傳送正常,接收命令出現錯誤,無法執行陀螺儀等校準命令?

進行除錯過程中發現,上位機發送的六個位元組資料只有第一個位元組接收的資料正常,其後丟失或者錯誤。故此,博主推斷是波特率過高的原因,將波特率降低後,飛控完美接收命令校準。經過測試,波特率為115200可以較好的接收命令,過高無法接收,過低影響無人機穩定性。