四旋翼飞行器制作过程中遇到的问题及解决方法

时间:2022-08-11 16:37:41

作为一款四旋翼飞行器,能够得到实时姿态的芯片自然必不可少,于是博主选用了较为常见的MPU6050来获得姿态。同时辅以HMC5883L三轴电子罗盘传感器来矫正航向角,配备了MS5611气压计来做定高。(主控芯片也选择了较为常见的STM32F407,并且博主是用MDK进行编程、调试的)。


下面说说博主在制作该飞行器中遇到的问题及解决办法(硬件问题就不说了,就说说软件吧)。

  • MPU6050能读到正确的器件ID,但是无法读出原始数据?
    因为MPU6050上电后需要一段时间才能正常工作,故博主在MPU6050复位后延时了300ms才将其唤醒。
    MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位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可以较好的接收命令,过高无法接收,过低影响无人机稳定性。