一、冗余设计概述
1.1 什么是硬件冗余
硬件冗余,说白了就是「多准备一套」。
我经常跟团队里的年轻人讲:你开车出门,后备箱里放个备胎,这就是冗余。电子系统里也一样——关键功能不能只靠一份硬件撑着,万一它挂了,整个系统就瘫了,那不行。
从技术角度定义:硬件冗余是指为系统中的关键功能,配置两套或两套以上的硬件资源。正常工作时,这些资源要么同时运行,要么一主一备;一旦主用通道出问题,备用通道立刻顶上。
举个例子,汽车刹车系统里的轮速传感器。我参与过的一个项目,每个车轮装了2个霍尔传感器,而不是1个。为什么?因为如果只有一个传感器,它坏了,ABS、ESC这些安全功能全废了。两个传感器同时坏的概率,比一个坏的概率低好几个数量级——这就是冗余的价值。
1.2 为什么需要冗余
这个问题,我每次讲课都会先问学员:「你们觉得,一个芯片的失效率是多少?」
有人答10⁻⁶,有人答10⁻⁹。都对,但都不够。因为哪怕失效率是10⁻¹²,只要系统里只有一个通道,它就有失效的可能。而功能安全标准(比如ISO 26262)要求的是:单点故障不能导致安全目标被违反。
说白了,冗余解决两个核心问题:
- 功能安全: 满足ASIL等级要求。比如ASIL D要求单点故障度量指标(SPFM)≥99%,没有冗余几乎不可能达到。
- 可靠性: 提升系统的平均无故障时间(MTTF)。我记得有个项目,客户要求系统在10年内失效概率低于1%,不加冗余根本算不过去。
我遇到过最典型的场景是:一个ECU的电源管理芯片,单颗的FIT(失效率)是50。如果只用一颗,系统整体的FIT就是50。但如果用两颗做冷备份,系统FIT可以降到个位数。嗯,这就是冗余在可靠性上的直接体现。
1.3 冗余设计的分类
冗余不是只有一种玩法。根据工作模式和切换方式,我习惯把它分成三类:
1.3.1 静态冗余
静态冗余,也叫「多数表决冗余」。所有冗余模块同时工作,输出通过表决器决定最终结果。
最经典的例子就是三模冗余(TMR)。三个相同的模块同时计算,输出结果「三取二」。只要有两个模块结果一致,系统就认为那是正确的。
我做过一个飞行控制系统的项目,CPU用了三颗,每颗跑同样的代码,输出通过硬件表决器比较。当时有个同事问:「三颗CPU同时坏的概率有多大?」我说:「概率极低,但更关键的是——如果其中一颗因为宇宙射线发生了单粒子翻转,另外两颗还能把它纠正回来。」
1.3.2 动态冗余
动态冗余,也叫「备份冗余」。平时只有主模块工作,备用模块处于待机状态。一旦检测到主模块故障,系统切换到备用模块。
这种模式在汽车电子里很常见。比如双路供电:主电源挂了,备用电源自动切入。切换时间通常在微秒级,对系统影响很小。
但这里有个坑——我曾经踩过:动态冗余的故障检测机制本身不能失效。如果你用来检测主模块故障的电路自己先坏了,那备用模块永远切不过来。所以,检测电路本身也需要冗余设计。
1.3.3 混合冗余
混合冗余,就是把静态和动态结合起来。一部分模块做静态表决,另一部分做动态备份。
举个例子,我设计过一个ADAS域控制器:
- 主计算通道用了双核锁步(静态冗余),两个核同时跑,输出比较
- 另外还配了一个独立的备份计算模块(动态冗余),主通道挂了就切过去
这种方案的好处是:日常运行时,双核锁步能覆盖大部分故障;极端情况下,备份模块兜底。成本虽然高,但安全等级可以做到ASIL D。
1.4 三种冗余的对比
| 类型 | 工作方式 | 切换延迟 | 成本 | 典型应用 |
|---|---|---|---|---|
| 静态冗余 | 所有模块同时工作,多数表决 | 无 | 高 | 航空航天、高铁控制 |
| 动态冗余 | 主模块工作,备用模块待机 | 有(微秒~毫秒级) | 中 | 汽车电子、工业控制 |
| 混合冗余 | 静态+动态组合 | 部分无,部分有 | 最高 | 自动驾驶、安全关键系统 |
1.5 知识体系框架
下面这张图,是我自己总结的冗余设计知识体系。你把它理解透了,后面章节学起来会轻松很多。
这张图里,我把冗余设计的「为什么」「是什么」「怎么做」串在了一起。你仔细看——最底层是最终目标:满足功能安全目标,提升系统可靠性。上面三层,每一层都是下一层的支撑。
我个人习惯,做任何冗余设计之前,先把这张图画出来。哪个环节薄弱,哪个环节有风险,一目了然。
公众号:蓝海资料掘金营,微信deep3321