问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

手把手教你用STM32F407开发板手搓一个四轴无人机(无刷电机版本)

创作时间:
作者:
@小白创作中心

手把手教你用STM32F407开发板手搓一个四轴无人机(无刷电机版本)

引用
CSDN
1.
https://blog.csdn.net/qq_29653575/article/details/145664824

本文将详细介绍如何使用STM32F407开发板制作一个四轴无人机。文章将从背景介绍、整体架构设计、硬件设计、软件设计等多个方面进行讲解,并附有详细的代码实现。

一、背景

前段时间,作者帮助师弟完成了一个“无人机喷药”项目。该项目时间比较仓促,但最终还是顺利完成了。师弟是自动化专业,之前学过一些电子电路、微机原理、C语言的课程,但是没有相关项目的开发经验。整个项目前后花了将近3个月的时间。

哔哩哔哩视频效果演示:https://www.bilibili.com/video/BV1aP4y137b3/?vd_source=646ab3ffb3c97fca658a999badabbc66

二、整体架构

整个无人机主要由以下几部分组成:机架、飞控、遥控器和地面站。其中机架可以根据自己的需求自行进行设计并3D打印,飞控和遥控器可以自己画PCB,自己焊接。

如果毕设学校不给报销,或者经费不足,飞控可以直接用单片机代替,遥控器可以用地面站(PC端或者手机端)代替,另外再买个6轴姿态传感器和无线透传模块即可,这样可以节省很多费用和时间。推荐组合:正点原子核心板+匿名科创地面站+MPU6050模块+无线模块。


F330机架


STM32F407最小系统板

地面站

三、硬件设计

硬件设计部分主要包括电源管理、STM32最小系统、IMU九轴姿态传感器+气压计、2.4G无线通信模块、SBUS、串口等其他外围电路。由于篇幅限制,这里只介绍电源管理和STM32最小系统的设计。

1. 电源管理

电源管理是无人机设计中非常重要的一部分。需要确保电源稳定可靠,同时还要考虑电池的续航能力。在本项目中,我们使用了两块电池,一块用于驱动电机,另一块用于供电给飞控板。两块电池通过MOS管进行切换,以确保在电池电量不足时能够及时切换到备用电池。

2. STM32最小系统

STM32最小系统是整个无人机的核心控制单元。在本项目中,我们使用了STM32F407芯片,它具有强大的处理能力和丰富的外设资源,非常适合用于无人机控制。最小系统包括了时钟电路、复位电路、电源电路、JTAG调试接口等部分。

四、软件设计

软件设计部分主要包括FreeRTOS操作系统、PID控制算法、传感器驱动、遥控遥测协议等多个方面。由于篇幅限制,这里只介绍PID控制算法和NRF24L01无线模块的实现。

1. PID控制算法

PID控制算法是无人机控制的核心算法之一。在本项目中,我们使用了四元数算法来解算无人机的姿态数据,然后通过PID控制算法来控制电机的转速,从而实现无人机的姿态稳定和位置控制。

以下是PID控制算法的核心代码:

void PID_Init(struct PID *pid,float kp,float ki,float kd,float Irange,float Ilimit)
{
    pid->Kp=kp; 
    pid->Ki=ki; 
    pid->Kd=kd;
    pid->IntegralRange=Irange; 
    pid->IntegralLimit=Ilimit;  
}

void PID_Control(struct PID *pid,float SetValue,float ActualValue)
{
    pid->Error=SetValue-ActualValue;
    
    if( fabs(pid->Error)>pid->IntegralRange || RC_Control.THR<=THROTTLE_MIN)
    {
        pid->IntegralFlag=0;
    }
    else
    {
        pid->IntegralFlag=1;
        pid->SumIntegral+=pid->Error; 
        if(pid->SumIntegral>pid->IntegralLimit)  pid->SumIntegral=pid->IntegralLimit;
        if(pid->SumIntegral<-pid->IntegralLimit) pid->SumIntegral=-pid->IntegralLimit;
    }
    
    pid->Pout=pid->Kp*pid->Error;
    pid->Iout=pid->IntegralFlag*pid->Ki*pid->SumIntegral;
    pid->Dout=pid->Kd*(pid->Error-pid->PreError);
    
    pid->OutPut=pid->Pout+pid->Iout+pid->Dout;
    
    pid->PreError=pid->Error;  
}

2. NRF24L01无线模块

NRF24L01是一款常用的2.4GHz无线通信模块,具有低功耗、高传输速率等特点,非常适合用于无人机的遥控和遥测。在本项目中,我们使用了NRF24L01模块来实现无人机和遥控器之间的通信。

以下是NRF24L01无线模块的核心代码:

u8 NRF24L01_TxPacket(u8 *txbuf)
{
    u8 sta;
    SPI1_SetSpeed(SPI_BaudRatePrescaler_16);//spi速度为10.5Mhz(24L01的最大SPI时钟为10Mhz)   
    NRF24L01_CE=0;
    NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF  32个字节
    NRF24L01_CE=1;//启动发送	   
    while(NRF24L01_IRQ!=0);//等待发送完成
    sta=NRF24L01_Read_Reg(STATUS);  //读取状态寄存器的值	   
    NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
    if(sta&MAX_TX)//达到最大重发次数
    {
        NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器 
        return MAX_TX; 
    }
    if(sta&TX_OK)//发送完成
    {
        return TX_OK;
    }
    return 0xff;//其他原因发送失败
}

以上就是使用STM32F407开发板制作四轴无人机的核心技术要点。希望本文能够帮助读者更好地理解无人机的开发过程,同时也欢迎读者在实际开发中遇到问题时与我交流。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号