2. 故障模型与失效分析:常见故障类型、FTA基础与FMEA入门
各位同学,咱们接着聊。上一章我讲了安全架构的顶层设计,这一章咱们得落地了——聊聊故障本身。说白了,你要做安全,首先得知道敌人长什么样。故障就是那个敌人。
我个人习惯,在开始任何安全关键系统的设计前,先花一周时间做故障建模。为什么?因为你不搞清楚它会怎么坏,你做的保护全是瞎蒙。这就像修桥,你得先知道洪水多大、地震几级,才能决定用多少钢筋水泥。
2.1 常见故障类型:硬件、软件与瞬态
故障分三类,我按自己项目里的经验给你们捋一捋。
2.1.1 硬件故障
硬件故障,说白了就是物理层面的损坏。我在做汽车ECU项目时遇到过,一块芯片用了三年,突然某个引脚虚焊了——这就是典型的硬件故障。
- 永久性故障:芯片烧了、线路断了、电容爆了。修不好就得换。
- 间歇性故障:时好时坏。比如接触不良,拍一下好了,过两天又犯。这种最头疼。
- 参数漂移:电阻值变了、晶振频率偏了。我见过一个电源管理芯片,用了五年后输出电压从3.3V慢慢掉到3.1V,系统偶尔重启,查了两个月才找到原因。
2.1.2 软件故障
软件故障,嗯,这个大家应该不陌生。但我要强调一点:软件故障不是“bug”,而是“设计缺陷”。
- 逻辑错误:if条件写反了、循环边界算错了。我年轻时犯过这种错——一个定时器溢出判断写成了“>=”,结果差一个数,系统每1000小时崩溃一次。
- 资源竞争:两个任务同时访问同一个变量,没加锁。这种问题在单核CPU上不明显,上了多核就炸了。
- 状态机跑飞:状态跳转没覆盖所有情况。我曾经在一个项目中,状态机少写了一个“default”分支,结果输入异常数据时,系统直接卡死。
2.1.3 瞬态故障
瞬态故障,这是最容易被忽视的一类。它只出现一次,然后就消失了,像幽灵一样。
- 单粒子翻转(SEU):高能粒子击中芯片,把内存里的0变成了1。飞机上的电子设备经常遇到这个。
- 电源毛刺:电网波动、电机启动瞬间拉低电压。我在工业控制项目中遇到过,一个伺服电机启动时,电压跌了0.5V,持续2毫秒,结果PLC里的数据全乱了。
- 电磁干扰:手机靠近时、大功率设备开关时。嗯,这个在消费电子产品里很常见。
为什么会这样?因为瞬态故障不留下任何物理痕迹。你事后去查,一切正常。所以对付它,只能用冗余和校验。
| 故障类型 | 特点 | 典型例子 | 检测方法 |
|---|---|---|---|
| 硬件永久故障 | 持续存在 | 芯片烧毁、线路断路 | 自检、BIST |
| 硬件间歇故障 | 时有时无 | 接触不良、焊点开裂 | 重复测试、老化试验 |
| 软件逻辑故障 | 固定触发条件 | 边界条件错误 | 代码审查、单元测试 |
| 软件资源竞争 | 时序相关 | 死锁、数据不一致 | 静态分析、压力测试 |
| 瞬态故障 | 一次性、无痕迹 | SEU、电源毛刺 | ECC、三模冗余 |
2.2 故障树分析(FTA)基础
FTA,全称Fault Tree Analysis。说白了,就是从一个坏结果倒着推,看哪些原因会导致它发生。
我个人习惯,做FTA时先问自己一个问题:“这个系统最不能接受的是什么?” 比如汽车刹车系统,最不能接受的是“刹车失效”。好,那就以这个为顶事件,往下拆。
2.2.1 基本符号
FTA用几个基本符号,我简单列一下:
- 顶事件:最不希望发生的事,画在最上面。
- 基本事件:最底层的原因,不再往下拆。
- 与门:所有输入同时发生,输出才发生。
- 或门:任意一个输入发生,输出就发生。
举个例子。假设顶事件是“电机过热”。往下拆:
- 要么是“电流过大”(或门)
- 要么是“散热不良”(或门)
“电流过大”再往下拆:
- “负载过重” 且 “保护电路失效”(与门)
你看,这样一层层拆下去,就能找到所有可能的故障路径。
2.2.2 定量分析
如果你有每个基本事件的概率数据,还可以算顶事件的发生概率。公式很简单:
对于或门:P(输出) = 1 - ∏(1 - P(输入))
对于与门:P(输出) = ∏ P(输入)
我在做核电项目时,每个基本事件的概率都要从历史数据里查,精确到小数点后六位。但说实话,在嵌入式系统里,很多时候没有这么精确的数据。那怎么办?用相对值——比如“高”、“中”、“低”三个等级,也能指导设计。
2.3 失效模式与影响分析(FMEA)入门
FMEA,全称Failure Mode and Effects Analysis。它和FTA是反过来的——FTA是从结果推原因,FMEA是从原因推结果。
你想想看,FMEA更像是一个“如果...会怎样?”的头脑风暴。比如:“如果这个电阻短路了,会怎样?” “如果这个电容容量下降了20%,会怎样?”
2.3.1 FMEA的三个维度
每个失效模式,我们评估三个东西:
- 严重度(S):后果有多严重?1-10分,10分最严重(比如人员伤亡)。
- 发生度(O):发生的概率有多大?1-10分,10分最高(比如几乎必然发生)。
- 检测度(D):能不能在出事前发现?1-10分,10分最难检测。
然后算一个风险优先级数(RPN):
RPN = S × O × D
RPN越高,越需要优先处理。我一般把RPN超过100的列为“必须整改”,超过50的列为“建议整改”。
2.3.2 一个简单的FMEA表格
拿一个电机驱动电路举例:
| 组件 | 失效模式 | 影响 | S | O | D | RPN | 改进措施 |
|---|---|---|---|---|---|---|---|
| MOSFET | 漏极-源极短路 | 电机失控、电流过大 | 9 | 3 | 6 | 162 | 加保险丝、过流检测 |
| MOSFET | 栅极开路 | 电机不转 | 5 | 2 | 4 | 40 | 加下拉电阻 |
| 电解电容 | 容量衰减50% | 电源纹波增大 | 4 | 5 | 3 | 60 | 选用长寿命电容 |
你看,第一行的RPN是162,必须处理。第三行是60,可以优化但不紧急。
2.3.3 FMEA与FTA的配合使用
我个人习惯,先做FMEA,把每个组件可能的失效模式列出来。然后挑出RPN高的那些,用FTA做深入分析。
举个例子:FMEA发现“MOSFET短路”的RPN很高。那我就用FTA分析:什么情况下MOSFET会短路?可能是“过压”、“过流”、“过热”。再往下拆,“过压”可能是“电源浪涌”或“栅极驱动异常”...这样一层层挖下去,直到找到根本原因。
嗯,这里要注意:FMEA和FTA不是二选一,而是互补的。FMEA帮你找到“哪里可能出问题”,FTA帮你找到“为什么会出问题”。两个都用,才能把故障分析做透。
好了,这一章的内容就这些。下一章咱们聊故障检测与诊断——怎么在系统运行中实时发现这些故障。记住一句话:故障不可怕,可怕的是你不知道它发生了。