ArduPilot CyberX-v10 硬件定义全解:双核架构、UART/PWM 映射与默认参数配置

发布时间:2026/9/14 4:12:38
ArduPilot CyberX-v10 硬件定义全解:双核架构、UART/PWM 映射与默认参数配置 ArduPilot CyberX-v10 硬件定义全解双核架构、UART/PWM 映射与默认参数配置【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilotArduPilot 的 ChibiOS 硬件抽象层为每块飞控板卡维护一套独立的硬件定义目录CyberX-v10 就是其中的一个典型样本它由 CyberCraft International Limited 生产采用“STM32H743 主飞控核FMU STM32F103 IO 协处理器”的分离式设计配备三路同步 IMU、双气压计、双 CAN、百兆以太网和双路电源监控。读完本篇你可以掌握该板卡在 ArduPilot 中的完整引脚映射、9 路逻辑串口分配、RC 输入的单向/双向协议选择方法、16 路 PWM 的分组约束、双路电池监控参数以及 hwdef.dat 中这些定义与固件构建之间的对应关系。板卡规格总览CyberX-v10 的完整规格如下来自 README.md处理器主处理器STM32H743IIK632 位400MHz2MB Flash1MB RAMIO 协处理器STM32F10372MHz128KB Flash20KB SRAM传感器IMU1BMI088减震隔离安装IMU2ICM-42688-P减震隔离安装IMU3ICM-20689三路 IMU 同步采样并带恒温加热约 1W气压计Baro1 为 BMP581Baro2 为 ICP-20100罗盘内置 IST8310内部 I2C 总线接口microSD 卡槽、USB-C16 路 PWM 输出8 路 IO 核 8 路 FMU 核6 路 UART其中 TEL1/TEL2 带流控外加专用 RC 输入双 CAN 总线100Mbps 以太网两路电源监控输入模拟 PWR1 I2C INA2xx PWR2模拟量/RSSI/ADC 输入电源工作电压 4.5V–5.5VUSB 输入 4.75V–5.25V尺寸/重量83mm × 57mm × 15.1mm72.4g从源码结构看这些规格并非纸面描述hwdef.dat 第 260–279 行明确声明了全部传感器——BMI088accgyro 两个 SPI 设备挂在 SPI3、ICM-42688-PSPI4、ICM-20689SPI1、BMP581SPI2SPI 总线上、ICP-20100I2C 总线 1地址 0x63并给后两路 IMU 分别定义了安装姿态旋转ROTATION_YAW_90、ROTATION_PITCH_180_YAW_90保证 EKF 融合时坐标轴一致。UART 映射与流控CyberX-v10 共有 9 个逻辑串口官方映射表如下引脚上的 RX 为接收脚、TX 为发送脚名称丝印/协议UART 硬件DMASERIAL0USB、MAVLink2OTG—SERIAL1TEL1、MAVLink2USART2使能SERIAL2TEL2、MAVLink2USART3使能SERIAL3GPS1、GPSUSART1使能SERIAL4GPS2、GPSUART4使能SERIAL5Uart5、无默认UART5无SERIAL6RCin/SBUS_in、RCINUART8使能SERIAL7未引出、无默认UART7使能SERIAL8USB、禁用OTG—只有 TEL1 和 TEL2 两路带 RTS/CTS 流控引脚其余 UART 没有。这一逻辑顺序在 hwdef.dat 中由一行声明直接定义SERIAL_ORDER OTG1 USART2 USART3 USART1 UART4 UART5 UART8 UART7 OTG2也就是说 SERIAL0 对应 OTG1USB 设备口SERIAL7 对应 UART7未引出到连接器SERIAL8 对应 OTG2默认禁用。几处值得注意的实现细节TEL1USART2/TEL2USART3均完整定义了 RTS/CTS 四线例如PD4 USART2_RTS、PD3 USART2_CTShwdef.datGPS 口GPS1 用 USART1PB6/PB7GPS2 用 UART4PH13/PH14UART5 明确标记 NODMAPC12 UART5_TX UART5 NODMA这与映射表一致板上 UART 编号与逻辑编号并不一一对应——例如 UART8 才是 SERIAL6UART7 才是 SERIAL7——接线和配参数时务必按逻辑编号。RC 输入单向 RCin 与双向 UART 两种接法RCin 引脚单向模式RCin 默认映射为一个定时器输入捕获通道PI5 TIM8_CH1 ... RCININThwdef.dat因此可以支持 ArduPilot 全部单向接收机协议。SBUS_IN 引脚在内部与 RCin 短接两者等效。局限性在于CRSF/ELRS、SRXL2 这类双向协议必须有真正的 UART 收发对FPort 接在 RCin 上时只能收 RC 通道、无法使用内置遥测。UART8SERIAL6双向模式要使用 CRSF/ELRS 或 FPort/CRSF/SRXL2 的内置遥测应改用 SERIAL6UART8。该口在 hwdef.dat 中已通过define DEFAULT_SERIAL6_PROTOCOL SerialProtocol_RCIN预设为 RC 输入即默认参数SERIAL6_PROTOCOL 23该枚举值定义于 AP_SerialManager.h 中的SerialProtocol_RCIN 23。此时只需按接收机类型设置SERIAL6_OPTIONSFPortSERIAL6_OPTIONS 15CRSF/ELRSSERIAL6_OPTIONS 0SRXL2SERIAL6_OPTIONS 4且只连接 TX 引脚此外任意 UART 口都可以当作 RC 系统串口使用兼容除 PPM 以外的全部协议具体协议与 option 取值可在 ArduPilot 官方文档的 Radio Control Systems 章节查阅。PWM 输出双核 16 路、分组约束与 DShot 限制CyberX-v10 提供 16 路 PWM 输出物理上分属两个 MCUM1–M8由 STM32F103 IO 协处理器产生M9–M16由 STM32H743 FMU 直接产生的“辅助”输出。能力矩阵输出普通 PWMDShot备注M1–M14支持支持—M15、M16支持不支持无 DMA仅 PWMM9、M11支持支持双向唯一支持 bi-directional DShot 的两路分组规则IO 核 8 路分为 3 组M1/M2组1、M3/M4组2、M5/M6/M7/M8组3FMU 核 8 路分为 3 组M9–M12组1、M13/M14组2、M15/M16组3同一组内所有通道必须使用相同的输出频率只要组内任一通道用 DShot整组都必须切到 DShot。hwdef.dat 给出了 FMU 侧 8 路输出的物理依据M9–M12 共用 TIM5CH4/CH3/CH2/CH1M13/M14 用 TIM4M15/M16 用 TIM12 且标记NODMA这解释了为什么这两路不支持 DShotM9TIM5_CH4与 M11TIM5_CH2额外标记了BIDIR即双向 DShot 能力。IO 核的 8 路输出来自独立的 IO 固件hwdef.dat 通过 ROMFS 将两个 IO 固件镜像打进主固件——io_firmware_f103_lowpolh.bin普通 PWM 版和io_firmware_f103_dshot_lowpolh.binDShot 版两者均可在 Tools/IO_Firmware 目录中找到。FMU 与 F103 之间走 USART6IOMCU_UART USART6PC6/PC7并启用HAL_WITH_IO_MCU_DSHOT以支持 IO 核 DShot。把 PWM 脚改作 GPIO全部 16 路 PWM 输出都可复用为 GPIO继电器、相机触发、RPM 输入等方法是把对应SERVOx_FUNCTION设为-1。各脚在 ArduPilotPIN类参数中的 GPIO 编号如下引脚GPIO 编号引脚GPIO 编号M1101M950M2102M1051M3103M1152M4104M1253M5105M1354M6106M1455M7107M1556M8108M1657这与 hwdef.dat 中 FMU 侧GPIO(50)–GPIO(57)的编号一一对应M950 … M1657M1–M8 因由 IO 核代理编号从 101 起跳。板载蜂鸣器另有独立 GPIO 77PF9 TIM14_CH1 ... ALARM不占用电机通道。CAN双路独立总线默认启用CyberX-v10 有两路互相独立的 CAN 总线对应板上的 CAN1/CAN2 连接器默认使能。物理引脚与静音控制见 hwdef.datCAN1 用 PD0/PD1CAN2 用 PB12/PB13另有两个“静音”控制脚GPIO_CAN1_SILENT/GPIO_CAN2_SILENTGPIO 70/71用于抑制空载干扰。该板卡的出厂默认参数 defaults.parm 内容仅两条即启用两路 CAN 驱动CAN_P1_DRIVER 1 CAN_P2_DRIVER 1这意味着双路 CAN 开箱即用默认驱动编号 1可直接接 DroneCAN/ESC 遥测等 CAN 设备无需手动改参。以太网RMII LAN8742A板上 ETH 连接器提供 100Mbps 以太网。从 hwdef.dat 的硬件定义看它使用RMII物理接口PHY 芯片定义为MII_LAN8742A_IDMicrochip LAN8742A信号线包括 MDC/MDIO、RMII 收发数据线、TX_EN、CRS_DV 和 50MHz REF_CLK完全符合百兆 RMII 的线序。联网参数IP、WPA、MAVLink over 网络等可按 ArduPilot 官方文档的 Networking 章节配置。电池监控模拟 PWR1 I2C INA2xx PWR2 双路方案板卡提供两路电源监控接口且都在 hwdef.dat 中写死了默认值PWR1模拟分压式默认参数BATT_MONITOR 4 # Analog BATT_VOLT_PIN 16 # 电池电压采样 ADC BATT_CURR_PIN 18 # 电池电流采样 ADC BATT_VOLT_MULT 15.5 # 电压分压系数 BATT_AMP_PERVLT 50 # 按实际电流传感器调整PWR2I2C INA2xx 数字式默认参数BATT2_MONITOR 21 # INA2xx BATT2_I2C_BUS 0 BATT2_I2C_ADDR 64 # 0x40 BATT2_SHUNT 0.0005hwdef 中对应的底层声明为HAL_BATTMON_INA2XX_BUS 0、HAL_BATTMON_INA2XX_ADDR 64、HAL_BATT2_MONITOR_DEFAULT 21、DEFAULT_BATTMON_INA2XX_SHUNT 0.0005以及HAL_BATT_MONITOR_DEFAULT 4、HAL_BATT_VOLT_PIN 16、HAL_BATT_CURR_PIN 18、HAL_BATT_VOLT_SCALE 15.5、HAL_BATT_CURR_SCALE 50。两路可以同时启用一路模拟、一路数字用于不同电池或交叉校验BATT_AMP_PERVLT需要根据实际接入的电流传感器自行调整INA2xx 的BATT2_SHUNT则应与板上 0.5mΩ 采样电阻匹配。内置罗盘 IST8310板载一颗 IST8310 罗盘挂在内部 I2C3 总线上。hwdef.dat 中的定义为COMPASS IST8310 I2C:0:0x0E false ROTATION_ROLL_180_YAW_90注意 I2C 逻辑总线号I2C_ORDER I2C3 I2C4 I2C1 I2C2决定了 I2C3 是总线 0与地址 0x0E安装旋转默认为ROTATION_ROLL_180_YAW_90。README 同时提醒由于飞控本体电机/电调干扰可能较大实践中通常以“GPS/罗盘组合中的外部 I2C 罗盘”作为主磁源板载 IST8310 作为备用——这也解释了 hwdef.dat 中I2C_ORDER把 GPS 用 I2C1/I2C2 排在内部总线之后、以及HAL_I2C_INTERNAL_MASK只标记两条内部总线的设计。模拟量与 RSSI 输入板卡上的 5 个模拟输入分工如下ADC 引脚用途16电池电压监控PWR118电池电流监控PWR126.6V 检测内部电源监测63.3V 检测内部电源监测9RSSI 电压监控如要在 S.Bin 连接器上使用模拟 RSSI设置RSSI_ANA_PIN 9 RSSI_TYPE 3 # AnalogADC 分压在 hwdef.dat 中可见PA1(VDD_5V_SENS)、PF13(ADC1_6V6)等内部检测脚均挂 ADC1/ADC2量程按SCALE(2)折半处理。固件获取、烧录与板卡 ID板卡出厂已预装 ArduPilot 兼容的 bootloader任意 ArduPilot 兼容地面站都可以直接刷写*.apj固件文件官方固件仓库中以 “CyberX-v10” 命名的子目录提供对应固件。板卡在 bootloader 侧的注册信息见 board_types.txtAP_HW_CyberX-v10对应 board ID58305830–5839 段为 CyberX 系列保留。hwdef-bl.dat 中 bootloader 使用的APJ_BOARD_ID与之一致。从源码自行构建时waf 构建系统按libraries/AP_HAL_ChibiOS/hwdef/BOARD/目录名自动发现板卡见 chibios.py 中hwdef.dat/hwdef-bl.dat的加载逻辑因此构建命令为./waf configure --board CyberX-v10 ./waf build构建时会调用 chibios_hwdef.py 把hwdef.dat编译为hwdef.h供 ChibiOS 使用。hwdef.dat 深入一块板卡在构建系统里的完整画像hwdef.dat 是理解 CyberX-v10 在 ArduPilot 中“身份”的核心文件除前文已引用的 UART/PWM/CAN/以太网/传感器定义外还有几处对使用者有实际意义的配置板级基础MCU STM32H7xx STM32H743xx、16MHz 晶振、2048KB Flash、FLASH_RESERVE_START_KB 128为 bootloader/保留区留 128KBIMU 恒温加热HAL_HAVE_IMU_HEATER 1加热脚为 GPIO 80PG15 HEATER_EN默认目标温度 45°C、PID 增益HAL_IMUHEAT_P_DEFAULT 50/HAL_IMUHEAT_I_DEFAULT 0.07——对应 README 中“constant-temperature IMU heating (~1W)”的能力参数存储板上挂载 Ramtron FRAMSPI5HAL_WITH_RAMTRON 1、HAL_STORAGE_SIZE 32768用于参数的掉电保存microSDSDMMC2 四线接口PD6/PD7/PB14/PB15/PG11/PB4HAL_OS_FATFS_IO 1启用 FAT 文件系统支持把日志写入 TF 卡安全开关HAL_HAVE_SAFETY_SWITCH 1PF5 SAFETY_IN为安全脚输入PD10 LED_SAFETY为安全指示灯DFU 与 ABINENABLE_DFU_BOOT 1支持 DFU 方式安装 bootloader--secure-bl构建时禁用、BUILD_ABIN True生成可经 bootloader 刷写的合并固件电源使能/检测脚PERIPH_EN、HIPOWER_EN默认拉高PERIPH_OC/HIPOWER_OC过流检测输入SD 卡与 IMU 的 3.3V 电源使能脚默认打开状态 LEDRGB 三色灯GPIO 0/1/2按 Pixracer 风格使用AP_NOTIFY_GPIO_LED_RGB_ENABLED 1。结合 defaults.parm 与 hwdef 中的define默认值这块板卡的“出厂行为”可以完整推导出来双 CAN 默认开、SERIAL6 默认 RCIN、双路电池监控默认参数就位、IMU 加热默认 45°C、罗盘自动探测 IST8310——用户拿到板子后主要只需按接收机类型设置SERIAL6_OPTIONS、按电流传感器校准BATT_AMP_PERVLT两件事。小结CyberX-v10 在 ArduPilot 中的硬件定义呈现出一套完整的工程闭环README.md 给出面向用户的接线与配参指南hwdef.dat 用 ChibiOS 硬件定义语言落地每一个引脚、总线和传感器defaults.parm 补充出厂参数board_types.txt 完成 bootloader 身份注册。掌握这套“文档 → hwdef → 默认参数”的三层结构后无论是给该板卡配接收机、接 DShot 电调、启用第二路 INA2xx 电池监控还是排查串口协议冲突都可以直接溯源到对应的定义行进行确认。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考