PixSurveyA2-IND 飞控硬件解析:ArduPilot ChibiOS 板级支持、引脚配置与调参指南
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
PixSurveyA2-IND 是一款基于 STM32H743 的 ArduPilot 兼容飞控,定位于工业测绘与巡检等对传感器冗余要求较高的固定翼/多旋翼应用。本文以其官方板级文档 libraries/AP_HAL_ChibiOS/hwdef/PixSurveyA2-IND/README.md 为核心骨架,结合 hwdef.dat、hwdef-bl.dat 与 defaults.parm 等仓库源码,系统讲解该板的硬件规格、接口定义、UART 映射、PWM/GPIO 分配、电池监测配置、DroneCAN 能力与固件加载流程,帮助你完成从接线到参数配置的完整落地。
PixSurveyA2-IND 飞控板引脚图
板卡概述与硬件规格
PixSurveyA2-IND 飞控由 MakeFlyEasy 设计,经多家经销商销售。它在 ArduPilot 仓库中拥有完整的板级定义(board definition),位于libraries/AP_HAL_ChibiOS/hwdef/PixSurveyA2-IND/目录,编译固件时由 chibios_hwdef.py 将 hwdef.dat 转换为目标板配置头文件。
官方文档列出的核心特性如下:
- 主控 MCU:STM32H743VIT6(Cortex-M7,2MB Flash)
- 协处理器:STM32F103C8T6 作为 IOMCU(I/O 主控)
- 三冗余 IMU:2 颗 ICM-42652(SPI)+ 1 颗 ICM42688-P(SPI)
- IMU 内置加热器用于温度控制
- 内部软橡胶阻尼球隔离全部板载 IMU
- 双气压计:2 颗 BMP388(SPI)
- 板载 RAMTRON 非易失存储(SPI)
- microSD 卡槽
- 5 路 UART
- USB(Type-C)
- PPM 与 S.Bus 输入
- 14 路 PWM 输出
- 两路 I2C 端口与两路 FDCAN 端口,含多种连接器形态
- S.Bus 输出
- 板载蜂鸣器
- 双电源模块输入:一路模拟、一路 CAN
- 伺服供电轨(servo rail)独立 BEC 供电输入
- 外部安全开关
从 hwdef.dat 可以看到这些特性的板级实现细节:MCU STM32H7xx STM32H743xx声明主控型号,24MHz 晶振(OSCILLATOR_HZ 24000000),固件APJ_BOARD_ID AP_HW_PixSurveyA2-IND,Flash 共 2048KB 并预留起始 128KB 给引导加载程序(FLASH_RESERVE_START_KB 128)。
双处理器架构:主 MCU 与 IOMCU
该板采用 ArduPilot 经典的双芯片架构:主 MCU 运行飞控固件并负责 IMU/气压计等高速 SPI 传感器采样;IOMCU(STM32F103C8T6)负责 PWM 输出、RC 输入捕获、安全开关与 LED 等实时性要求高的 I/O 任务。
hwdef.dat 中通过以下配置绑定两芯片之间的通信通道:
# UART for IOMCU IOMCU_UART USART6 PC6 USART6_TX USART6 PC7 USART6_RX USART6IOMCU 固件通过 ROMFS 直接嵌入主固件中:
ROMFS io_firmware.bin Tools/IO_Firmware/iofirmware_lowpolh.bin ROMFS io_firmware_dshot.bin Tools/IO_Firmware/iofirmware_dshot_highpolh.bin其中第二行对应define HAL_WITH_IO_MCU_DSHOT 1,即 IOMCU 侧输出支持 DShot 协议。
传感器子系统:三 IMU + 双气压计 + 加热器
IMU 布局与旋转
三颗 IMU 全部通过 SPI 挂接,且在 hwdef.dat 中声明为同一驱动(Invensensev3),旋转统一为ROTATION_PITCH_180:
IMU Invensensev3 SPI:ICM42688 ROTATION_PITCH_180 IMU Invensensev3 SPI:ICM42688_ext ROTATION_PITCH_180 IMU Invensensev3 SPI:ICM40605_ext ROTATION_PITCH_180注意:官方规格书写的是 2× ICM-42652 + 1× ICM42688-P,而 hwdef 中第三颗 IMU 的器件名为 ICM40605(ICM-40605 与 ICM-42652 系列同属 Invensensev3 驱动族)。三颗 IMU 分布在 SPI1 与 SPI4 两条总线上,并配置了快速采样:
define HAL_DEFAULT_INS_FAST_SAMPLE 7结合define HAL_EKF_IMU_MASK_DEFAULT 7,三颗 IMU 全部参与 EKF 估计,默认启用三条 EKF 航向通道,最大化冗余。
板级 SPI 设备表
hwdef.dat 完整定义了各 SPI 片选与时钟:
SPIDEV BMP388 SPI1 DEVID3 BARO_CS MODE3 20*MHZ 20*MHZ SPIDEV BMP388_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其中 SPI1 承载 1 颗 IMU + 1 颗 BMP388,SPI4 承载 2 颗 IMU + 1 颗扩展 BMP388,SPI2 挂载 RAMTRON FRAM。相应的两路气压计声明为:
BARO BMP388 SPI:BMP388 BARO BMP388 SPI:BMP388_extIMU 加热器与磁场补偿
该板为 IMU 提供内置加热器,通过恒温控制降低温漂。hwdef 中的默认 PID 恒温参数为:
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即默认将 IMU 温度稳定在 45°C。由于加热器线圈会产生磁场,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)}此外,该板没有加热器检测引脚,因此通过define AP_IOMCU_FORCE_ENABLE_HEATER 1强制经 IOMCU features 寄存器使能加热。
RAMTRON 参数存储
板载 RAMTRON 用于参数存储,hwdef 启用:
define HAL_WITH_RAMTRON 1 define HAL_STORAGE_SIZE 32768存储区大小 32KB,配合 FAT 文件系统支持(define HAL_OS_FATFS_IO 1)与AP_BOOTLOADER_FLASH_FROM_SD_ENABLED,允许从 microSD 卡直接刷写固件。
UART 映射与串口规划
PixSurveyA2-IND 提供 5 路 UART,官方 README 的映射如下:
| 串口 | 外设 | 默认用途 | DMA 能力 |
|---|---|---|---|
| SERIAL0 | USB(OTG1) | console / 主 MAVLink | — |
| SERIAL1 | USART2 | Telem1(MAVLink2) | 全双工 DMA |
| SERIAL2 | USART3 | Telem2(MAVLink2) | 全双工 DMA |
| SERIAL3 | UART4 | GPS1 | TX 支持 DMA |
| SERIAL4 | UART8 | GPS2 | RX 支持 DMA |
| SERIAL5 | UART7 | USER(用户扩展) | — |
hwdef.dat 中SERIAL_ORDER OTG1 USART2 USART3 UART4 UART8 UART7 OTG2决定了上述编号顺序,并给出各串口引脚(如PD5 USART2_TX USART2、PD6 USART2_RX USART2)。GPS 串口标注NODMA(UART4 的 RX、UART8 的 TX 无 DMA)。另外 OTG2(第二个 USB)被配置为HAL_OTG2_PROTOCOL SerialProtocol_SLCAN,可作为 SLCAN 端口用于 CAN 调试。
连接器引脚定义
官方文档给出了各连接器的完整引脚定义,接线时务必对照。
POWER_CAN1 端口(6 针)
| PIN | SIGNAL | VOLT |
|---|---|---|
| 1 | VCC | +5V |
| 2 | VCC | +5V |
| 3 | CAN_H | +12V |
| 4 | CAN_L | +12V |
| 5 | GND | GND |
| 6 | GND | GND |
TELEM1 / TELEM2 端口(4 针)
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | TX (OUT) | +3.3V |
| 3 | RX (IN) | +3.3V |
| 4 | GND | GND |
I2C1 / I2C2 端口(4 针)
| PIN | SIGNAL | VOLT |
|---|---|---|
| 1 | VCC | +5V |
| 2 | SCL | +3.3V |
| 3 | SDA | +3.3V |
| 4 | GND | GND |
CAN1 / CAN2 端口(4 针)
| PIN | SIGNAL | VOLT |
|---|---|---|
| 1 | VCC | +5V |
| 2 | CAN_H | +12V |
| 3 | CAN_L | +12V |
| 4 | GND | GND |
Safety 与蜂鸣器端口(标注 SWITCH,3 针)
| PIN | SIGNAL | VOLT |
|---|---|---|
| 1 | VCC | +5V |
| 2 | LED | +5V |
| 3 | Safety Switch | +5V |
GPS1/I2C1、GPS2/I2C2 端口(6 针)
| 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 |
Serial5 端口(4 针)
| Pin | Signal | Volt |
|---|---|---|
| 1 | VCC | +5V |
| 2 | TX (OUT) | +3.3V |
| 3 | RX (IN) | +3.3V |
| 4 | GND | GND |
Power2 ADC 端口(6 针)
| PIN | SIGNAL | VOLT |
|---|---|---|
| 1 | VCC | +5V |
| 2 | VCC | +5V |
| 3 | CURRENT | +3.3V |
| 4 | VOLTAGE | +3.3V |
| 5 | GND | GND |
| 6 | GND | GND |
RC 输入配置
该板的 SBUS 输入引脚(位于伺服输出/输出供电连接器旁)可解码所有兼容的单向 RC 协议(PPM、SBUS 等)。
若需使用 CRSF、FPort、SRXL2 等带有遥测回传的协议,需要接入支持 DMA 的全双工 UART。README 给出的推荐做法是使用 SERIAL2(USART3,全双工 DMA),参数设置如下:
- CRSF / ELRS:
SERIAL2_PROTOCOL = 23,SERIAL2_OPTIONS = 0 - FPort:
SERIAL2_PROTOCOL = 23,SERIAL2_OPTIONS = 15 - SRXL2:
SERIAL2_PROTOCOL = 23,SERIAL2_OPTIONS = 4,仅需连接 TX 引脚
其中SERIAL2_PROTOCOL=23选择 RCIN 串行协议接收模式,SERIAL2_OPTIONS按协议要求配置反向/半双工等选项。
PWM 输出与输出分组
该板最多支持 14 路 PWM 输出,全部输出支持常规 PWM 格式,且均支持 DShot;其中输出 9–14 支持双向 DShot(Bi-Directional DShot,可用于遥测回读)。同一定时器组内的输出必须使用相同输出速率;若组内任一通道使用 DShot,则该组所有通道都必须使用 DShot。
输出分组如下:
- 输出 1、2 → 组 1
- 输出 3、4 → 组 2
- 输出 5、6、7、8 → 组 3
- 输出 9–12 → 组 4
- 输出 13、14 → 组 5
在 hwdef.dat 中,主 MCU 直出的 6 路 PWM 映射到 TIM1/TIM4:
PE14 TIM1_CH4 TIM1 PWM(1) GPIO(50) PE13 TIM1_CH3 TIM1 PWM(2) GPIO(51) BIDIR PE11 TIM1_CH2 TIM1 PWM(3) GPIO(52) PE9 TIM1_CH1 TIM1 PWM(4) GPIO(53) BIDIR PD13 TIM4_CH2 TIM4 PWM(5) GPIO(54) BIDIR PD14 TIM4_CH3 TIM4 PWM(6) GPIO(55) BIDIR其中标注BIDIR的通道即支持双向 DShot。输出 7–14 由 IOMCU 提供,IOMCU 固件(iofirmware_dshot_highpolh.bin)同样支持 DShot。
GPIO 映射
所有 PWM 输出均可复用为 GPIO(用于继电器、相机触发、转速计等)。使用时需将对应输出的SERVOx_FUNCTION设为 -1。GPIO 编号遵循 ArduPilot/HAL_PX4 惯例,主 MCU 直出通道(FMU 侧)编号从 50 起,IOMCU 通道从 101 起,整理如下:
| 通道(PWM 输出) | 信号名 | GPIO 值 | 所属 MCU |
|---|---|---|---|
| Out1 | M1 / AuxOut1 | 50 | FMU(主 MCU) |
| Out2 | M2 / AuxOut2 | 51 | FMU |
| Out3 | M3 / AuxOut3 | 52 | FMU |
| Out4 | M4 / AuxOut4 | 53 | FMU |
| Out5 | M5 / AuxOut5 | 54 | FMU |
| Out6 | M6 / AuxOut6 | 55 | FMU |
| Out7 | M7 | 101 | IO(IOMCU) |
| Out8 | M8 | 102 | IO |
| Out9 | M9 | 103 | IO |
| Out10 | M10 | 104 | IO |
| Out11 | M11 | 105 | IO |
| Out12 | M12 | 106 | IO |
| Out13 | M13 | 107 | IO |
| Out14 | M14 | 108 | IO |
在参数中(如RELAY_PIN、CAMERA_TRIGG_PIN等)填写上表 GPIO 值即可将对应通道用作数字 I/O。
电池监测
该板默认已配置好双电池监测参数;若参数被改动或丢失,按 README 恢复:
- 设置主电池监测类型:
BATT_MONITOR = 8(模拟电压与电流)
- 设置第二路电池监测类型:
BATT2_MONITOR = 4
- 重启飞控后配置第二路模拟采样参数:
BATT2_VOLT_PIN = 13BATT2_CURR_PIN = 4BATT2_VOLT_MULT = 18.0BATT2_AMP_PERVLT = 24.0
注意:OSD 默认显示第一路电池;如需在 OSD 显示第二路,需要在 OSD 参数中单独配置第二电池面板。
上述默认值在 hwdef.dat 中已有对应定义,编译时直接成为出厂默认参数:
define HAL_BATT_MONITOR_DEFAULT 8 define HAL_BATT2_MONITOR_DEFAULT 4 define HAL_BATT2_VOLT_PIN 13 define HAL_BATT2_CURR_PIN 4 define HAL_BATT2_VOLT_SCALE 18.0 define HAL_BATT2_CURR_SCALE 24.0底层实现上,AP_BattMonitor.cpp 在初始化时会通过HAL_BATT_MONITOR_DEFAULT设置默认监测类型,并依据类型选择后端驱动(SMBus、模拟等)。第一路电源对应板上模拟电源接口(PA2 BATT_VOLTAGE_SENS、PA3 BATT_CURRENT_SENS),第二路对应 CAN 电源模块(见下节)。
DroneCAN 能力
板卡提供 6 个 CAN 接口形态,构成两条相互独立的 CAN 总线(CAN1、CAN2),每条总线上可挂接多个 CAN 外设;另有 2 个独立的 CAN 电源端口(CAN POWER),方便直接接入 CAN 电源模块(CAN-PMU)。
defaults.parm 默认开启两路 CAN 驱动:
# turn on the CAN power monitoring(default) CAN_P1_DRIVER 1 CAN_P2_DRIVER 1即出厂默认启用 CAN1/CAN2 两个 DroneCAN 接口。结合 hwdef.dat 中的HAL_OTG2_PROTOCOL SerialProtocol_SLCAN,第二路 USB(OTG2)可配置为 SLCAN 网关,用普通 USB 转串口工具直接调试 CAN 总线设备。CAN 外设(如 DroneCAN ESC、CAN 电源模块、空速计等)通过参数界面中的CAN_P1_DRIVER/CAN_P2_DRIVER及 DroneCAN 参数完成配置。
固件加载与刷写
该板出厂预装 ArduPilot 兼容引导加载程序,因此可直接使用任意 ArduPilot 兼容地面站(如 Mission Planner、QGroundControl 的 ArduPilot 分支)刷写.apj固件文件。
固件按机型在 ArduPilot 官方固件站点的PixSurveyA2-IND子目录下载(Plane / Copter / Rover / Sub 等各自对应子目录)。刷写时,hwdef-bl.dat 定义了引导加载程序的布局:FLASH_BOOTLOADER_LOAD_KB 128表示引导加载程序位于 Flash 起始区,并将应用固件放在 128KB 偏移之后;引导阶段通过PB3 LED_ACTIVITY(红)与PE12 LED_BOOTLOADER(蓝)指示状态。
从 hwdef 到固件:构建链路速览
PixSurveyA2-IND 的固件由 ArduPilot 的 waf 构建系统驱动,核心输入即本目录三个文件:
- hwdef.dat:应用固件硬件定义(MCU、引脚、外设、参数默认值)
- hwdef-bl.dat:引导加载程序专用定义(精简串口、LED、空存储)
- defaults.parm:出厂参数覆盖(此处为 CAN 驱动默认开启)
chibios_hwdef.py 读取这些文件后生成hwdef.h等板级头文件,其中包含APJ_BOARD_ID数值 ID(对应固件加载时的板卡识别)。构建时在仓库根目录执行类似./waf configure --board PixSurveyA2-IND与./waf copter即可产出对应机型的.apj固件(具体机型名以构建脚本为准)。
小结
PixSurveyA2-IND 通过 STM32H743 主控 + IOMCU 双芯片架构,提供了三 IMU 冗余(含加热恒温与阻尼隔离)、双 BMP388 气压计、RAMTRON 存储、双 CAN 总线与 14 路 PWM(含双向 DShot)等完整能力。配合仓库中完整的 hwdef 板级定义,你既可以直接刷写官方固件快速使用,也可以深入阅读 hwdef.dat 理解每个引脚、每组外设的真实映射,为后续调试与二次开发打下基础。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考