BrainFPV RADIX 2 HD 飞控板在 ArduPilot 中的配置与固件烧写完全指南
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
导读
本文以 ArduPilot 仓库中 RADIX2HD 板级定义 文档为主线,系统讲解 BrainFPV RADIX 2 HD 高清数字 FPV 飞控板的硬件特性、串口与 PWM 引脚映射、电池监测、RC 输入配置,以及通过 BrainFPV 专有 Bootloader 加载 ArduPilot 固件的三种途径。读完本文,你将掌握如何在 ArduCopter 等机型上正确接线、通过BRD_ALT_CONFIG切换引脚复用,并使用./waf构建工具链配合 BrainFPV Firmware Packer 生成可在 RADIX 2 HD 上运行的固件文件。
一、硬件概览:专为 HD FPV 打造的飞控
RADIX 2 HD 是 BrainFPV 推出的飞控,定位是配合高清(数字)FPV 图传系统的 First Person View(FPV)应用场景。从 hwdef.dat 的板级定义可以确认其核心硬件配置:
| 部件 | 规格 | 仓库依据 |
|---|---|---|
| 主控 MCU | STM32H750xx(H7 系列,480 MHz 主频) | MCU STM32H7xx STM32H750xx、MCU_CLOCKRATE_MHZ 480 |
| 晶振 | 16 MHz 外部晶振 | OSCILLATOR_HZ 16000000 |
| IMU | Bosch Sensortec BMI270(SPI1 接口,ROTATION_ROLL_180) | IMU BMI270 SPI:bmi270 ROTATION_ROLL_180 |
| 气压计 | Infineon DPS310(I2C1,地址 0x76) | BARO DPS310 I2C:0:0x76 |
| 板载 Flash | 16 MB,QUADSPI 接口,120 MHz | EXT_FLASH_SIZE_MB 16、QUADSPI1 SPEED_HIGH |
| 存储 | microSD 卡槽(SDMMC1) | SDMMC1_*引脚定义 |
| 串口 | 6 路 UART + USB(BRD_ALT_CONFIG=1 时可获得 7 路 UART) | SERIAL_ORDER OTG1 USART1 USART2 USART3 UART4 UART5 USART6 UART7 |
| PWM 输出 | 10 路(前 8 路支持 BDSHOT,分布在两个 4-in-1 ESC 接口上) | TIM1/TIM2/TIM3/TIM4与TIM8输出定义 |
| 总线 | 1 路 I2C(I2C1)、1 路 CAN(CAN1,支持 CAN FD 2 Mbit/s) | CANFD_SUPPORTED 2 |
| 其他 | 板载 RGB LED、外部蜂鸣器、USB Type-C | BUZZER、LED_RED/GREEN/BLUE引脚定义 |
供电方面,板载 5 V / 1.5 A 稳压器为飞控和外部设备供电;另有一路 9 V / 2 A 稳压器专供 HD FPV 图传系统,可通过 Relay2 开关控制通断。电池直供范围为 3S–8S(最高 35 V);尺寸为 37 × 37 mm(30.5 mm 孔距),重量仅 7 g,产地为美国且符合 NDAA 合规要求。
从源码结构可以推断,hwdef.dat中声明的FLASH_SIZE_KB 128与HAL_FLASH_PROTECTION 1表明内部 Flash 仅供 Bootloader 与保护用途,而固件主体存放在 16 MB 外部 QUADSPI Flash(起始地址 0x90400000,见下文打包脚本),这正是其需要使用专用 Bootloader 与定制固件格式的原因。
二、引脚与串口映射(Pinout & UART Mapping)
官方引脚图存放在板级目录下:
板底图中可见 "PWR:VBAT" 跳线焊盘,用于将电池电压监测与板载供电合二为一(详见第五节电池监测的警告)。
2.1 串口分配
RADIX 2 HD 的串口顺序在 hwdef.dat 中定义为OTG1 USART1 USART2 USART3 UART4 UART5 USART6 UART7,与 ArduPilot 的SERIALn编号一一对应:
| 串口 | 外设 | 默认用途 | 说明 |
|---|---|---|---|
| SERIAL0 | USB | USB 连接 | OTG1 |
| SERIAL1 | UART1 | MSP DisplayPort OSD | DMA 使能,接 HD 图传 OSD |
| SERIAL2 | UART2 | GPS | DMA 使能 |
| SERIAL3 | UART3 | RC 输入 | DMA 使能 |
| SERIAL4 | UART4 | ESC 遥测 | NODMA |
| SERIAL5 | UART5 | 备用 | NODMA |
| SERIAL6 | UART6 | 备用 | 默认作为 PWM 9/10,BRD_ALT_CONFIG=1时切换为 UART |
| SERIAL7 | UART7 | 备用 | RX 位于 HD 连接器上用于 RC 输入,TX 未引出焊盘 |
2.2 BRD_ALT_CONFIG 引脚复用机制
SERIAL6 的引脚默认是 PWM 9/10 输出(TX6/RX6 焊盘)。在 hwdef.dat 中,USART6 的 RX/TX 都标记了ALT(1):
PC7 USART6_RX USART6 NODMA ALT(1) PC6 USART6_TX USART6 NODMA ALT(1)而 GPIO.cpp 中实现了setup_alt_config():当BRD_ALT_CONFIG = 1时,会依据 hwdef 中ALT(n)声明的备用配置表重新切换引脚功能。因此:
BRD_ALT_CONFIG = 0(默认):PC6/PC7 作为 TIM8 的 PWM 9/10 输出;BRD_ALT_CONFIG = 1:PC6/PC7 切换为 USART6 的 TX/RX,使 SERIAL6 成为可用的第 7 路 UART。
注意,启用 UART6 后 PWM 9/10 将不可用,二者属于互斥关系。
2.3 I2C 与 CAN
- I2C:仅 I2C1(PB6 SCL / PB7 SDA,均带 PULLUP),板载 DPS310 气压计挂在该总线上(0x76)。
HAL_I2C_INTERNAL_MASK 0与AP_COMPASS_PROBING_ENABLED 1表明支持在此总线上探测外部罗盘。 - CAN:单路 CAN1(PD0 RX / PD1 TX),且
CANFD_SUPPORTED 2表明该板支持最高 2 Mbit/s 的 CAN FD 速率。
三、PWM 输出与 BDSHOT
RADIX 2 HD 共 10 路 PWM 输出,前 8 路位于两个 4-in-1 ESC 接口上,全部标记为BIDIR(见 hwdef.dat),支持双向 DShot(BDSHOT)遥测。构建脚本 chibios_hwdef.py 会为含BIDIR标记的板型生成HAL_WITH_BIDIR_DSHOT宏,ArduPilot 据此启用 DShot 双向遥测能力(实现位于 RCOutput_bdshot.cpp)。
PWM 通道按每 2 路一组,同一组内的通道必须使用相同的配置与刷新率:
| 分组 | 通道 | 定时器/通道 | 备注 |
|---|---|---|---|
| Group 1 | PWM 1–2 | TIM1 CH2/CH3 | 4-in-1 接口 A |
| Group 2 | PWM 3–4 | TIM2 CH1/CH3 | 4-in-1 接口 A |
| Group 3 | PWM 5–6 | TIM3 CH2/CH3 | 4-in-1 接口 B |
| Group 4 | PWM 7–8 | TIM4 CH2/CH3 | 4-in-1 接口 B |
| Group 5 | PWM 9–10 | TIM8 CH1/CH2 | TX6/RX6 焊盘,与 SERIAL6 复用 |
Group 5 的两路输出位于 TX6/RX6 焊盘上,与 UART6 共用引脚(对应上文 BRD_ALT_CONFIG 的互斥关系),且这两路为NODMA模式。
四、RC 输入
默认情况下,SERIAL3(UART3)用于 RC 输入。与 RC 接收机相连的 5 V 供电焊盘(RX3 旁的 "+")同样由 USB 供电,这意味着在未接主电池的情况下也能安全、方便地进行接收机与飞控的配置调试。
配合 defaults.parm 的出厂默认参数,RADIX 2 HD 开箱即用的串口协议配置为:
# CRSF receiver on UART3 SERIAL3_PROTOCOL 23 RSSI_TYPE 3 # MSP DisplayPort OSD on UART1 OSD_TYPE 5 SERIAL1_PROTOCOL 42 # GPS on UART2 SERIAL2_PROTOCOL 5 # ESC Telemetry on UART4 SERIAL4_PROTOCOL 16 # 9V regulator switch, ON on boot RELAY2_DEFAULT 1这些协议编号与 AP_SerialManager.h 中的枚举一致:5 = GPS、16 = ESC Telemetry、23 = RCIN、42 = MSP DisplayPort。在 AP_SerialManager.cpp 的初始化逻辑中,SerialProtocol_RCIN会将 UART 注册给 RC 协议解析器(AP::RC().add_uart()),而 MSP DisplayPort 协议由 AP_MSP 模块接管 OSD 数据流。因此:
- SERIAL3(23/RCIN)默认对接 CRSF 协议接收机,
RSSI_TYPE 3表示从 CRSF 链路读取 RSSI; - SERIAL1(42/MSP DisplayPort)驱动 HD 图传的 OSD 显示,
OSD_TYPE 5启用 MSP OSD; - SERIAL4(16/ESC Telemetry)读取 4-in-1 ESC 的遥测数据;
RELAY2_DEFAULT 1保证上电即开启 9 V 稳压器,为 HD FPV 图传系统供电。
如需使用其他 RC 协议(如 SBUS、ELRS),将对应串口的SERIALn_PROTOCOL设置为 23 即可,ArduPilot 的 RC 协议栈会自动探测所支持的协议。
五、模拟输入与电池监测
RADIX 2 HD 提供 3 路模拟输入(见 hwdef.dat):
| ADC 引脚 | 功能 | 参数定义 |
|---|---|---|
| ADC Pin 10(PC0) | 电池电压(VBAT) | HAL_BATT_VOLT_PIN 10,分压比HAL_BATT_VOLT_SCALE 17.6 |
| ADC Pin 3(PA6) | 电池电流(CUR) | HAL_BATT_CURR_PIN 3,电流标度HAL_BATT_CURR_SCALE 28.5 |
| ADC Pin 11(PC1) | RSSI 电压监测 | BOARD_RSSI_ANA_PIN 11 |
内置 1:17.6 分压电路使得该板最高可监测 12S 电池电压。而板载供电本身最高支持 8S(35 V),板上 "PWR:VBAT" 跳线可将 VBAT 引脚同时用于电池电压监测与板载供电。
⚠️ 重要警告:如果焊接了 "PWR:VBAT" 跳线并使用超过 8S(35 V)的电池给板子供电,将造成硬件损坏。务必参考 BrainFPV 官方文档确认跳线使用方式。
电池监测的默认后端类型由HAL_BATT_MONITOR_DEFAULT 4定义,配合电流传感输入即可在 Mission Planner 等地面站中直接配置电压/电流标定。
六、固件烧写(Loading Firmware)
RADIX 2 HD 使用 BrainFPV 专有 Bootloader,需要特定格式的固件文件。烧写流程为:
- 获取固件文件(见下方三种途径);
- 按住 BOOT 按钮并连接 USB,使板子进入 Bootloader 模式,电脑上会弹出一个 U 盘;
- 将固件文件复制到该 U 盘;
- 安全弹出 U 盘,RADIX 2 HD 将自动重启并运行 ArduPilot 固件。
注意:使用 ArduPilot 固件时,必须插入 microSD 卡,否则固件无法运行(ArduPilot 需要 SD 卡存放参数与日志,对应
HAL_OS_FATFS_IO 1与HAL_STORAGE_SIZE 16384的配置)。
方式一:从 BrainFPV 官网直接下载固件
这是最简单的途径:直接访问 BrainFPV 官网的固件下载页面,获取已打包好的.bin固件文件,按上述流程复制进 U 盘即可。
方式二:从 ArduPilot 构建服务器下载 ELF 并转换
从 ArduPilot Build Server 下载目标为 "RADIX2HD" 的 ELF 文件(例如 ArduCopter 对应arducopter.elf),再使用 BrainFPV Firmware Packer 工具转换为 RADIX 2 HD 可识别的格式。
安装 Python 3(Linux 用包管理器,Windows 从官网安装并务必勾选 "Add Python to PATH"),然后安装 Firmware Packer:
python3 -m pip install https://github.com/BrainFPV/brainfpv_fw_packer/archive/main.zip转换 ELF 为.bin:
brainfpv_fw_packer.py --name arducopter --in arducopter.elf --out arducopter.bin ^ --dev radix2hd -t firmware -b 0x90400000 -z --noheader其中-b 0x90400000对应外部 QUADSPI Flash 的起始地址(与 hwdef 中 16 MB 外部 Flash 的定义一致),-z --noheader用于生成符合该 Bootloader 预期的固件头格式。
方式三:自行编译固件
如果你已具备可用的 ArduPilot 构建环境,可以直接编译出对应机型的固件,再用 Firmware Packer 打包。以 ArduCopter 为例:
./waf configure --board RADIX2HD ./waf copter编译完成后,直接调用板级目录中自带的打包脚本:
./libraries/AP_HAL_ChibiOS/hwdef/RADIX2HD/pack_firmware.sh copter查看 pack_firmware.sh 的实现,该脚本的核心逻辑是:
- 读取当前 Git 版本信息(
git describe/git rev-parse)作为固件版本号; - 用
arm-none-eabi-objcopy将arducopterELF 转换为 HEX; - 调用
brainfpv_fw_packer.py,将 HEX 打包为arducopter_{VERSION}_brainfpv.bin,输出到build/RADIX2HD/bin/目录。
arm-none-eabi-objcopy -O ihex ${FW_ELF} ${FW_HEX} brainfpv_fw_packer.py \ --name ardu$1 \ --version ${GIT_VER} \ --sha1 ${GIT_SHA1} \ --in ${FW_HEX} --out ${FW_PACKED} \ --dev radix2hd -t firmware -b 0x90400000 -z --noheader将生成好的arducopter_{VERSION}_brainfpv.bin复制到 Bootloader 模式下的 U 盘即可完成烧写。
RADIX 2 HD 虽然可以编译其他机型的固件,但主要面向多旋翼(Copter)应用场景。板卡 ID 定义于 board_types.txt(AP_HW_RADIX2HD = 1118);另外,由于该板采用 BrainFPV 专有 Bootloader,hwdef 中AP_BOOTLOADER_FLASHING_ENABLED 0表明无法像普通 ArduPilot 板那样通过地面站在线刷新 Bootloader。
七、参数速查与常见配置
以下为 RADIX 2 HD 开箱即用的关键参数(来自 defaults.parm):
| 参数 | 默认值 | 含义 |
|---|---|---|
SERIAL3_PROTOCOL | 23(RCIN) | UART3 作为 RC 输入,对接 CRSF 等协议接收机 |
RSSI_TYPE | 3 | RSSI 来源为 CRSF 遥控链路 |
OSD_TYPE | 5 | 启用 MSP OSD |
SERIAL1_PROTOCOL | 42(DisplayPort) | UART1 输出 MSP DisplayPort OSD 到 HD 图传 |
SERIAL2_PROTOCOL | 5(GPS) | UART2 接 GPS 模块 |
SERIAL4_PROTOCOL | 16(ESC Telemetry) | UART4 读取 ESC 遥测 |
RELAY2_DEFAULT | 1 | 上电默认开启 9 V 稳压器(HD FPV 图传供电) |
BRD_ALT_CONFIG | 0 | 置 1 时将 PWM 9/10 引脚切换为 SERIAL6 UART |
从 AP_SerialManager.cpp 的参数文档可以看出,SERIALn_PROTOCOL支持 -1(禁用)到 50(IOMCU)的完整协议集,用户可根据实际外设自由调整各串口的用途,例如把 SERIAL5 改为 5(GPS)或 23(RCIN)。
八、小结
BrainFPV RADIX 2 HD 在 ArduPilot 中的支持由 hwdef/RADIX2HD 目录完整承载:STM32H750 + BMI270 + DPS310 的高性能核心、支持 BDSHOT 的 10 路 PWM、丰富的 7 路 UART 与 CAN/I2C 扩展,以及专为 HD FPV 设计的 9 V 图传供电开关,使其成为高端 FPV 多旋翼的理想选择。烧写固件时只需记住三条路径:官网直接下载、构建服务器 ELF 转换、本地./waf编译打包,配合板级目录自带的pack_firmware.sh脚本,即可快速完成从源码到可飞固件的全流程。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考