ArduPilot 移植板 Mamba F405 MK2 飞控详解:硬件特性、引脚映射、电池监测与固件刷写指南
Mamba F405 MK2(Mamba F405v2)是 Diatone 出品的一颗基于 STM32F405RGT6 的 FPV 飞控,其完整硬件定义已合入本仓库的 ChibiOS 固件支持列表(hwdef 目录)。本文以 官方 README 为骨架,结合 hwdef.dat 与 hwdef-bl.dat 的源码级定义,系统讲解该板卡的硬件特性、串口/引脚映射、RC 输入、OSD、PWM 输出、电池监测参数、备用配置(BRD_ALT_CONFIG)以及固件刷写流程,帮助你在 ArduPilot 上正确接线、配置与升级这颗飞控。
硬件概览与核心特性
Mamba F405 MK2 是面向多旋翼 FPV 场景的紧凑型飞控,其关键硬件配置在 hwdef.dat 开头即可确认:
- MCU:STM32F405RGT6(ARM Cortex-M4F,168MHz),hwdef.dat 第 8 行 声明为
MCU STM32F4xx STM32F405xx,主晶振 8MHz(OSCILLATOR_HZ 8000000),工作电压 3.3V(STM32_VDD 330U); - IMU:MPU6000(SPI1 总线,第 99-103 行 定义了
MPU6000_CS/SPI1_SCK/SPI1_MISO/SPI1_MOSI,第 126 行 注册为IMU Invensense SPI:mpu6000 ROTATION_YAW_90,即飞控安装方向为偏航旋转 90°); - OSD:AT7456E 字符叠加芯片,挂在 SPI2 上(第 105-110 行),可通过 OSD 参数直接配置显示;
- 串口:板载 3 路可用 UART(USART1 / USART3 / USART6)+ USB(OTG1);
- PWM 输出:4 路电机输出(ESC1~ESC4);
- 板载存储:16Mbit SPI DataFlash(M25P16),用于日志记录与参数存储(第 112-117 行)。
注意:
hwdef.dat第 11 行声明APJ_BOARD_ID AP_HW_MAMBA405,对应固件格式中的板卡 ID。在 Tools/AP_Bootloader/board_types.txt 中可查到该 ID 的数值为1019,刷写引导程序与固件时,工具会以此区分目标硬件。
引脚图与 UART 映射
Mamba F405 MK2 官方引脚图
引脚图中串口以 Rn / Tn 标注:Rn 为 UARTn 的接收脚(RX),Tn 为 UARTn 的发送脚(TX)。官方 README 给出的串口映射如下:
| 名称 | 引脚 | 功能 | |:-|:-|:-| | SERIAL0 | COMPUTER | USB | | SERIAL1 | PPM/RX1/SBUS/TX1 | UART1(RC 输入) | | SERIAL3 | TX3/RX3 | UART3(Telem1) | | SERIAL6 | TX6/RX6 | UART6(GPS) |
对应到 hwdef.dat,串口总线顺序为 SERIAL_ORDER OTG1 USART1 EMPTY USART3 EMPTY EMPTY USART6,即 SERIAL0=USB、SERIAL1=USART1、SERIAL3=USART3、SERIAL6=USART6,中间空位(SERIAL2/4/5)未引出。USB 数据脚为 PA11/PA12(OTG_FS_DM/OTG_FS_DP),并带 VBUS 检测(PC5,第 30-33 行)。
一个值得注意的细节:README 面向用户将 UART3 建议用作遥测(Telem1)、UART6 用作 GPS,而 hwdef.dat 为这两路配置了不同的出厂默认协议——第 50-52 行 将 SERIAL3 默认设为 SerialProtocol_Tramp(VTX 图传控制),第 57-60 行 将 SERIAL6 默认设为 SerialProtocol_ESCTelemetry(ESC 遥测)。这意味着拿到手的新固件中,这两路串口默认承担图传与电调遥测职责,若需要按 README 接 GPS 或数传,请在 Mission Planner / QGC 中通过 SERIAL3_PROTOCOL、SERIAL6_PROTOCOL 参数改为 5(GPS)或 2(MAVLink)等目标协议。
RC 输入:PPM 与 SBUS
RC 输入接在 PPM(即 UART1 的 RX 引脚 PA10)上,支持所有 RC 协议(PPM / SBUS / CRSF / IBUS 等,取决于地面站中 RC_PROTOCOLS 与接收机类型)。README 特别说明:S.BUS 焊盘提供反相输入,供 S.BUS 接收机使用。
在源码层面,hwdef.dat 第 37 行 将 PA10 配置为 TIM1_CH3 TIM1 RCININT PULLDOWN——即以定时器输入捕获模式接收 RC 信号,并将默认 SERIAL1_PROTOCOL 设为 SerialProtocol_RCIN(第 42 行)。SBUS 反相控制由 PC0 引脚负责:第 45 行 定义 PC0 USART1_RXINV OUTPUT HIGH GPIO(78) POL(1),即默认拉高、低电平有效(active low)地控制接收机反相电平。
OSD 支持
板载 AT7456E OSD 芯片,ArduPilot 中通过 OSD_TYPE 参数设为 1(MAX7456 驱动) 启用。hwdef.dat 中相应定义:第 162-163 行 设置 OSD_ENABLED 1、HAL_OSD_TYPE_DEFAULT 1,第 165 行 通过 ROMFS_WILDCARD libraries/AP_OSD/fonts/font*.bin 将 OSD 字体打包进固件。OSD 的 SPI 设备在 第 123 行 定义为 SPIDEV osd SPI2 DEVID4 OSD_CS MODE0 10*MHZ 10*MHZ(SPI 模式 0、最高 10MHz)。刷入固件后,可在 OSD 参数组中配置电压、电流、姿态、电池等屏显元素。
PWM 输出:4 路电机与 DShot
板上 ESC1~ESC4 焊盘对应 4 路 PWM 输出,hwdef.dat 第 71-75 行 的引脚分配为:
| 输出 | 引脚 | 定时器/通道 | 备注 | |:-|:-|:-|:-| | PWM(1) | PA3 | TIM2_CH4 | BIDIR(支持双向 DShot) | | PWM(2) | PB0 | TIM3_CH3 | — | | PWM(3) | PB1 | TIM3_CH4 | BIDIR(支持双向 DShot) | | PWM(4) | PA2 | TIM2_CH3 | — |
README 声明这 4 路全部支持 DShot 以及所有 PWM 类型(PWM、OneShot、DShot150/300/600 等),并强调:这些 PWM 位于同一组内。组内通道必须使用相同的输出速率;一旦组内任一通道启用 DShot,其余通道也必须使用 DShot。
需要补充的源码细节是:从 hwdef.dat 看,4 路输出实际分布在 TIM2 与 TIM3 两个定时器上(第 167 行还配置了 DMA_PRIORITY TIM2* TIM3* 为两组输出分配 DMA 通道)。因此在 Mission Planner 的 SERVO 输出界面中,务必把同组通道的速率设置保持一致,否则组内其他通道会因速率不一致而无法正常输出。
电池监测:电压与电流参数
板卡内置电压传感器,可监测最高 6S LiPo 电池。官方推荐参数如下:
| 参数 | 推荐值 | 说明 | |:-|:-|:-| | BATT_MONITOR | 3 | 模拟电压 + 电流监测(Voltage and Current) | | BATT_VOLT_PIN | 11 | 电压采样 ADC 引脚(对应 PC1) | | BATT_VOLT_MULT | 约 12.0 | 电压分压倍率 | | BATT_CURR_PIN | 13 | 电流采样 ADC 引脚(对应 PC3) | | BATT_CURR_MULT | 约 39 | 电流传感倍率(配合随附 40A ESC 时) |
这些参数与 hwdef.dat 第 67-69 行 的 ADC 定义一一对应:PC1 BATT_VOLTAGE_SENS、PC3 BATT_CURRENT_SENS(另有 PC2 RSSI_ADC 可用作模拟 RSSI 或空速输入)。同时 第 152-156 行 提供了固件内置默认值:
HAL_BATT_VOLT_PIN 11/HAL_BATT_CURR_PIN 13:与 README 推荐一致;HAL_BATT_VOLT_SCALE 11:电压倍率默认 11(README 建议按实际分压微调至约 12.0);HAL_BATT_CURR_SCALE 25.0:电流倍率默认 25.0(README 建议接 40A ESC 时设为约 39,以获得更准的电流读数);HAL_BATT_MONITOR_DEFAULT 4:固件默认只启用电压监测,需要电压 + 电流时按 README 将BATT_MONITOR改为3。
罗盘:外接 I2C 罗盘
Mamba F405 MK2 没有板载罗盘。如需磁罗盘,可通过板上的 SDA / SCL 焊盘外接 I2C 罗盘(常见如 HMC5883L、QMC5883L、IST8310 等)。固件层面,hwdef.dat 第 135-139 行 开启了 AP_COMPASS_PROBING_ENABLED 1,即在 I2C 总线上自动探测各类外部罗盘型号;同时设置 HAL_I2C_INTERNAL_MASK 0(无内部 I2C 设备)与 HAL_COMPASS_AUTO_ROT_DEFAULT 2(自动旋转默认值)。接线完成后在地面站执行罗盘校准(COMPASS_CAL 流程)即可。
备用配置:BRD_ALT_CONFIG
通过 BRD_ALT_CONFIG 参数可以切换 SERIAL1(RX1)的工作模式:
| BRD_ALT_CONFIG | RX1 功能 |
|---|---|
| ALT 0(默认) | RCININT(定时器捕获 RC 输入) |
| ALT 1 | RX1/TX1(UART1 作为普通串口) |
在 hwdef.dat 中可以看到该备用的实现:默认配置下 PA10 用作 TIM1_CH3 RCININT(第 37 行),而当 ALT(1) 生效时(第 41 行),PA10 被重新定义为 USART1_RX。这意味着如果你不需要在 PPM/SBUS 上接收 RC,而是想用 UART1 连接串口设备(如外置接收机串口遥测),可切到 ALT 1 释放这一路串口。
固件刷写与更新
README 给出的固件加载路径分两步:
- 首次刷写(DFU):按住 bootloader 按键插入 USB 进入 DFU 模式,使用任意 DFU 工具加载
with_bl.hex固件(该文件包含引导程序); - 后续升级(地面站):引导程序就位后,可通过任意 ArduPilot 地面站软件(Mission Planner 等)更新,此时应使用
*.apj固件文件。
关于引导程序布局,hwdef-bl.dat 给出了底层约定:引导程序占用 Flash 起始 16KB(FLASH_USE_MAX_KB 16),固件本体加载地址为 64KB 偏移(FLASH_BOOTLOADER_LOAD_KB 64)。这也解释了为什么 hwdef.dat 中 FLASH_RESERVE_START_KB 64(第 149 行)——前 64KB 保留给引导程序与参数存储,应用固件从 64KB 之后开始,整个 1MB Flash(FLASH_SIZE_KB 1024)剩余空间全部可供固件与日志使用。参数存储区(StorageManager)使用 DataFlash 的一页(STORAGE_FLASH_PAGE 1,容量 15360 字节,见 第 143-144 行)。
从源码构建固件
如果需要自行编译该板卡的固件,可按仓库 BUILD.md 的通用流程,以 hwdef 目录名 MambaF405v2 作为板卡名配置与编译:
./waf configure --board MambaF405v2
./waf copter
# 或构建其他机型:./waf plane / ./waf rover / ./waf sub
构建产物中即包含可用于地面站刷写的 .apj 固件文件。
从 hwdef 看底层设计:为 1MB Flash 定制的裁剪
Mamba F405 MK2 只有 1MB Flash,而 ArduPilot 完整固件体积较大。hwdef.dat 第 169-170 行通过 include ../include/minimize_fpv_osd.inc 引入面向 FPV/OSD 场景的驱动裁剪。该 minimize_fpv_osd.inc 做了如下取舍:
- 关闭光流(
AP_OPTICALFLOW_ENABLED 0)、内燃机(AP_ICENGINE_ENABLED 0)、高级失效保护(AP_ADVANCEDFAILSAFE_ENABLED 0)、精确降落(AC_PRECLAND_ENABLED 0)等低频功能; - 电机机架仅保留四旋翼/六旋翼/八旋翼(
AP_MOTORS_FRAME_QUAD/HEXA/OCTA_ENABLED 1); - 强制保留 Tramp 图传协议与 CRSF 遥测文本显示(与 OSD 联动);
- 禁用 SMBUS 电调电池监测、精简测距仪驱动,仅保留 Benewake TF 系列(TF02/TF03/TFmini/TFmini Plus)。
同时 hwdef.dat 对气压计做了最小化处理:仅探测 I2C BMP280(第 130 行),并允许无气压计初始化(HAL_BARO_ALLOW_INIT_NO_BARO 1)。理解这些裁剪有助于你判断哪些外围设备(如光流、SMBUS 电调)在该板上不被固件支持。
常见注意事项小结
- 组内速率一致性:4 路 PWM 分布在 TIM2/TIM3 两组,组内通道速率必须一致,混用 DShot 与 PWM 会导致输出异常;
- 串口默认协议:SERIAL3 默认 VTX(Tramp)、SERIAL6 默认 ESC 遥测,按 README 接 GPS/数传前需先改
SERIALx_PROTOCOL; - 电流校准:
BATT_CURR_MULT取决于所配电调/电流计(40A ESC 约 39),换电调后应重新校准; - 无板载罗盘:需要罗盘导航(如 Loiter/PosHold/RTL)时务必外接 I2C 罗盘并完成校准;
- 刷写顺序:首次务必用
with_bl.hex,否则后续无法通过地面站直接升级;升级一律使用.apj文件。
以上信息均可在本仓库 MambaF405v2 hwdef 目录 下的 README 与两个 .dat 配置文件中逐一核对,作为你接线、配参与排障的直接依据。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



