2. 多旋翼飞控系统架构解析

做HIL自动化测试,第一步不是写脚本,而是把被测对象“拆开看”。HIL测试台架要替代真实飞机上的电机、舵机、GPS、遥控接收机等外部世界,就必须精确知道飞控在这些接口上期待什么信号、以什么时序收发、由哪个固件模块处理。如果对飞控架构理解模糊,测试用例只能停留在“能连上、能起飞”的层面,无法定位到具体模块的异常。本节从硬件、传感器链路、执行机构接口、实时操作系统和固件模块划分五个层面,建立后续所有测试用例的“坐标系”。

一、飞控硬件组成:从主控到接口

典型多旋翼飞控硬件可以分成四块:主控计算单元、传感器单元、接口与电源单元、存储与调试单元。以常见的STM32H7系列飞控为例,主控芯片运行在480MHz,内部有双精度浮点单元和DMA控制器;传感器单元通常包含一颗六轴IMU(如BMI088或ICM-42688)、一颗气压计(如BMP388)、一颗磁力计(如IST8310),部分机型还会加第二颗IMU做冗余。接口单元包括PWM/DShot输出、UART、I2C、SPI、CAN、SBUS/PPM输入、USB和SD卡槽。电源单元提供5V/3.3V稳压,并监测电池电压和电流。

HIL测试中,飞控的“真实”传感器被仿真机替代,但主控、RTOS、固件模块仍然真实运行。因此测试台架必须能通过SPI/I2C注入IMU和气压计数据,通过UART注入GPS和遥控信号,通过PWM/DShot采集执行机构输出。理解硬件组成,就是理解“哪些线要接、哪些信号要模拟”。

二、传感器链路:从物理量到状态估计

传感器链路不是简单的“读寄存器”,而是一条带时间戳、带校准、带融合的数据流。以IMU为例,陀螺仪和加速度计的原始数据先经过温度补偿和零偏校准,再进入姿态解算。PX4和ArduPilot都采用类似结构:IMU采样频率通常为1kHz,姿态解算在250Hz~1kHz运行,输出四元数或欧拉角。气压计和GPS提供高度与位置观测,磁力计提供航向参考,它们通过扩展卡尔曼滤波(EKF)融合成位置、速度、姿态的估计。

HIL测试的关键在于:仿真机必须按飞控期望的采样率和数据格式,通过SPI或I2C把IMU数据“喂”进去,并保证时间戳与飞控内部时钟同步。如果时间戳错位,EKF会发散,测试结果就不可信。因此传感器链路的测试点通常包括:原始数据注入、校准参数加载、EKF状态输出、传感器健康标志。

多旋翼飞控传感器链路与执行机构接口(HIL视角) HIL仿真机 (实时仿真模型) IMU数据生成 气压/磁力数据 GPS/遥控信号 动力学模型 执行机构采集 飞控硬件(真实运行) 主控 MCU(STM32H7) 480MHz · FPU · DMA IMU SPI 1kHz 气压计/磁力计 I2C/SPI RTOS 调度器 NuttX / FreeRTOS · 1kHz 主循环 EKF 状态估计 位置/速度/姿态 控制律 姿态/位置控制器 执行机构接口 PWM / DShot / CAN 执行机构 电机1~4 DShot600 电调 PWM 400Hz 舵机 PWM 50Hz 仿真机采集 反馈至动力学模型 SPI注入 I2C/SPI UART PWM/DShot 执行机构反馈 → 动力学模型 HIL测试中:传感器数据由仿真机注入,执行机构输出被仿真机采集并反馈至动力学模型,飞控固件真实运行

三、执行机构接口:PWM、DShot与CAN

多旋翼的执行机构主要是电调和舵机。传统PWM接口以50Hz~400Hz输出脉宽,脉宽范围通常为1000~2000μs,对应油门0~100%。DShot是数字协议,常见DShot300/600,帧包含11位油门值、1位遥测请求和4位CRC,抗干扰能力更强,且支持双向遥测。CAN接口在大型多旋翼和行业机型中用于连接电调或舵机,支持总线拓扑和状态回传。

HIL测试中,仿真机需要采集飞控输出的PWM/DShot信号,解析出油门值,再代入动力学模型计算电机转速和推力。这里的关键参数是:PWM频率、脉宽范围、DShot速率、CRC校验方式、CAN波特率。如果测试用例要验证“电机输出是否随姿态误差线性变化”,就必须在仿真机侧记录每个通道的脉宽或DShot值,并与控制律输出做对比。

四、实时操作系统:NuttX与调度策略

PX4使用NuttX,ArduPilot早期使用NuttX后转向ChibiOS/FreeRTOS。RTOS的核心是任务调度和优先级管理。以PX4为例,主要任务包括:传感器采集(高优先级,1kHz)、姿态控制(高优先级,1kHz)、位置控制(中优先级,50Hz)、导航与任务(低优先级,10Hz)、日志与通信(低优先级)。任务之间通过uORB消息总线通信,发布/订阅模式解耦了模块。

HIL测试必须关注RTOS的实时性:如果仿真机注入数据的时刻与飞控任务调度不同步,就会出现“数据迟到”或“数据堆积”。因此测试台架通常需要与飞控的1kHz主循环对齐,或者使用飞控的硬件定时器触发仿真步进。测试点包括:任务执行时间、消息队列深度、CPU占用率、堆栈使用量。

五、固件模块划分:从uORB到控制律

PX4固件可以划分为:驱动层(sensors、pwm_out、dshot)、估计层(ekf2、attitude_estimator)、控制层(mc_att_control、mc_pos_control)、导航层(navigator、mission)、通信层(mavlink、rc)。模块之间通过uORB主题传递数据,例如sensor_combined、vehicle_attitude、actuator_controls_0。HIL测试的用例设计应围绕这些主题展开:注入sensor_combined,观察vehicle_attitude;注入vehicle_attitude_setpoint,观察actuator_controls_0。

下面给出一份HIL测试中常用的模块-主题-测试点对照表,可直接用于用例设计:

固件模块 输入主题 输出主题 HIL测试点
sensors SPI/I2C原始数据 sensor_combined 采样率、时间戳、零偏
ekf2 sensor_combined、gps vehicle_attitude、vehicle_local_position 收敛时间、状态协方差
mc_att_control vehicle_attitude、vehicle_attitude_setpoint actuator_controls_0 阶跃响应、超调量
mc_pos_control vehicle_local_position、vehicle_position_setpoint vehicle_attitude_setpoint 位置跟踪误差
pwm_out / dshot actuator_controls_0 PWM/DShot物理信号 脉宽范围、CRC、频率
HIL测试的架构对齐原则:仿真机的步长应与飞控主循环周期一致或成整数倍关系。例如飞控主循环1kHz(1ms),仿真步长可设为1ms或0.5ms。若仿真步长大于飞控周期,飞控会重复读取同一帧数据,导致EKF误判为“传感器卡死”。
常见误区:把HIL测试当成“纯软件仿真”。HIL中飞控固件、RTOS、驱动都是真实的,只有外部物理世界被仿真。因此测试用例必须覆盖驱动层和RTOS调度层,而不仅仅是控制算法。例如DShot CRC错误、UART帧丢失、I2C总线冲突,都是HIL测试中值得注入的故障。