ArduPilot ARK_FPV 飞控硬件详解:H743 硬件定义、引脚映射与固件烧录全流程
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
本文基于 ArduPilot 仓库中的libraries/AP_HAL_ChibiOS/hwdef/ARK_FPV/硬件定义目录(README、hwdef.dat、defaults.parm 等文件),完整解析 ARK FPV 飞控(STM32H743,480MHz)的传感器布局、全部接插件引脚表、串口/RC/电池/OSD/DSHOT 等关键外设的固件级实现,以及从 DFU 首刷到源码编译烧录的操作流程。读完后你可以准确理解该板卡每个串口、PWM 定时器、I2C 总线的分配逻辑,并能独立完成自定义固件构建与调试口改造。
一、板卡概览:硬件规格与接口一览
ARK FPV 是 ArduPilot 4.7 系列新增支持的自主飞行控制器(见 ArduCopter/ReleaseNotes.txt 中 "ARK_FPV autopilot support" 条目),其硬件定义位于 libraries/AP_HAL_ChibiOS/hwdef/ARK_FPV/ 目录。核心硬件规格如下:
处理器
- STM32H743 32 位处理器,主频 480MHz
- 2MB Flash、1MB RAM
传感器
- Invensense IIM-42653(硬件 rev 0)或 ST LSM6DSV32X(硬件 rev 1)IMU,带加热电阻
- Bosch BMP390 气压计
- ST IIS2MDC 磁力计(板载指南针)
电源
- 输入范围 5.5V–54V(2S–12S 锂电池)
- 12V / 2A 输出(POWER AUX 接口,默认开启,可通过 RELAY1 开关控制)
- 5V / 2A 输出(主系统约 300mA、加热约 200mA)
外部接口
| 接口 | 信号 | 连接器 |
|---|---|---|
| Micro SD | 日志存储 | 板载 |
| USB-C | VBUS In、USB | 板载 |
| PWM | VBAT In、模拟电流输入、Telem RX、4 路 PWM(支持双向 DSHOT) | JST-GH 8 Pin |
| PWM AUX | 5 路 PWM(支持双向 DSHOT) | JST-SH 6 Pin |
| RC Input | 5V Out、UART | JST-GH 4 Pin |
| POWER AUX | 12V Out、VBAT In/Out | JST-GH 3 Pin |
| TELEM | 5V Out、带流控的 UART | JST-GH 6 Pin |
| GPS | 5V Out、UART、I2C | JST-GH 6 Pin |
| CAN | 5V Out、CAN | JST-GH 4 Pin |
| VTX | 12V Out、UART TX/RX、UART RX | JST-GH 6 Pin |
| SPI | OSD 或外部 IMU,5V Out、SPI | JST-SH 8 Pin |
| DEBUG | 3.3V Out、UART、SWD | JST-SH 6 Pin |
板卡尺寸为 3.6 × 3.6 × 0.8 cm,带 MicroSD 卡后重量 7.5g。
二、完整引脚定义(Pinout)
以下各表与 README.md 中的引脚文档一一对应。
PWM UART4 — 8 Pin JST-GH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | VBAT IN | 5.5V-54V |
| 2 | CURR_IN_EXT | 3.3V |
| 3 | UART4_RX_EXT | 3.3V |
| 4 | FMU_CH1_EXT | 3.3V |
| 5 | FMU_CH2_EXT | 3.3V |
| 6 | FMU_CH3_EXT | 3.3V |
| 7 | FMU_CH4_EXT | 3.3V |
| 8 | GND | GND |
RC — 4 Pin JST-GH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 5.0V | 5.0V |
| 2 | USART6_RX_IN_EXT | 3.3V |
| 3 | USART6_TX_OUTPUT_EXT | 3.3V |
| 4 | GND | GND |
PWM AUX — 6 Pin JST-SH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | FMU_CH5_EXT | 3.3V |
| 2 | FMU_CH6_EXT | 3.3V |
| 3 | FMU_CH7_EXT | 3.3V |
| 4 | FMU_CH8_EXT | 3.3V |
| 5 | FMU_CH9_EXT | 3.3V |
| 6 | GND | GND |
POWER AUX — 3 Pin JST-GH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 12.0V | 12.0V |
| 2 | GND | GND |
| 3 | VBAT IN/OUT | 5.5V-54V |
CAN — 4 Pin JST-GH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 5.0V | 5.0V |
| 2 | CAN1_P | 5.0V |
| 3 | CAN1_N | 5.0V |
| 4 | GND | GND |
GPS — 6 Pin JST-GH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 5.0V | 5.0V |
| 2 | USART1_TX_GPS1_EXT | 3.3V |
| 3 | USART1_RX_GPS1_EXT | 3.3V |
| 4 | I2C1_SCL_GPS1_EXT | 3.3V |
| 5 | I2C1_SDA_GPS1_EXT | 3.3V |
| 6 | GND | GND |
TELEM — 6 Pin JST-GH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 5.0V | 5.0V |
| 2 | UART7_TX_TELEM1_EXT | 3.3V |
| 3 | UART7_RX_TELEM1_EXT | 3.3V |
| 4 | UART7_CTS_TELEM1_EXT | 3.3V |
| 5 | UART7_RTS_TELEM1_EXT | 3.3V |
| 6 | GND | GND |
VTX — 6 Pin JST-GH
注意:该连接器的引脚顺序与标准 HD VTX 线缆不完全一致。
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 12.0V | 12.0V |
| 2 | GND | GND |
| 3 | UART5_TX_TELEM2_EXT | 3.3V |
| 4 | UART5_RX_TELEM2_EXT | 3.3V |
| 5 | USART2_RX_TELEM3_EXT | 3.3V |
| 6 | GND | GND |
SPI(OSD 或外部 IMU)— 8 Pin JST-SH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 5.0V | 5.0V |
| 2 | SPI6_SCK_EXT | 3.3V |
| 3 | SPI6_MISO_EXT | 3.3V |
| 4 | SPI6_MOSI_EXT | 3.3V |
| 5 | SPI6_nCS1_EXT | 3.3V |
| 6 | SPI6_DRDY1_EXT | 3.3V |
| 7 | SPI6_nRESET_EXT | 3.3V |
| 8 | GND | GND |
飞控 Debug — 6 Pin JST-SH
| Pin | 信号名 | 电压 |
|---|---|---|
| 1 | 3V3_FMU | 3.3V |
| 2 | USART3_TX_DEBUG | 3.3V |
| 3 | USART3_RX_DEBUG | 3.3V |
| 4 | FMU_SWDIO | 3.3V |
| 5 | FMU_SWCLK | 3.3V |
| 6 | GND | GND |
三、串口映射与调试口改造
SERIAL 端口分配
| 名称 | 功能 |
|---|---|
| SERIAL0 | USB |
| SERIAL1 | UART7(Telem) |
| SERIAL2 | UART5(DisplayPort HD VTX) |
| SERIAL3 | USART1(GPS1) |
| SERIAL4 | USART2(用户口,HD VTX 上的 SBUS 引脚,仅 RX) |
| SERIAL5 | UART4(ESC Telem,仅 RX) |
| SERIAL6 | USART6(RC 输入) |
| SERIAL7 | OTG2(SLCAN) |
所有 UART 均支持 DMA;任意 UART 都可以通过修改其 protocol 参数重新分配用途。
这一映射在 hwdef.dat 中由SERIAL_ORDER OTG1 UART7 UART5 USART1 USART2 UART4 USART6 OTG2一行定义,顺序与上表一一对应。此外,硬件定义还通过DEFAULT_SERIALx_PROTOCOL宏为部分端口预设了默认协议,例如:
DEFAULT_SERIAL2_PROTOCOL SerialProtocol_MSP_DisplayPort:VTX 口默认启用 MSP DisplayPort OSD 输出,同时AP_MSP_VIDEOTX_ENABLED 1打开相关功能;DEFAULT_SERIAL4_PROTOCOL SerialProtocol_None:USART2(HD VTX 上的 SBUS RX)默认为空闲,留给用户自定义;DEFAULT_SERIAL5_PROTOCOL SerialProtocol_ESCTelemetry、HAL_WITH_ESC_TELEM 1:UART4 默认作为 ESC 遥测口(115200 波特率),只连 RX;DEFAULT_SERIAL6_PROTOCOL SerialProtocol_RCIN:USART6 默认作为 RC 输入口。
把 Debug 口(USART3)用作普通串口
调试连接器上的 USART3 默认被配置为调试控制台(对应 hwdef.dat 中的STDOUT_SERIAL SD3/STDOUT_BAUDRATE 57600)。如需将其改造成第 8 个用户串口(SERIAL8),需要修改hwdef.dat:
- 在
SERIAL_ORDER列表末尾追加USART3:
SERIAL_ORDER OTG1 UART7 UART5 USART1 USART2 UART4 USART6 OTG2 USART3- 删除调试控制台配置行:
STDOUT_SERIAL SD3 STDOUT_BAUDRATE 57600注意:该改动需要自行编译定制固件(构建方法见第六节"加载固件"),不能仅通过地面站参数完成。
四、RC 输入配置
RC 输入配置在 RX6(USART6_RX)引脚上,支持除 PPM 以外的所有 RC 协议,SERIAL6_PROTOCOL默认为 "23"(RCIN):
- SBUS / DSM / SRXL:接 RX6 引脚即可;
- FPort:需额外连接 TX6,并将
SERIAL6_OPTIONS设为 "7"; - CRSF:除 RX6 外还需连接 TX6,可自动提供飞控遥测回传;
- SRXL2:需连接 TX6,可自动提供遥测,将
SERIAL6_OPTIONS设为 "4"。
对应固件实现即 hwdef.dat 中PC6 USART6_TX/PC7 USART6_RX以及DEFAULT_SERIAL6_PROTOCOL SerialProtocol_RCIN三行定义。
五、电池监测
板卡内置电压分压传感器,并在 ESC 连接器(PWM UART4)上引出外部电流传感器模拟输入(PIN 2 CURR_IN_EXT),支持最高 12S 锂电池。默认电池参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
| BATT_MONITOR | 4 | 模拟电压 + 电流传感器 |
| BATT_VOLT_PIN | 9 | 电压 ADC 引脚 |
| BATT_CURR_PIN | 12 | 电流 ADC 引脚 |
| BATT_VOLT_SCALE | 21 | 电压分压比 |
| BATT_AMP_PERVLT | 120 | 每伏对应安培数 |
这些默认值在 hwdef.dat 中有直接对应:PB0 BATT_VOLTAGE_SENS ADC1 SCALE(1)、PC2 BATT_CURRENT_SENS ADC1 SCALE(1),并通过HAL_BATT_VOLT_PIN 9、HAL_BATT_CURR_PIN 12、HAL_BATT_VOLT_SCALE 21、HAL_BATT_CURR_SCALE 120、HAL_BATT_MONITOR_DEFAULT 4五个宏固化进固件。此外 ADC 通道还定义了SCALED1_V3V3(3V3 电源监测)、VDD_5V_SENS(5V 电源监测)与FMU_SERVORAIL_VCC_SENS(12V 轨监测,分压系数 7.66)。
六、指南针、OSD 与 PWM 输出
指南针
板载 IIS2MDC 指南针挂在 I2C4 上。从 hwdef.dat 可见:I2C4_SCL/SCL复用 PF14/PF15,传感器声明为COMPASS IIS2MDC I2C:2:0x1E false ROTATION_NONE(I2C 总线序号 2 即 I2C_ORDER 中的第三路 I2C4),并开启AP_COMPASS_PROBING_ENABLED 1与AP_COMPASS_IIS2MDC_ENABLED 1支持运行时探测。全板 I2C 总线顺序为I2C_ORDER I2C1 I2C2 I2C4:I2C1 供 GPS 外接设备使用,I2C2 挂内部 BMP390 气压计(声明为BARO BMP388 I2C:1:0x76,地址 0x76)。
OSD 支持
该飞控在 6 针 DJI 兼容 JST-SH 接头上提供 MSP-DisplayPort 输出,对应DEFAULT_SERIAL2_PROTOCOL SerialProtocol_MSP_DisplayPort、OSD_ENABLED 1和HAL_OSD_TYPE_DEFAULT 5(MSP Displayport)三项定义。
PWM / DSHOT 输出分组
全部 9 路输出均支持 PWM 与 DShot;其中电机 1-4 支持双向 DSHOT(Bidirectional-DSHOT)。同一电机组内的输出必须统一使用 PWM 或 DShot,分组如下:
- 电机 1-4:Group1(TIM5 定时器)
- 电机 5-8:Group2(TIM8 定时器)
- 电机 9:Group3(TIM4 定时器)
hwdef.dat 中的定义印证了该分组:PI0/PH12/PH11/PH10对应 TIM5_CH4~CH1 并带BIDIR标记(电机 1-4),PI5/PI6/PI7/PI2为 TIM8(电机 5-8),PD12为 TIM4_CH1(电机 9)。文件末尾还有一条关键约束DMA_NOSHARE SPI* TIM5* TIM8*——双向 DShot 定时器不能共享 DMA 通道,这是 H7 上保证电调通信与 IMU/SPI 读取不冲突的 DMA 优先级设计(另有DMA_PRIORITY SDMMC* SPI*优先保障 SD 日志与 IMU 数据流)。
七、12V 外设输出(POWER AUX)与板载继电器
POWER AUX 连接器上的 12V 引脚由一个 BEC 使能脚控制,该引脚预映射为 GPIO 81 并配置为 RELAY1,默认通过RELAY1_DEFAULT = 1保持开启:
- 将默认状态改为关闭:设置
RELAY1_DEFAULT= 0; - 由遥控器开关控制:设置
RELAY1_FUNCTION= 1(Relay),并将RCx_OPTION= 28(Relay1 On/Off)分配到希望用作开关的通道。
同一连接器上的 VBAT 引脚是电池直通,不受固件控制。
固件侧对应 hwdef.dat 中PG4 VDD_12V_PERIPH_EN OUTPUT HIGH GPIO(81)和RELAY1_PIN_DEFAULT 81;而RELAY1_DEFAULT 1则写在 defaults.parm 中,该文件还默认启用 CAN(CAN_P1_DRIVER 1),与 hwdef.dat 中PD0/PD1 CAN1_RX/TX的 CAN1 引脚定义配合,构成板载 CAN 总线的完整支持。
八、IMU 与加热控制(源码级细节)
IMU 挂在 SPI1 上,hwdef.dat 同时注册了两颗候选 IMU 以兼容不同硬件版本:
SPIDEV iim42653 SPI1 DEVID1 IMU1_CS MODE3 2*MHZ 16*MHZ SPIDEV lsm6dsv SPI1 DEVID2 IMU1_CS MODE3 2*MHZ 8*MHZ IMU Invensensev3 SPI:iim42653 ROTATION_YAW_270 IMU LSM6DSV SPI:lsm6dsv ROTATION_YAW_270两颗芯片共用IMU1_CS(PI9)片选与IMU1_DRDY(PF2)数据就绪中断,安装姿态为ROTATION_YAW_270。硬件版本通过 ID 引脚区分:PG0 HW_VER_REV_DRIVE OUTPUT LOW驱动、PH4 HW_REV_SENS ADC3读取。
IMU 加热由PB10 HEATER_EN OUTPUT LOW GPIO(80)实现,相关宏定义了加热控制环路参数:HAL_IMU_TEMP_DEFAULT 45(目标温度 45℃)、HAL_IMUHEAT_P_DEFAULT 50、HAL_IMUHEAT_I_DEFAULT 0.07(PID 参数),与 README 中"带加热电阻"的描述一致。
SPI6 则预留给外部设备:EXT1_CS(PI10)与DRDY_ADIS16507(PD11,GPIO 93)已接线,文件中注释掉的adis16507SPIDEV 行表明该总线可按需扩展 ADIS 系列高精度 IMU。
此外,hwdef.dat 还包含几项对可靠性重要的一级设计,值得注意:
DEFAULTGPIO OUTPUT LOW PULLDOWN:所有未复用引脚默认低电平,避免 ESD 问题;FLASH_RESERVE_START_KB 128与HAL_STORAGE_SIZE 32768/STORAGE_FLASH_PAGE 14:前 128KB 留给 Bootloader,最后两页(32KB)用作参数/日志 Flash 存储;USE_ALT_RAM_MAP 1:为兼容 PX4 Bootloader 使用不同的 RAM 映射;HAL_OS_FATFS_IO 1与 common.inc 中的 SDMMC2 引脚定义:启用 microSD 上的 FAT 文件系统;- 三个 RGB 状态灯(GPIO 90/91/92)挂接到 AP_Notify,
PE6 nARMED输出用于上锁指示。
九、板卡注册与固件加载
板卡标识
板卡在构建系统中通过 common.inc 的APJ_BOARD_ID TARGET_HW_ARK_FPV注册,Flash 大小 2048KB,晶振 16MHz,并启用ENABLE_DFU_BOOT 1以支持 DFU 首刷 Bootloader。该板级 ID 在 Tools/AP_Bootloader/board_types.txt 中登记为数值 59(TARGET_HW_ARK_FPV 59),并在 Tools/autotest/validate_board_list.py 的保留 ID 校验列表中登记(对应 "Reserved ARK [BL] FPV"),保证 .apj 固件与板卡严格绑定、防止刷错。
加载固件
首次烧录(DFU):按住 BOOT 按钮插入 USB 进入 DFU 模式,使用任意 DFU 工具刷入 Bootloader(可从 ArduPilot 官方固件服务器的 Bootloader 目录获取)。
日常升级:首次刷入后,可用任意 ArduPilot 地面站软件升级固件,务必使用*.apj固件文件(APJ 格式携带 board ID,可防刷错)。
从源码构建:
./waf configure --board ARK_FPV --bootloader ./waf bootloader然后使用 ST-Link 将 Bootloader 烧到0x08000000。之后构建并直接经 USB-C 上传飞控固件:
./waf configure --board ARK_FPV ./waf copter --upload其中--board ARK_FPV指向本文所述的libraries/AP_HAL_ChibiOS/hwdef/ARK_FPV/硬件定义目录;--bootloader构建产物对应目录中 hwdef-bl.dat(Bootloader 专用硬件定义,固件加载偏移 128KB)。
十、小结
ARK_FPV 的硬件定义是 ArduPilot ChibiOS HAL 中一块典型"H7 级 FPV 竞速飞控"的完整范例:
- 串口侧:8 路 SERIAL 由
SERIAL_ORDER统一定义,Telem(流控)、DisplayPort VTX、GPS、RC 输入、ESC 遥测各得其所,任意端口协议可通过参数重分配; - 电机侧:TIM5/TIM8/TIM4 三组定时器覆盖 9 路 PWM/DSHOT,前 4 路支持双向 DSHOT,DMA 隔离策略保证 IMU 与 SD 日志实时性;
- 传感侧:双 IMU 候选(IIM-42653 / LSM6DSV32X)+ 加热控制、BMP390 气压计、IIS2MDC 板载指南针、12S 电池模拟监测;
- 运维侧:DFU 首刷 + APJ 升级 + 源码
./waf构建三条路径,Board ID 59 保证固件与硬件匹配。
以上结论均可在 libraries/AP_HAL_ChibiOS/hwdef/ARK_FPV/ 目录下的 README.md、hwdef.dat、common.inc、defaults.parm 四个文件中逐条对照验证。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考