ArduPilot CSKY GaN DroneCAN PMU:硬件规格、硬件定义与固件升级全解析
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
本文基于 ArduPilot 仓库中libraries/AP_HAL_ChibiOS/hwdef/CSKY_PMU/目录下的官方硬件定义文档展开,完整覆盖 CSKY GaN DroneCAN PMU 的电气规格、接口定义、状态灯含义与固件加载方式,并结合同目录的hwdef.dat、hwdef-bl.dat、defaults.parm三个配置文件,逐行印证这款 200A 级 GaN 功率管理单元在 ChibiOS HAL 层的引脚分配、INA239 电流传感器接入、ADC 温度采样与 CAN 升级通道实现,帮助集成商和开发者在无人机平台中正确选型、接线并刷写该 PMU。
一、产品定位与核心规格
CSKY_PMU 是 CSKY(晨羽)推出的 GaN(氮化镓)功率管理单元(PMU),在 ArduPilot 生态中作为 DroneCAN 从设备挂载,负责动力电池电压/电流采集、电池温度监测与机载电源分配。官方文档 README.md 给出的完整功能规格如下:
| 项目 | 规格 |
|---|---|
| 处理器 | STM32F412,100MHz,1024KB Flash,256KB RAM |
| 电压输入 | 4S~14S(HV 高压系列) |
| 连续电流 | 200A |
| 突发电流 | 300A @ 25°C 持续 1 秒 |
| 最大电流传感 | 200A |
| 电压精度 | ±0.05V |
| 电流精度 | ±0.7% |
| 温度精度 | ±1°C |
| 电源 1 输出(Molex) | 5V/3A |
| 电源 2 输出(XT30) | 12V/10A |
| 转换效率 | 97% @ 10A |
| 通信协议 | DroneCAN |
| 工作温度 | -25°C ~ 105°C |
| CAN 固件升级 | 支持 |
| 校准 | 无需校准 |
其中两点值得强调:
- “无需校准(Calibration: No need)”:意味着出厂即完成传感标定,集成时无需在 Mission Planner 中配置
BATTx_系列校准参数,降低了交付复杂度; - “CAN 固件升级:支持”:与下方第五、六节的 bootloader 硬件定义相互印证,该板支持不接触板载 USB/SWD 接口、直接通过 CAN 总线升级固件,这对已成型的飞控整机尤其重要。
机械与接口规格
文档同时给出了接口形式与机械尺寸,接线与结构设计时需直接引用:
接口类型
| 接口 | 连接器/形式 |
|---|---|
| 电源 1 与 CAN 口 | Molex CLIK-Mate 2mm 6Pin |
| 电源 2 口 | XT30PW-F |
| 电池 IN/OUT | 镀锡导线(Tinned Wires) |
机械规格
- 尺寸:57.5mm × 57.5mm × 17.1mm(不含线缆);
- 重量:140g(含线缆)。
从电源 1 与 CAN 复用同一个 Molex CLIK-Mate 6Pin 接口可以推断,板载 CAN 收发器由 5V/3A 电源口供电,整机部署时只需一条 6Pin 线即可完成“电源 + 通信”双功能连接,这是 DroneCAN PMU 常见的紧凑设计。
二、状态 LED 指示
README.md 定义了状态 LED 的三种闪烁模式,可用于现场快速判断设备所处阶段:
| LED 状态 | 含义 |
|---|---|
| 持续快速闪烁 | MCU 处于 bootloader 阶段,等待刷写固件 |
| 快速闪烁 3 秒后常亮 1 秒 | 等待 CAN 连接 |
| 慢速闪烁(1 秒间隔) | CAN 已成功连接 |
这与hwdef-bl.dat中 bootloader 的引脚分配直接对应:
PB14 LED_BOOTLOADER OUTPUT HIGH define HAL_LED_ON 0即 bootloader 与主固件共用的 PB14 引脚被标记为LED_BOOTLOADER,HAL_LED_ON 0表示低电平点亮。bootloader 阶段“快速闪烁”即由该引脚驱动;进入主固件后,该引脚转由 AP_Periph 的 Notify 模块接管(见下文 PB14 = LED_R 的定义),呈现“等待 CAN / 已连接”的两种节奏。因此维修排障时,观察 LED 即可区分设备卡在了 bootloader、未上 CAN 还是已正常挂载,无需连接地面站。
三、hwdef.dat:主固件硬件定义逐段解读
hwdef.dat 是 ChibiOS 构建系统(chibios_pins.py处理)使用的硬件描述文件,它把 README 中的纸面规格翻译成了可构建的引脚与宏定义:
3.1 MCU 与 Flash 布局
MCU STM32F4xx STM32F412Rx FLASH_RESERVE_START_KB 64 STORAGE_FLASH_PAGE 2 define HAL_STORAGE_SIZE 8192 APJ_BOARD_ID AP_HW_CSKY_PMU env AP_PERIPH 1 OSCILLATOR_HZ 8000000 FLASH_SIZE_KB 512STM32F412Rx与文档中“STM32F412 100MHz”一致;FLASH_SIZE_KB 512注释写明“assume 512k flash part”,即按 512KB 封装编译链接脚本,而文档标称 1024KB Flash 对应的是同系列更大封装,编译时按保守值处理;FLASH_RESERVE_START_KB 64表明主固件从 64KB 偏移处启动,前 64KB 留给 bootloader,这是支持 CAN 刷写固件的前提;STORAGE_FLASH_PAGE 2+HAL_STORAGE_SIZE 8192将参数存储固定在第 2、3 页(共 8KB),避免与固件区冲突;env AP_PERIPH 1是关键宏:它声明该板构建的是AP_Periph 从设备固件(见 Tools/AP_Periph 目录),而非完整的 ArduCopter/ArduPlane 飞控主固件;OSCILLATOR_HZ 8000000指定板载 8MHz 晶振,作为 PLL 时钟源。
3.2 串口、调试与 LED
SERIAL_ORDER USART1 PB6 USART1_TX USART1 NODMA PB7 USART1_RX USART1 NODMA define DEFAULT_SERIAL0_BAUD 57600 PA13 JTMS-SWDIO SWD PA14 JTCK-SWCLK SWDUSART1(PB6/PB7)保留作 57600 波特率调试串口,PA13/PA14 保留 SWD 调试口——这两条通道在产测与 bootloader 阶段(bootloader 波特率同样是 57600,见后文)都会用到。
LED 分配则解释了状态灯的实现:
PB14 LED_R OUTPUT HIGH GPIO(0) PB15 LED_G OUTPUT HIGH GPIO(1) PB13 LED OUTPUT HIGH GPIO(2) define AP_NOTIFY_GPIO_LED_RGB_ENABLED 1 define AP_NOTIFY_GPIO_LED_RGB_RED_PIN 0 define AP_NOTIFY_GPIO_LED_RGB_GREEN_PIN 1 define AP_NOTIFY_GPIO_LED_RGB_BLUE_PIN 2PB14/PB15/PB13 构成 RGB 三色 LED,通过AP_NOTIFY_GPIO_LED_RGB_ENABLED接入 ArduPilot 的 AP_Notify 灯光系统。README 中描述的“快闪/慢闪”状态模式,在固件层就是 AP_Notify 的等待/连接灯光效果;而 bootloader 阶段的闪烁由LED_BOOTLOADER独立控制(见 hwdef-bl.dat)。
3.3 DroneCAN 总线与静默引脚
CAN_ORDER 1 PB8 CAN1_RX CAN1 PB9 CAN1_TX CAN1 PB5 GPIO_CAN1_SILENT OUTPUT PUSHPULL SPEED_LOW LOW define CAN_APP_NODE_NAME "org.csky.pmu"- CAN1 收发引脚为 PB8(RX)/PB9(TX),与 bootloader 中的 CAN 引脚完全一致,保证 boot 前后 CAN 电气通路不变;
PB5 GPIO_CAN1_SILENT是一块收发器静默控制 GPIO(低电平有效),从源码结构看,它用于在升级或初始化阶段静默 CAN 收发器,避免半双工总线上干扰;CAN_APP_NODE_NAME "org.csky.pmu"是 DroneCAN 应用节点名称,地面站(DroneCan GUI / Mission Planner)在设备列表中会以该名称标识这块 PMU,是确认“连上的就是 CSKY PMU”的依据。
3.4 INA239 电流/电压传感器(SPI 接入)
PA5 SPI1_SCK SPI1 PA6 SPI1_MISO SPI1 PA7 SPI1_MOSI SPI1 PA4 INA_CS CS SPIDEV INA23X SPI1 DEVID1 INA_CS MODE1 10*MHZ 10*MHZ define AP_PERIPH_BATTERY_ENABLED 1 define AP_BATTERY_INA239_ENABLED 1 define AP_BATTERY_INA239_SPI_DEVICE "INA23X" define HAL_BATT_MONITOR_DEFAULT 26这一组定义落实了文档中“电压精度 ±0.05V、电流精度 ±0.7%、最大 200A 电流传感”的实现路径:
- 板载 TI INA239(SPI 接口的高侧电流监测芯片)通过 SPI1(PA5/PA6/PA7)挂接,片选 PA4,SPI 速率 10MHz;
AP_PERIPH_BATTERY_ENABLED+AP_BATTERY_INA239_ENABLED启用 AP_Periph 的电池监测子模块,HAL_BATT_MONITOR_DEFAULT 26指定该板电池监测器的默认参数组编号;- INA239 直接输出经过 ADC 采样的电压/电流值,这与“无需校准”的规格相呼应——传感线性度由芯片与出厂标定保证,而非靠地面站参数微调。
3.5 ADC 电池温度采样
define AP_TEMPERATURE_SENSOR_ENABLED 1 define AP_TEMPERATURE_SENSOR_MAX_INSTANCES 1 define AP_PERIPH_DEVICE_TEMPERATURE_ENABLED 1 define HAL_USE_ADC TRUE define STM32_ADC_USE_ADC1 TRUE PA3 BATT_TEMP_SENS ADC1 SCALE(1)ADC1 的 PA3 通道采集电池温度,配合defaults.parm(下节)完成热电偶/热敏电阻解析,并通过AP_PERIPH_DEVICE_TEMPERATURE_ENABLED将温度以uavcan.equipment.device.Temperature消息广播到 DroneCAN 总线。从 Tools/AP_Periph/temperature.cpp 的实现可见:temperature_sensor_update()按TEMP_MSG_RATE的周期,将get_temperature()的读数转为开尔文后canard_broadcast出去——这正是 README 中“温度精度 ±1°C”规格在软件侧的落地链路。
3.6 一个重要的编译开关
# bootloader embedding / bootloader flashing not available define AP_BOOTLOADER_FLASHING_ENABLED 0该行注释与宏表明:主固件不包含嵌入式 bootloader、也不支持从主固件发起二次刷写,即刷写流程是单向的——只有 bootloader 可以接收并写入新固件,主固件运行期间不能自我重启进入刷写。这对运维的含义是:CAN 升级必须依赖 bootloader 的自动超时回退(见下节HAL_BOOTLOADER_TIMEOUT),而非“主固件主动进入升级模式”。
四、hwdef-bl.dat:支持 CAN 升级的 Bootloader 定义
hwdef-bl.dat 描述同一硬件上 bootloader 固件的构建参数,它与 README 的“CAN Firmware update: Support”和状态灯“持续快速闪烁 = 等待刷写”一一对应:
MCU STM32F4xx STM32F412Rx APJ_BOARD_ID AP_HW_CSKY_PMU OSCILLATOR_HZ 8000000 env AP_PERIPH 1 FLASH_RESERVE_START_KB 0 FLASH_BOOTLOADER_LOAD_KB 64 FLASH_SIZE_KB 512- 与主定义共用同一个
APJ_BOARD_ID AP_HW_CSKY_PMU,保证 DroneCan GUI / Mission Planner 通过板级 ID 匹配到正确的固件镜像; FLASH_BOOTLOADER_LOAD_KB 64与主定义的FLASH_RESERVE_START_KB 64互相咬合:bootloader 位于 0~64KB,主固件加载点在其后,二者构成完整的双区 Flash 布局。
PB6 USART1_TX USART1 PB7 USART1_RX USART1 PB14 LED_BOOTLOADER OUTPUT HIGH define HAL_LED_ON 0 PA13 JTMS-SWDIO SWD PA14 JTCK-SWCLK SWD PB8 CAN1_RX CAN1 PB9 CAN1_TX CAN1 PB5 GPIO_CAN1_SILENT OUTPUT PUSHPULL SPEED_LOW LOW define HAL_USE_CAN TRUE define STM32_CAN_USE_CAN1 TRUE # make bl baudrate match debug baudrate for easier debugging define BOOTLOADER_BAUDRATE 57600 define HAL_BOOTLOADER_TIMEOUT 1000 PA4 INA_CS CS几个要点:
- bootloader 同时启用 CAN 与 UART1:CAN 用于 DroneCAN 刷写协议,UART1(57600)用于调试,注释“make bl baudrate match debug baudrate for easier debugging”明确了两处波特率刻意保持一致以便排障;
HAL_BOOTLOADER_TIMEOUT 1000表示 bootloader 阶段有秒级等待窗口——上电后若未检测到有效主固件启动条件,MCU 停留在 bootloader,LED 持续快速闪烁,此时即可通过 CAN 或串口下发固件;- 末尾单独一行
PA4 INA_CS CS保留了 INA239 片选引脚的电气定义,保证 bootloader 阶段该引脚不会浮空驱动 SPI 总线。
五、defaults.parm:出厂默认参数
defaults.parm 仅五行,但完整定义了温度通道与上报行为:
TEMP1_TYPE 5 TEMP1_PIN 3 TEMP1_A0 -41.0 TEMP1_A1 50.0 TEMP_MSG_RATE 10TEMP1_TYPE 5:温度传感器类型编号为 5,对应 ArduPilot 温度库中的热敏电阻(thermistor)类型;TEMP1_PIN 3:与hwdef.dat中PA3 BATT_TEMP_SENS ADC1的 ADC 通道号(通道 3)一致,说明该默认参数就是为 PA3 电池温度采样准备的;TEMP1_A0 -41.0/TEMP1_A1 50.0:热敏电阻换算曲线(Steinhart-Hart/Beta 拟合)的上下限温度系数,把 ADC 读数线性映射到 -41°C ~ +50°C 区间——注意这与整机 -25°C~105°C 的工作温度区间不同,参数层面只覆盖电池温度关注的低温段,超上限后读数会被钳位;TEMP_MSG_RATE 10:每秒 10 次(10Hz)通过 DroneCAN 广播温度消息,与 temperature.cpp 中1000U / g.temperature_msg_rate的节流逻辑对应。
六、固件加载方式
README 最后一节(Loading Firmware)给出两条官方刷写路径,结合上文硬件定义可明确其各自机制:
- DroneCan GUI 工具升级
*.bin固件(推荐,走 CAN):- 依赖硬件上的 CAN bootloader(hwdef-bl.dat 启用 CAN1 +
HAL_BOOTLOADER_TIMEOUT等待窗口); - 操作时设备 LED 应处于“持续快速闪烁”状态,否则先断开电池重新上电让 MCU 回落到 bootloader;
- 该方式无需 USB/串口线,适合已成型的整机,是“CAN Firmware update: Support”规格的直接体现。
- 依赖硬件上的 CAN bootloader(hwdef-bl.dat 启用 CAN1 +
- Mission Planner 地面站升级
*.apj固件(走 USB/串口):*.apj是 ArduPilot 标准固件打包格式,携带AP_HW_CSKY_PMU板级 ID,地面站据此匹配设备;- 依赖板上的 SWD/调试串口通路(PB6/PB7 调试串口,57600 波特率,与 bootloader 波特率一致)。
无论哪条路径,刷写前建议核对固件的 board ID 与APJ_BOARD_ID AP_HW_CSKY_PMU匹配,避免误刷其他 CSKY 硬件(例如同目录风格类似的 CSKY405 飞控板,见 CSKY405/Readme.md)。
七、小结与集成清单
将文档规格与仓库硬件定义对照后,CSKY GaN DroneCAN PMU 的集成要点可归纳为:
| 集成事项 | 依据 |
|---|---|
| 4S~14S 电池直挂,无需参数校准 | README 规格 + INA239 硬传感(hwdef.dat L87-L90) |
| 单条 Molex CLIK-Mate 6Pin 线完成 5V 供电 + CAN 通信 | README 接口定义 + PB8/PB9 CAN1 引脚 |
| 现场排障优先看 LED:快闪=bootloader 待刷写、快闪3s+常亮1s=等 CAN、慢闪=已连接 | README 状态灯定义 + LED_BOOTLOADER(hwdef-bl.dat L25-L26) |
| CAN 升级用 DroneCan GUI(.bin),USB 升级用 Mission Planner(.apj) | README Loading Firmware 节 |
| 电池温度 10Hz 经 DroneCAN 上报,量程 -41°C~50°C(参数层) | defaults.parm + temperature.cpp |
| 主固件区 64KB 偏移、前 64KB 为 bootloader,主固件不可自发起二次刷写 | FLASH_RESERVE_START_KB 64/AP_BOOTLOADER_FLASHING_ENABLED 0 |
所有硬件级事实均可在 libraries/AP_HAL_ChibiOS/hwdef/CSKY_PMU/ 目录内追溯:README.md 提供规格原文,hwdef.dat 与 hwdef-bl.dat 提供引脚与构建级实现,defaults.parm 提供出厂参数基线,三者与 README 的规格描述完全自洽。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考