ArduPilot 移植板卡解析:PixPilot-V6(STM32H743)硬件特性、引脚定义与固件构建指南
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
导读
本文以 ArduPilot 仓库中的官方板卡文档 libraries/AP_HAL_ChibiOS/hwdef/PixPilot-V6/README.md 为主体,结合同目录下的 hwdef.dat 与 hwdef-bl.dat 源码定义,完整讲解 PixPilot-V6 飞控的硬件架构、UART 映射、全连接器引脚表、电池监控参数与 DroneCAN 能力。读完本文,你将能基于 ArduPilot 正确接线、配置该飞控并自行编译对应固件,同时理解 hwdef 文件是如何将 STM32H743 的每一个外设引脚"翻译"成 ArduPilot 设备的。
板卡概览:PixPilot-V6 是谁
PixPilot-V6 是由 MakeFlyEasy 出品、面向 ArduPilot 生态的 STM32H7 系列飞控。它采用"主控 + 协处理器"双 MCU 架构:主控为STM32H743VIT6,负责飞行控制、传感器采集与任务运算;协处理器为STM32F103C8T6(IOMCU,I/O 控制器),负责 PWM 输出与部分 I/O 管理。该板卡在 ArduPilot 的 HAL(硬件抽象层)中拥有完整移植,属于 ArduCopter、ArduPlane、ArduRover、ArduSub 等机型均可使用的通用飞控(README 末尾的[copywiki destination="plane,copter,rover,blimp"]也印证了这一点)。
硬件特性(Features)
根据官方 README,PixPilot-V6 的核心硬件特性如下:
- 主控:STM32H743VIT6 + STM32F103C8T6(IOMCU)双 MCU 架构;
- 三 IMU 冗余:两颗 ICM42688-P(SPI)+ 一颗 ICM40605(SPI),均通过 SPI 总线挂载;
- IMU 温控:内置加热器用于 IMU 温度控制,保证传感器工作温度稳定;
- IMU 减震:内部软橡胶减震球对所有内部 IMU 进行隔振;
- 双气压计:两颗 MS5611(SPI);
- 内置磁力计:IST8310(内部 I2C 总线);
- 非易失存储:内置 RAMTRON(SPI);
- 数据记录:microSD 卡槽(支持 FAT 文件系统);
- 串口:5 路 UART;
- USB:Type-C 接口(作为控制台主链路);
- 遥控输入:PPM 与 S.Bus 输入;
- PWM 输出:14 路;
- 扩展总线:两路 I2C 口与两路 FDCAN 口;
- 输出接口:一路 S.Bus 输出;
- 外设:外置蜂鸣器、内置 RGB LED、外部安全开关;
- 电源监控:双路电压与电流监控;
- 舵机供电:舵机轨 BEC 独立电源输入。
板载布局(Pinout)
官方 README 提供了两张引脚布局图,分别从三维视图与分解视图展示了板卡正反面接口分布、传感器 X/Y/Z 轴向标识、电源接口(+5V1~+5V7)、AUX1~AUX6辅助输出、CAN1/CAN2、GPS1/GPS2、POWER1/POWER2、TF 卡槽与 USB 接口的位置:
UART 映射:SERIAL0~SERIAL5 的硬件对应关系
ArduPilot 中的串口逻辑编号(SERIAL0~SERIAL5)由 hwdef.dat 中的SERIAL_ORDER决定:
SERIAL_ORDER OTG1 USART2 USART3 UART4 UART8 UART7 OTG2对照官方 README 的 UART Mapping 表:
| SERIAL 端口 | 硬件外设 | 物理用途 |
|---|---|---|
| SERIAL0 | OTG1(USB) | 控制台(Console),主 MAVLink 链路,通常走 USB |
| SERIAL1 | USART2 | TELEM1(数传 1) |
| SERIAL2 | USART3 | TELEM2(数传 2) |
| SERIAL3 | UART4 | GPS1(第一路 GPS) |
| SERIAL4 | UART8 | GPS2(第二路 GPS) |
| SERIAL5 | UART7 | USER(用户自由串口) |
注意SERIAL_ORDER末尾的OTG2不占用 SERIAL 编号,它服务于其他用途。此外在 hwdef 中还可看到 TELEM1/TELEM2 均带硬件流控引脚(CTS/RTS),例如PD3 USART2_CTS、PD4 USART2_RTS、PD11 USART3_CTS、PD12 USART3_RTS,为高波特率数传与 GPS 数据量需求提供了保障;GPS1(UART4 的 RX,PA1)与 GPS2(UART8 的 TX/RX,PE0/PE1)被标记为NODMA,意味着这两路串口不使用 DMA 传输。
连接器引脚定义(Connector pin assignments)
TELEM1、TELEM2 数传口
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | TX (OUT) | +3.3V |
| 3 | RX (IN) | +3.3V |
| 4 | GND | GND |
I2C1、I2C2 扩展口
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | SCL | +3.3V |
| 3 | SDA | +3.3V |
| 4 | GND | GND |
CAN1、CAN2 总线口
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | CAN_H | +12V |
| 3 | CAN_L | +12V |
| 4 | GND | GND |
安全开关与蜂鸣器口(Safety and buzzer port)
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | LED | +5V |
| 3 | SAFKEY | +5V |
| 4 | BUZZER | +5V |
| 5 | 3V+ | +3.3V |
| 6 | GND | GND |
该端口同时引出安全开关按键信号(SAFKEY)、状态 LED 与蜂鸣器驱动,配合 hwdef 中HAL_HAVE_SAFETY_SWITCH 1与蜂鸣器 PWM 引脚PA15 TIM2_CH1使用。
GPS1/I2C1、GPS2/I2C2 复合口
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | TX | +3.3V |
| 3 | RX | +3.3V |
| 4 | SCL | +3.3V |
| 5 | SDA | +3.3V |
| 6 | GND | GND |
GPS 与 I2C 复合在一个接口上,使 GPS 模块(如带罗盘的一体化 GPS)一次接线即可同时获得串口数据与 I2C 罗盘通道。这一点与 hwdef 中内部 I2C 掩码HAL_I2C_INTERNAL_MASK 1的设计思路一致——IST8310 挂在内部 I2C 总线上,而外部 I2C1/I2C2 留给用户设备。
Serial5 用户串口
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | TX (OUT) | +3.3V |
| 3 | RX (IN) | +3.3V |
| 4 | GND | GND |
Power1、Power2 电源监控口
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | VCC | +5V |
| 3 | CURRENT | +3.3V |
| 4 | VOLTAGE | +3.3V |
| 5 | GND | GND |
| 6 | GND | GND |
RC 输入接线说明
PixPilot-V6 的 RC 接收机信号应接入SBUS 输入引脚(位于舵机/输出 VCC 输入连接器旁),该引脚可解码所有兼容的 RC 协议。但需要注意:CRSF、FPort 等包含遥测回传的协议不能使用该引脚,必须连接到某一 UART 串口并在 ArduPilot 中进行相应串口协议配置(例如设置SERIALx_PROTOCOL为对应协议),才能同时实现控制信号与遥测数据的双向传输。
电池监控参数配置(Battery Monitoring)
官方文档说明电池监控参数出厂已预设好(默认值),但若参数丢失或被改动,可按以下步骤恢复。
第一步:启用模拟电压电流式电池监控:
BATT_MONITOR=4设置后重启飞控。
第二步:依次设置以下参数:
| 参数 | 值 |
|---|---|
| BATT_VOLT_PIN | 14 |
| BATT_CURR_PIN | 15 |
| BATT_VOLT_MULT | 18.0 |
| BATT_AMP_PERVLT | 24.0 |
| BATT2_VOLT_PIN | 13 |
| BATT2_CURR_PIN | 4 |
| BATT2_VOLT_MULT | 18.0 |
| BATT2_AMP_PERVLT | 24.0 |
这些参数与 hwdef.dat 中的默认宏定义一一对应:
define HAL_BATT_VOLT_PIN 14 define HAL_BATT_CURR_PIN 15 define HAL_BATT_VOLT_SCALE 18.0 define HAL_BATT_CURR_SCALE 24.0 define HAL_GPIO_PWM_VOLT_PIN 3其中BATT_VOLT_MULT(电压分压倍率)与BATT_AMP_PERVLT(电流检测每伏对应安培数)分别对应 hwdef 中的HAL_BATT_VOLT_SCALE 18.0与HAL_BATT_CURR_SCALE 24.0。模拟引脚编号(14、15、13、4 等)来自 hwdef 中定义的 ADC 输入通道(如PA2 BATT_VOLTAGE_SENS、PA3 BATT_CURRENT_SENS等),其编号在 AnalogIn.cpp 中按通道顺序编号。HAL_GPIO_PWM_VOLT_PIN 3则用于 PWM 输出电压检测,配合HAL_GPIO_PWM_VOLT_3v3 1将采样基准标定为 3.3V,用于估算舵机轨/BEC 供电电压。
DroneCAN 能力
PixPilot-V6 提供2 个独立 CAN 总线端口(CAN1/CAN2),每个端口都可以挂载多个 DroneCAN 外设(如 CAN 电调、CAN GPS、CAN 电源模块、CAN 舵机等)。两个端口对应 hwdef 中的两路 FDCAN 控制器:
# CAN1 PD0 CAN1_RX CAN1 PD1 CAN1_TX CAN1 # CAN2 PB6 CAN2_TX CAN2 PB12 CAN2_RX CAN2在 ArduPilot 中启用 DroneCAN 时,需要将相应 CAN 接口的CAN_P1_DRIVER与CAN_P2_DRIVER参数设置为 1(DroneCAN 协议),并可通过CAN_D1_UC_NODE等参数配置节点编号。
源码级深入:hwdef.dat 如何定义这块板卡
PixPilot-V6 的完整硬件定义位于 libraries/AP_HAL_ChibiOS/hwdef/PixPilot-V6/hwdef.dat,该文件是 ArduPilot ChibiOS HAL 板卡移植的核心。以下逐一解读关键配置。
MCU 与时钟
MCU STM32H7xx STM32H743xx OSCILLATOR_HZ 24000000板卡基于 STM32H743 系列,外部晶振 24 MHz。FLASH_SIZE_KB 2048声明 2 MB 闪存,FLASH_RESERVE_START_KB 128为固件保留 128 KB 起始空间(前 128 KB 预留给 bootloader 区域)。
板卡 ID 与 Bootloader
APJ_BOARD_ID AP_HW_PixPilot-V6该 ID 在 Tools/AP_Bootloader/board_types.txt 中注册为1083,是 ArduPilot 固件与引导程序校验板卡类型、防止刷错固件的依据。配套的 hwdef-bl.dat 则定义了引导加载程序(bootloader)自身的配置:FLASH_RESERVE_START_KB 0(bootloader 从零地址安装)、FLASH_BOOTLOADER_LOAD_KB 128(H743 扇区为 128 KB,固件装载到第 128 KB 处)。
传感器架构:三 IMU + 双气压计 + RAMTRON
SPI 设备表揭示了传感器的总线挂载关系:
SPIDEV ms5611 SPI1 DEVID5 BARO_CS MODE3 20*MHZ 20*MHZ SPIDEV ms5611_ext SPI4 DEVID2 BARO_EXT_CS MODE3 20*MHZ 20*MHZ SPIDEV ICM40605_ext SPI4 DEVID4 40605_EXT_CS MODE3 2*MHZ 8*MHZ SPIDEV ICM42688_ext SPI4 DEVID5 42688_EXT_CS MODE3 2*MHZ 8*MHZ SPIDEV ICM42688 SPI1 DEVID6 42688_CS MODE3 2*MHZ 8*MHZ SPIDEV ramtron SPI2 DEVID10 FRAM_CS MODE3 8*MHZ 8*MHZ SPIDEV sdcard SPI2 DEVID1 SDCARD_CS MODE0 400*KHZ 25*MHZ- 两颗 ICM42688-P 分别挂在SPI1与SPI4总线,ICM40605 挂在 SPI4,形成三 IMU 冗余;
- 两颗 MS5611 气压计同样分布于 SPI1 与 SPI4;
- RAMTRON 铁电存储(FRAM)挂在 SPI2,用于参数掉电保存;
- microSD 卡也挂在 SPI2(工作于 SPI 模式)。
对应的 IMU/气压计声明如下:
IMU Invensensev3 SPI:ICM42688 ROTATION_NONE IMU Invensensev3 SPI:ICM42688_ext ROTATION_NONE IMU Invensensev3 SPI:ICM40605_ext ROTATION_NONE BARO MS5611 SPI:ms5611 BARO MS5611 SPI:ms5611_ext关键宏:
define HAL_DEFAULT_INS_FAST_SAMPLE 7 define HAL_EKF_IMU_MASK_DEFAULT 7HAL_EKF_IMU_MASK_DEFAULT 7(二进制 0b111)意味着三颗 IMU 全部激活参与 EKF 融合,从而启用三个独立的 EKF 通道进行冗余投票。磁力计方面,内部 IST8310 通过内部 I2C(HAL_I2C_INTERNAL_MASK 1)挂载:
COMPASS IST8310 I2C:0:0x0E false ROTATION_ROLL_180IMU 加热器与磁场补偿
hwdef 中有一组与 README"IMU 温控"特性对应的配置:
define HAL_HAVE_IMU_HEATER 1 define HAL_IMU_TEMP_DEFAULT 45 define HAL_IMUHEAT_P_DEFAULT 50 define HAL_IMUHEAT_I_DEFAULT 0.07 define HAL_IMU_TEMP_MARGIN_LOW_DEFAULT 5 define AP_IOMCU_FORCE_ENABLE_HEATER 1默认将 IMU 温度控制在45°C,通过 IOMCU(F103)驱动加热器。由于该板没有加热器检测引脚,因此通过AP_IOMCU_FORCE_ENABLE_HEATER 1强制在 features 寄存器中声明加热器存在。同时,由于加热器工作会产生磁场干扰内部 IST8310,hwdef 专门定义了磁场补偿量:
define HAL_HEATER_MAG_OFFSET {AP_HAL::Device::make_bus_id(AP_HAL::Device::BUS_TYPE_I2C,0,0xe,0xa),Vector3f(0,2,-19)}即对内部 I2C 地址 0x0E 的磁力计施加 (0, 2, -19) 的偏移修正。
RAMTRON 参数存储
define HAL_WITH_RAMTRON 1 define HAL_STORAGE_SIZE 32768板载 RAMTRON 作为 ArduPilot 的参数存储介质,存储区大小为 32 KB,可显著提升参数擦写寿命与抗震动可靠性。
14 路 PWM 输出与 IOMCU
PWM 输出由 IOMCU(USART6 通信,IOMCU_UART USART6)配合主控定时器共同实现。hwdef 中前 6 路输出示例:
PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50) PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51) PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52) PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53) PD13 TIM4_CH2 TIM4 PWM(5) GPIO(54) PD14 TIM4_CH3 TIM4 PWM(6) GPIO(55)这些输出被映射为 GPIO(50) 起编号,用户可通过SERVOx_FUNCTION = -1将任意 PWM 输出当作 GPIO 使用。IOMCU 固件通过ROMFS io_firmware.bin Tools/IO_Firmware/iofirmware_lowpolh.bin打包进固件,开机时由主控加载。
状态指示与提示音
PB4 LED_RED OUTPUT OPENDRAIN GPIO(11) HIGH PB3 LED_GREEN OUTPUT OPENDRAIN GPIO(12) HIGH PB5 LED_BLUE OUTPUT OPENDRAIN GPIO(13) HIGH define AP_NOTIFY_GPIO_LED_RGB_RED_PIN 11 define AP_NOTIFY_GPIO_LED_RGB_GREEN_PIN 13 define AP_NOTIFY_GPIO_LED_RGB_BLUE_PIN 12 define AP_NOTIFY_GPIO_LED_RGB_ENABLED 1RGB LED 与蜂鸣器(PA15 TIM2_CH1 TIM2 GPIO(77) ALARM)共同构成 ArduPilot 的声光状态提示系统(AP_Notify),用于显示解锁、报错、GPS 定位等状态。
电源监测标志引脚
PB2 VDD_BRICK_nVALID INPUT PULLUP PB7 VDD_BRICK2_nVALID INPUT PULLUP PE10 VDD_5V_HIPOWER_nOC INPUT PULLUP PE15 VDD_5V_PERIPH_nOC INPUT PULLUP这些电源标志引脚让 MCU 感知主电源、第二电源以及 5V 高功率/外设电源的"无效/过流"状态,是双路电压电流监控与电源健康判断的底层支撑。
固件构建与刷写
PixPilot-V6 是 ArduPilot 官方支持的板卡之一,固件构建方式与其他板卡一致(详见 BUILD.md)。以构建 ArduCopter 固件为例:
./waf configure --board PixPilot-V6 ./waf copter构建产物位于build/PixPilot-V6/bin/,可使用 Mission Planner 或 QGroundControl 通过 USB(Type-C)以 DFU 或 bootloader 方式刷写。首次刷写建议先刷入与该板卡配套的 bootloader(由 hwdef-bl.dat 构建),再通过 USB 上传主固件;此后即可通过 USB 或遥测链路完成常规固件升级。刷写与接线前务必核对板卡丝印、本文的引脚表与 PixPilot-V6 README,避免电源反接或信号接错。
同系列板卡对比与选型参考
ArduPilot 仓库中同属 PixPilot 系列的板卡还有:
- PixPilot-V6PRO:同为 STM32H743VIT6 + IOMCU 架构,但 PWM 输出提升至 16 路,气压计改用 BMP388(SPI),内置蜂鸣器,支持四路电压电流监控(两路模拟 + 两路 CAN),并提供 4 个 CAN 端口(含两个带电源的 CAN-POWER 组合口)。其电池监控参数在 hwdef.dat 中直接以
HAL_BATT_MONITOR_DEFAULT 4、HAL_BATT_VOLT_PIN 14、HAL_BATT2_VOLT_PIN 13等宏预设,与 README 的恢复参数一致; - PixPilot-C3:基于 STM32F427VIT6 + STM32F103C8T6,双 ICM42688-P、BMP388 双气压计,14 路 PWM(前 8 路由 IOMCU 控制、后 6 路 AUX 支持 DShot),并额外提供 DSM 输入口;
- PixPilot-V3:上一代 STM32F4 平台板卡。
三者共享几乎一致的 UART 映射(SERIAL1~SERIAL5 分别对应 TELEM1、TELEM2、GPS1、GPS2、USER)与 18.0V/24.0A 的电源监控标定体系,迁移飞控时大部分接线习惯与参数可直接沿用。
小结
PixPilot-V6 是典型的 STM32H743 中高端 ArduPilot 飞控:三 IMU + 双气压计 + 内置罗盘构成高冗余传感器组,IMU 加热与减震保证传感器输出稳定,14 路 PWM、5 串口、2 路 I2C 与 2 路 FDCAN 提供了充裕的外设扩展空间,而完整的 hwdef 定义使其在 ArduPilot 生态中即插即用。无论是安装接线、恢复电池监控参数,还是自行编译固件,本文给出的表格、参数与源码依据(hwdef.dat、hwdef-bl.dat)都可以作为直接的操作手册与排障参考。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考