飞控系统基础:飞控硬件架构、软件栈、传感器与执行器接口

飞控系统(Flight Control System, FCS)是无人机与飞行器的“大脑”与“神经中枢”。在进行故障注入与仿真测试之前,必须对飞控的物理组成与逻辑分层有清晰认知。本章从硬件架构、软件栈、传感器与执行器接口三个维度展开,帮助学员建立从“引脚电平”到“控制律输出”的完整映射关系。只有理解了信号从哪里来、经过什么处理、到哪里去,才能精准设计故障注入点并判断故障影响范围。

飞控系统硬件-软件-接口链路图 传感器组 IMU (ACC/GYRO) 磁力计 (MAG) 气压计 (BARO) GPS / RTK 执行器组 电调 ESC (PWM/DShot) 舵机 Servo (PWM) LED / 蜂鸣器 降落伞 / 挂载 飞控核心 (FC) MCU (STM32H7) Cortex-M7 @480MHz RTOS + 控制律 PX4/ArduPilot 接口抽象层 SPI / I2C / UART / CAN / PWM / ADC SPI (IMU) I2C (MAG) UART (GPS) PWM/DShot PWM GPIO 电源与调试接口 PMU (5V/3.3V) JTAG/SWD USB/UART 电源域 典型故障注入点 ① 传感器总线 (SPI/I2C) ② 控制律输出 (PWM) ③ 电源纹波/跌落 仿真测试关注 信号时序/延迟 数据丢帧/校验错误 执行器饱和/卡死 信号流向:传感器 → 飞控核心(硬件采集→软件解算→控制律) → 执行器 故障注入点覆盖:总线层、计算层、输出层、电源层 传感器信号 执行器输出 核心处理 故障注入点

2.1 飞控硬件架构:从MCU到外围电路

飞控硬件架构的核心是主控MCU(Microcontroller Unit),当前主流方案采用ARM Cortex-M7或M4内核,例如STM32H743、STM32F427等。MCU负责运行实时操作系统(RTOS)与控制律算法,并通过各类总线与传感器、执行器交互。硬件架构可划分为四个功能域:计算域(MCU及存储)、感知域(传感器接口)、执行域(PWM/舵机驱动)、电源域(PMU与电压调节)。

在故障注入测试中,硬件层的关键在于信号完整性与电源稳定性。例如,IMU通常通过SPI总线以1kHz频率输出加速度与角速度数据,若SPI时钟线受到干扰或片选信号时序异常,会导致数据丢帧或校验错误。电源域方面,飞控通常采用5V输入,经LDO或DC-DC转换为3.3V(MCU与传感器)和5V(舵机/电调)。若电源纹波超过50mV,可能引发ADC采样抖动或MCU复位。

硬件模块典型器件接口类型故障注入关注点
主控MCUSTM32H743SPI/I2C/UART/CAN时钟失效、看门狗复位
惯性测量单元ICM-20602SPI (1kHz)数据丢帧、寄存器读异常
磁力计IST8310I2C (100kHz)总线挂死、ACK丢失
气压计MS5611I2C/SPI转换超时、数据跳变
GPS模块u-blox M8NUART (115200)帧格式错误、信号丢失
电调接口ESC (PWM/DShot)PWM (50Hz-500Hz)脉宽超限、通道无输出
硬件故障注入实操要点:在仿真环境中,可通过修改MCU外设寄存器模拟SPI通信故障,例如将SPI的CRC校验位强制置反,或通过DMA中断屏蔽模拟数据未更新。在硬件在环(HIL)测试中,则通过信号发生器注入毛刺或拉低片选信号。

2.2 软件栈分层:RTOS、驱动与控制律

飞控软件栈通常分为四层:板级支持包(BSP)、实时操作系统(RTOS)、中间件与驱动、应用层(控制律与状态估计)。以PX4为例,其软件架构基于NuttX RTOS,采用发布-订阅(uORB)消息机制进行模块间通信。控制律模块(如mc_att_control)以250Hz频率运行,状态估计模块(如EKF2)以500Hz-1kHz频率运行。

软件栈的故障注入重点在于任务调度延迟与消息丢失。例如,若EKF2模块因CPU占用过高导致调度周期从1ms延长至3ms,飞控的姿态估计将出现明显滞后,进而影响控制律输出。在仿真测试中,可通过人为增加任务负载或修改任务优先级来模拟此类故障。

// 示例:PX4 uORB消息订阅(伪代码)
int sensor_sub = orb_subscribe(ORB_ID(sensor_combined));
struct sensor_combined_s sensor_data;
orb_copy(ORB_ID(sensor_combined), sensor_sub, &sensor_data);
// 若此处阻塞或数据未更新,则控制律将使用旧数据
经验提醒:在软件故障注入时,优先关注“数据新鲜度”而非“数据正确性”。即使传感器数据值正确,若时间戳过期,控制律仍会判定为故障。建议在测试中同时监控消息时间戳与调度延迟。

2.3 传感器接口:SPI/I2C/UART的时序与协议

传感器接口是飞控与外界交互的“触角”。不同传感器采用不同总线协议,其故障模式也各不相同。SPI(Serial Peripheral Interface)通常用于高速IMU,时钟频率可达10MHz以上,支持全双工通信,故障模式包括时钟极性错误、片选信号毛刺、MISO数据线短路。I2C(Inter-Integrated Circuit)用于磁力计、气压计等低速设备,采用开漏输出与上拉电阻,故障模式包括总线挂死(SDA被拉低)、地址冲突、时钟拉伸超时。UART(Universal Asynchronous Receiver/Transmitter)用于GPS与数传模块,故障模式包括波特率不匹配、帧格式错误、缓冲区溢出。

在故障注入测试中,针对SPI总线,可模拟“片选信号提前释放”或“时钟频率突变”;针对I2C,可模拟“从设备无应答”或“总线仲裁失败”;针对UART,可模拟“数据位反转”或“停止位丢失”。这些故障可通过硬件注入或软件模拟实现。

风险提示:在真实硬件上进行I2C总线故障注入时,务必使用限流电阻或隔离芯片,避免因总线短路导致MCU IO口损坏。建议优先在HIL仿真环境中验证故障注入逻辑,再迁移至实物测试。

2.4 执行器接口:PWM、DShot与舵机控制

执行器接口是飞控控制律输出的“最后一公里”。传统PWM信号以50Hz-500Hz频率输出,脉宽范围通常为1000μs-2000μs,对应电机转速或舵机角度。DShot协议则采用数字编码,速率可达300kbps-1Mbps,具有更高的分辨率与抗干扰能力。执行器接口的故障模式包括:PWM脉宽超限(如超过2000μs)、通道无输出、信号毛刺导致舵机抖动、DShot帧CRC错误。

在仿真测试中,可通过修改PWM定时器比较寄存器来模拟脉宽异常,或通过DMA中断屏蔽模拟通道无输出。对于舵机,还需关注其机械限位与堵转情况,这可能导致电流过大并反噬飞控电源。

执行器类型信号格式典型频率/速率故障注入方法
电调(ESC)PWM / DShot300500Hz / 300kbps脉宽钳位、CRC错误注入
舵机(Servo)PWM50Hz脉宽跳变、信号丢失
LED/蜂鸣器GPIO-电平翻转、PWM占空比异常
案例拆解:某四旋翼在飞行测试中突然出现电机转速波动。通过日志分析发现,PWM输出通道2的脉宽在1200μs-1400μs之间随机跳变,而其他通道正常。进一步排查发现,该通道的DMA传输描述符被意外修改,导致比较寄存器值未及时更新。在仿真中,我们通过人为修改DMA描述符的缓冲区地址,成功复现了该故障,并验证了“输出限幅”与“看门狗超时复位”两种保护策略的有效性。

2.5 常见误区与测试复盘

在飞控系统测试中,常见误区包括:只关注数据正确性而忽略时序、将传感器故障与执行器故障混为一谈、忽略电源域对信号的影响。例如,当GPS信号丢失时,飞控可能切换至无GPS模式,此时若测试人员仅关注GPS数据是否更新,而忽略了模式切换带来的控制律参数变化,则可能误判故障影响。

另一个典型误区是在仿真中过度简化接口时序。例如,在纯软件仿真中,SPI通信通常被抽象为函数调用,忽略了时钟延迟与信号竞争。这会导致某些硬件故障(如时钟毛刺)无法在仿真中暴露。因此,建议采用硬件在环(HIL)测试,将真实传感器与执行器接入仿真回路,以覆盖接口层的时序故障。

复盘建议:每次故障注入测试后,应记录以下信息:故障注入点(总线/引脚/寄存器)、故障类型(丢帧/超时/毛刺)、故障持续时间、系统响应(报警/降级/失控)、恢复时间。这些数据将用于构建故障模式库,为后续自动化测试提供依据。