# 四轴无人机 **Repository Path**: kai8801/drone ## Basic Information - **Project Name**: 四轴无人机 - **Description**: STM32四轴无人机 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-09 - **Last Updated**: 2026-03-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 无人机飞控系统 基于STM32F103的四轴无人机飞控系统,包含飞控板(flight_hal)和遥控板(remote_hal)两套独立程序。 ## 项目概述 本项目是一个完整的无人机飞控系统解决方案,采用双板架构设计: - **flight_hal**: 飞控板代码,负责姿态解算、电机控制、无线通信等核心飞行功能 - **remote_hal**: 遥控板代码,提供摇杆控制、OLED显示、数据发送等功能 ## 硬件平台 - **主控芯片**: STM32F103C8T6 - **实时操作系统**: FreeRTOS - **开发环境**: Keil MDK-ARM (STM32CubeMX生成) ## 项目结构 ### flight_hal(飞控板) ``` flight_hal/ ├── Core/ # STM32 HAL库核心文件 │ ├── Inc/ # 头文件 │ └── Src/ # 源文件 ├── MDK-ARM/ # Keil工程文件 │ ├── App/ # 应用层 │ │ ├── App_flight.c/h # 飞行控制应用 │ │ └── App_receive_data.c/h # 数据接收处理 │ ├── Com/ # 通用组件层 │ │ ├── Com_debug.c/h # 调试输出 │ │ ├── Com_filter.c/h # 数据滤波 │ │ ├── Com_imu.c/h # IMU数据处理 │ │ ├── Com_pid.c/h # PID控制算法 │ │ └── Com_config.h # 配置定义 │ ├── Int/ # 硬件接口层 │ │ ├── Int_mpu6050.c/h # MPU6050陀螺仪驱动 │ │ ├── Int_motor.c/h # 电机驱动 │ │ ├── Int_SI24R1.c/h # SI24R1无线模块 │ │ ├── Int_VL53L1X.c/h # VL53L1X激光测距 │ │ ├── Int_bat_ADC.c/h # 电池电压采集 │ │ ├── Int_IP5305T.c/h # 电源管理芯片 │ │ └── Int_led.c/h # LED控制 │ ├── Mid/ # 中间件层 │ │ └── FreeRTOS/ # FreeRTOS源码 │ └── Task/ # 任务层 │ └── FreeRTOS_task.c/h # FreeRTOS任务定义 └── Drivers/ # STM32 HAL驱动库 ``` ### remote_hal(遥控板) ``` remote_hal/ ├── Core/ # STM32 HAL库核心文件 │ ├── Inc/ # 头文件 │ └── Src/ # 源文件 ├── MDK-ARM/ # Keil工程文件 │ ├── App/ # 应用层 │ │ ├── App_display.c/h # OLED显示应用 │ │ ├── App_process_data.c/h # 数据处理 │ │ └── App_transmit_data.c/h # 数据发送 │ ├── Com/ # 通用组件层 │ │ ├── Com_debug.c/h # 调试输出 │ │ └── Com_tool.c/h # 工具函数 │ ├── Int/ # 硬件接口层 │ │ ├── Int_joystick.c/h # 摇杆ADC采集 │ │ ├── Int_key.c/h # 按键驱动 │ │ ├── Int_SI24R1.c/h # SI24R1无线模块 │ │ ├── Int_IP5305T.c/h # 电源管理芯片 │ │ └── oled/ # OLED驱动 │ │ ├── Inf_OLED.c/h │ │ └── Inf_font.c/h │ ├── Mid/ # 中间件层 │ │ └── FreeRTOS/ # FreeRTOS源码 │ └── Task/ # 任务层 │ └── FreeRTOS_task.c/h # FreeRTOS任务定义 └── Drivers/ # STM32 HAL驱动库 ``` ## 主要功能 ### flight_hal(飞控板) - **姿态解算**: 使用MPU6050六轴传感器进行姿态角解算(欧拉角:偏航、俯仰、横滚) - **电机控制**: 基于PID算法的四轴电机控制 - **无线通信**: 通过SI24R1模块接收遥控器控制指令 - **定高功能**: 使用VL53L1X激光测距模块实现定高飞行 - **电源管理**: IP5305T电源管理芯片,支持电池电压监测 - **状态指示**: LED指示灯显示系统状态 - **数据滤波**: 传感器数据滤波处理,提高飞行稳定性 ### remote_hal(遥控板) - **摇杆控制**: 四通道摇杆(油门、偏航、俯仰、横滚)ADC采集 - **OLED显示**: 实时显示遥控器状态和连接信息 - **无线通信**: 通过SI24R1模块发送控制指令到飞控板 - **按键输入**: 支持按键操作,切换定高模式等 - **电源管理**: IP5305T电源管理芯片 - **数据处理**: 摇杆数据处理和打包发送 ## 通信协议 飞控板与遥控板通过SI24R1无线模块进行通信,数据包格式: ```c typedef struct{ int16_t thr; // 油门 int16_t yaw; // 偏航 int16_t pit; // 俯仰 int16_t rol; // 横滚 uint8_t shutdown; // 关机指令 uint8_t fix_height; // 定高切换 } Remote_data; ``` ## 飞行状态 系统支持以下飞行状态: ```c typedef enum { IDLE = 0, // 空闲状态 NORMAL, // 正常飞行 FIX_HEIGHT, // 定高飞行 FAIL, // 故障状态 } Flight_State; ``` ## 开发环境 - **IDE**: Keil MDK-ARM 5.x - **编译器**: ARMCC/ARMCLANG - **STM32CubeMX**: 用于生成HAL库和初始化代码 - **调试器**: ST-Link V2 ## 编译与烧录 ### flight_hal 1. 使用Keil MDK-ARM打开 `flight_hal/MDK-ARM/flight_hal.uvprojx` 2. 选择目标芯片:STM32F103C8 3. 编译项目(F7或点击Build按钮) 4. 连接ST-Link调试器 5. 下载程序到飞控板 ### remote_hal 1. 使用Keil MDK-ARM打开 `remote_hal/MDK-ARM/remote_hal.uvprojx` 2. 选择目标芯片:STM32F103C8 3. 编译项目(F7或点击Build按钮) 4. 连接ST-Link调试器 5. 下载程序到遥控板 ## 使用说明 ### 首次使用 1. 确保SI24R1模块的通信地址配置一致 2. 分别编译并烧录flight_hal和remote_hal程序到对应板子 3. 上电后,遥控板OLED显示连接状态 4. 摇杆回中,等待连接建立 ### 飞行操作 1. **油门解锁**: 油门推到最大再拉回最小,解锁电机 2. **起飞**: 缓慢推油门,无人机起飞 3. **姿态控制**: - 横滚摇杆控制左右飞行 - 俯仰摇杆控制前后飞行 - 偏航摇杆控制转向 4. **定高模式**: 按下定高按键,进入定高飞行模式 5. **降落**: 缓慢降低油门,无人机降落