2. 飞控系统基础
嵌入式飞控系统是无人机、机器人等自主运动平台的核心计算与控制单元。理解其硬件架构、姿态解算原理以及控制回路结构,是进行PID调参和代码实现的前提。本章将从物理硬件层、数学表示层和控制逻辑层三个维度,系统梳理飞控系统的基础框架,为后续章节的算法实现与参数整定奠定坚实的工程认知。
2.1 嵌入式飞控硬件架构
核心原理:分层模块化设计
飞控硬件架构遵循"感知-决策-执行"的经典控制论闭环。从物理拓扑上看,系统由四个核心功能域构成:传感器域(惯性测量单元IMU、气压计、GPS/RTK、磁力计)、计算域(主控MCU及其外围电路)、执行域(电调ESC、无刷电机、舵机)以及通信域(遥控接收机、数传模块)。各域之间通过标准总线(SPI、I2C、UART、CAN)互联,形成高内聚、低耦合的工程结构。
主控MCU通常选用ARM Cortex-M4F内核的处理器(如STM32F405/F427),其硬件浮点单元(FPU)可显著加速姿态解算中的矩阵运算。传感器数据通过DMA通道直接搬运至内存,避免CPU中断开销,保证1kHz以上的控制频率。电源管理采用分级架构:动力电池(2S-6S LiPo)经BEC降压至5V为MCU和舵机供电,再经LDO稳压至3.3V为数字逻辑和传感器供电,模拟域(如加速度计)独立使用2.8V LDO以降低噪声耦合。
硬件选型与接口设计要点
| 模块 | 典型器件 | 通信接口 | 采样/更新频率 | 关键设计约束 |
|---|---|---|---|---|
| IMU (6轴) | ICM-20602 / BMI088 | SPI (4线) | 1kHz~8kHz | SPI时钟≤10MHz,中断引脚用于数据就绪同步 |
| 磁力计 | IST8310 / AK8963 | I2C | 100Hz | 需与加速度计联合标定,远离大电流导线 |
| 气压计 | MS5611 / BMP388 | I2C/SPI | 50~100Hz | 需加海绵防光,温度补偿 |
| GPS/RTK | u-blox M8N / F9P | UART (115200) | 5~20Hz | PPS引脚用于时间同步 |
| 电调ESC | BLHeli_S / DShot600 | PWM/DShot | 400Hz~1kHz | DShot需DMA+定时器,注意信号电平转换 |
案例拆解:某四轴飞行器硬件调试中的噪声问题
背景与现象:一款自研四轴飞行器在电机怠速时,飞控姿态数据出现周期性跳变,导致悬停时飞机轻微抖动。通过地面站日志发现,陀螺仪Z轴数据在电机启动后出现约±5°/s的噪声波动,频率与电机转速(约200Hz)吻合。
分析过程:首先检查IMU供电,发现AVDD_2V8纹波达120mVpp(正常应<30mVpp)。进一步排查发现,BEC输出的5V直接为舵机供电,而舵机在PWM更新瞬间会产生大电流脉冲,通过地线耦合至IMU模拟电源。同时,SPI数据线(SCK频率10MHz)与电机相线在PCB上平行走线约3cm,形成容性耦合。
解决步骤:① 将IMU模拟电源改为独立LDO(如RT9193-28),输入来自5V,并在输出端并联10μF钽电容+100nF陶瓷电容;② 在SPI总线上串联33Ω电阻以抑制振铃;③ 将电机相线改为双绞线并远离传感器区域;④ 在飞控固件中启用陀螺仪低通滤波(截止频率80Hz)。
结果对比:整改后,陀螺仪噪声降至±0.8°/s以内,悬停抖动消失。该案例说明,硬件架构中的电源完整性和信号完整性设计,直接影响姿态解算的精度,进而影响PID控制效果。
2.2 姿态解算原理:四元数与欧拉角
核心原理:姿态的数学表示
飞行器姿态描述的是机体坐标系(b系)相对于导航坐标系(n系,通常为北东地NED)的旋转关系。常用的表示方法有三种:欧拉角(横滚φ、俯仰θ、偏航ψ)、旋转矩阵(方向余弦矩阵DCM)和四元数(q0+q1i+q2j+q3k)。欧拉角直观但存在万向节锁死问题(当θ=±90°时,φ和ψ无法区分);四元数无奇异性且计算量小,是嵌入式飞控的主流选择。
四元数表示旋转的更新方程为:
q_dot = 0.5 * q ⊗ ω_b
其中ω_b为机体角速度(陀螺仪测量值),⊗表示四元数乘法。实际工程中采用一阶龙格-库塔法进行离散化更新,配合加速度计和磁力计数据通过互补滤波或卡尔曼滤波进行修正,抑制陀螺仪积分漂移。
姿态解算流程与算法选型
- 传感器校准:陀螺仪零偏(静态采集1000样本取均值)、加速度计六面标定、磁力计椭球拟合。
- 数据预处理:低通滤波(截止频率根据机体振动特性设定,通常40~80Hz),去除高频噪声。
- 姿态初始化:利用加速度计计算初始横滚/俯仰,磁力计计算初始偏航,转换为四元数。
- 姿态更新:以1kHz频率执行四元数微分方程更新,周期约1ms。
- 误差修正:将加速度计测量的重力方向与四元数推算的重力方向叉积作为误差,通过PI控制器修正陀螺仪零偏。
案例拆解:四元数与欧拉角转换的精度陷阱
场景:某飞控在高速旋转(偏航角速度达300°/s)时,地面站显示的欧拉角出现跳变。经查,代码中直接使用atan2(2*(q0*q3+q1*q2), 1-2*(q2*q2+q3*q3))计算偏航角,但未对θ接近±90°时的奇异点做保护。
分析:当θ→90°时,cosθ→0,atan2的参数接近0/0,导致数值不稳定。同时,欧拉角在接近±180°时存在±180°跳变,需进行角度归一化处理。
解决方案:① 在姿态解算输出端增加角度限幅与平滑滤波;② 控制回路中直接使用四元数误差(而非欧拉角误差)进行PID计算,避免转换带来的非线性;③ 若必须输出欧拉角,采用atan2的改进公式并添加奇异点检测(当|q2*q2+q3*q3|>0.999时,使用备用公式)。
2.3 控制回路:内环角速率与外环姿态
核心原理:串级PID结构
飞控姿态控制采用经典的串级PID结构,外环为姿态环(控制角度),内环为角速率环(控制角速度)。外环输出作为内环的期望输入,内环输出直接作用于执行机构。这种结构的优势在于:内环能够快速抑制角速度扰动(如阵风、电机振动),外环则保证姿态角跟踪精度。
内环角速率PID的传递函数可简化为:
u = Kp_ω * (ω_ref - ω) + Ki_ω * ∫(ω_ref - ω)dt + Kd_ω * d(ω_ref - ω)/dt
其中ω_ref来自外环PID的输出(期望角速度),ω为陀螺仪测量的实际角速度。内环PID频率通常为1kHz,外环PID频率为200~500Hz(与姿态解算频率匹配)。
控制回路参数整定流程
| 步骤 | 操作 | 观察指标 | 调整策略 |
|---|---|---|---|
| 1. 内环P | 仅启用P项,逐步增大Kp_ω | 角速度响应是否振荡 | Kp_ω增大至轻微振荡后回退20% |
| 2. 内环I | 加入Ki_ω消除稳态误差 | 悬停时角速度零偏 | Ki_ω从0.01开始,逐步增大至零偏消除 |
| 3. 内环D | 加入Kd_ω抑制超调 | 阶跃响应超调量 | Kd_ω从0.001开始,观察噪声放大情况 |
| 4. 外环P | 固定内环参数,调整Kp_θ | 姿态角跟踪误差 | Kp_θ增大至出现低频振荡后回退 |
| 5. 外环I | 消除稳态姿态误差 | 长时间悬停姿态漂移 | Ki_θ设为Kp_θ的1/10~1/5 |
案例拆解:穿越机翻滚后恢复缓慢的调参实战
背景:一架5寸穿越机在完成快速翻滚动作后,姿态恢复存在约200ms的延迟,导致后续动作衔接不流畅。日志显示翻滚后横滚角误差峰值达15°,恢复时间约0.4s。
分析:通过日志对比发现,内环角速率响应存在明显滞后——期望角速度从0阶跃至400°/s时,实际角速度上升时间约80ms,且超调达20%。这表明内环Kp_ω偏小,Kd_ω过大(阻尼过强)。同时,外环Kp_θ为6,在角速度饱和(限幅500°/s)时,角度误差积分项累积过慢。
调参步骤:① 将内环Kp_ω从0.08增大至0.12,Kd_ω从0.004减小至0.002,使角速度上升时间缩短至40ms,超调降至5%;② 将内环积分限幅从20%提高至30%,防止积分饱和;③ 外环Kp_θ从6提高至8,同时将外环输出限幅从300°/s提高至400°/s,以充分利用内环能力。
结果:调整后,翻滚恢复时间缩短至150ms,动作连贯性显著改善。该案例表明,串级PID调参应遵循"先内后外、先P后I再D"的顺序,且需关注各环节的限幅值是否成为瓶颈。
常见误区与总结复盘
- 误区一:直接使用欧拉角进行PID计算。欧拉角在接近±90°时存在奇异性,且角度变化率与角速度之间为非线性关系(需乘以旋转矩阵),导致控制性能下降。应使用四元数误差或旋转向量误差。
- 误区二:内环频率不足。若内环控制频率低于500Hz,角速率环的相位裕度不足,容易引发高频振荡。应确保内环在1kHz以上运行。
- 误区三:忽略执行机构延迟。电机和电调的响应延迟(通常10~30ms)会引入额外相位滞后,需在PID设计中预留相位裕度,必要时加入Smith预估器或前馈补偿。
- 误区四:传感器数据未同步。陀螺仪和加速度计采样时刻不一致,会导致姿态解算中的时间偏差,尤其在快速机动时产生明显误差。应使用硬件中断或DMA实现同步采样。