4. 故障切换策略:冷备份、热备份、温备份与切换时序
各位同学,咱们今天聊点硬核的——故障切换策略。说实话,我在飞控这行摸爬滚打十几年,见过太多因为切换策略没选好,导致飞机在天上“抽风”的案例。嗯,这里说的“抽风”不是开玩笑,是真的会掉高度。
故障切换,说白了就是主系统挂了,备系统怎么顶上去。但怎么顶、多快顶、顶上去会不会出问题,这里面的门道可深了。我个人习惯把备份策略分成三类:冷备份、热备份、温备份。咱们一个一个来拆。
4.1 冷备份:省电但慢,适合非关键任务
冷备份,就是备系统平时完全断电,或者处于未初始化状态。主系统正常工作时,备系统就是个“摆设”。只有主系统挂了,备系统才上电、初始化、加载参数,然后接管控制。
优点很明显:
- 功耗低,备系统不耗电
- 寿命长,电子元件不工作就不老化
- 结构简单,不需要复杂的同步逻辑
缺点也很致命:
- 切换时间长,通常需要几百毫秒到几秒
- 备系统启动后状态未知,需要重新校准
- 不适合对实时性要求高的场景
我曾经在一个农业植保无人机项目里用过冷备份。结果有一次主IMU突然挂了,备系统启动花了1.2秒。你想想看,1.2秒对于悬停的无人机意味着什么?掉高度至少3米,差点撞到田埂。从那以后,我对冷备份就特别谨慎了。
适用场景:非关键传感器(如气压计、磁力计)、地面站通信链路、非安全关键任务。
4.2 热备份:最快但最贵,关键任务首选
热备份,就是备系统一直处于工作状态,和主系统同步运行。主系统输出控制指令时,备系统也在计算同样的结果,只是不输出。一旦主系统挂了,备系统立刻接管,切换时间可以做到微秒级。
我习惯把热备份叫做“双机热备”。说白了,就是两套系统同时跑,谁主谁备只是逻辑上的区别。
优点:
- 切换极快,通常小于1ms
- 备系统状态与主系统一致,接管后无冲击
- 适合安全关键系统(如飞控主控、IMU)
缺点:
- 功耗高,两套系统同时工作
- 需要复杂的同步机制
- 成本高,硬件资源翻倍
我在做某型物流无人机时,飞控主芯片用了双核锁步架构,其实就是一种硬件级别的热备份。两个核执行同样的指令,输出结果实时比对。一旦不一致,立刻切换。这种方案切换时间可以做到纳秒级,但代价是芯片面积和功耗都翻倍了。
4.3 温备份:折中方案,工程中最常用
温备份,就是备系统处于上电状态,但处于低功耗模式或待机模式。备系统会定期从主系统同步关键状态,但不会全速运行。切换时,备系统需要从待机状态恢复到全速运行状态。
我个人觉得,温备份是工程中最实用的方案。为什么?因为它兼顾了功耗和切换速度。
典型参数:
| 参数 | 冷备份 | 温备份 | 热备份 |
|---|---|---|---|
| 切换时间 | 100ms~几秒 | 1ms~50ms | <1ms |
| 功耗占比 | 0% | 10%~30% | 100% |
| 状态同步 | 无 | 定期同步 | 实时同步 |
| 硬件成本 | 低 | 中 | 高 |
| 适用场景 | 非关键 | 次关键 | 安全关键 |
温备份的同步频率怎么定?我一般建议:姿态数据同步频率不低于控制频率的1/10。比如控制频率是400Hz,那同步频率至少40Hz。太低的话,切换时状态差异太大,容易产生瞬态冲击。
4.4 切换时序:别让切换变成灾难
切换时序,就是主系统故障后,备系统接管的时间流程。这里有个关键点:切换不是瞬间完成的,而是一个过程。我见过太多人忽略了切换过程中的瞬态问题。
典型的切换时序:
- 故障检测阶段(0~T1):系统检测到主系统异常,比如IMU数据超时、看门狗超时、自检失败等。这个阶段通常需要1~10ms。
- 故障确认阶段(T1~T2):为了避免误判,系统会进行多次确认。比如连续3次检测到异常才确认故障。这个阶段需要5~20ms。
- 切换决策阶段(T2~T3):系统决定切换到哪个备系统,并发送切换指令。这个阶段通常小于1ms。
- 备系统接管阶段(T3~T4):备系统从待机状态切换到工作状态,输出控制指令。这个阶段取决于备份策略:热备份<1ms,温备份1~50ms,冷备份100ms以上。
- 状态稳定阶段(T4~T5):备系统接管后,需要一段时间让控制环路稳定下来。这个阶段通常需要10~100ms。
整个切换过程,从T1到T5,飞控系统处于“无主”状态。这段时间越长,飞行器越危险。我个人的经验是:对于多旋翼,切换总时间应控制在50ms以内;对于固定翼,可以放宽到100ms;对于直升机,最好控制在20ms以内。
4.5 瞬态抑制:切换时最容易被忽视的问题
瞬态抑制,说白了就是切换瞬间,控制输出不能有突变。你想想看,如果主系统输出50%油门,备系统接管时输出80%油门,飞机会怎么样?直接窜上去,然后掉下来。
常见的瞬态问题:
- 输出跳变:备系统接管时,控制输出与主系统最后时刻的输出不一致
- 积分饱和:备系统的PID积分项与主系统不同,导致控制量突变
- 状态跳变:备系统的姿态估计与主系统有偏差,导致控制指令异常
我常用的抑制方法:
- 输出平滑:切换时,控制输出从主系统最后值逐渐过渡到备系统计算值。过渡时间通常10~20ms。
- 状态同步:备系统在待机时,持续同步主系统的PID积分项、滤波器状态等。这样切换时状态一致。
- 软切换:不是瞬间切换,而是让备系统输出权重从0逐渐增加到1,主系统输出权重从1逐渐减小到0。这个过程叫“bumpless transfer”(无扰切换)。
我曾经在一个项目中,备系统接管时没有做输出平滑。结果切换瞬间,无人机猛地向左偏了30度。幸好是在测试阶段,要是真飞出去,后果不堪设想。从那以后,我每次做切换逻辑,都会在代码里加一个“软切换”函数,强制输出过渡。
代码示例:无扰切换实现
// 无扰切换函数
// 输入:主系统输出 main_out,备系统输出 backup_out,切换进度 progress (0~1)
// 输出:平滑后的控制输出
float bumpless_transfer(float main_out, float backup_out, float progress) {
// progress从0到1,表示切换进度
// progress=0时,完全使用主系统输出
// progress=1时,完全使用备系统输出
float smooth_out = (1.0f - progress) * main_out + progress * backup_out;
return smooth_out;
}
// 切换过程中调用
// 假设切换总时间为20ms,每1ms调用一次
for (int i = 0; i < 20; i++) {
float progress = (float)i / 20.0f;
float output = bumpless_transfer(main_output, backup_output, progress);
set_actuator(output);
delay(1); // 1ms延时
}
无扰切换的过渡时间不是越长越好。太短了抑制效果差,太长了系统响应慢。我一般取10~30ms,具体取决于控制环路的带宽。带宽越高,过渡时间可以越短。
4.6 总结:怎么选?
好了,咱们把三种备份策略和切换时序都过了一遍。最后给个选择建议:
- 安全关键系统(飞控主控、IMU、执行器):用热备份,切换时间控制在1ms以内
- 次关键系统(GPS、空速计、高度计):用温备份,切换时间控制在50ms以内
- 非关键系统(地面站链路、日志存储):用冷备份,切换时间可以放宽到秒级
记住一点:没有完美的备份策略,只有最适合你项目的方案。我个人的习惯是,先评估系统的安全等级,再决定备份策略。安全等级越高,越要舍得花钱上热备份。
嗯,这一章就到这里。下一章咱们聊聊故障注入测试,这可是验证备份策略好不好用的唯一标准。到时候我会分享一些我在测试中踩过的坑,保证让你少走弯路。