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用几个基本符号,我简单列一下:

  • 顶事件:最不希望发生的事,画在最上面。
  • 基本事件:最底层的原因,不再往下拆。
  • 与门:所有输入同时发生,输出才发生。
  • 或门:任意一个输入发生,输出就发生。

举个例子。假设顶事件是“电机过热”。往下拆:

  • 要么是“电流过大”(或门)
  • 要么是“散热不良”(或门)

“电流过大”再往下拆:

  • “负载过重” 且 “保护电路失效”(与门)

你看,这样一层层拆下去,就能找到所有可能的故障路径。

关键点:FTA的目的是找到“最小割集”——也就是最少需要哪些基本事件同时发生,才能导致顶事件。这些就是你要重点防护的地方。

2.2.2 定量分析

如果你有每个基本事件的概率数据,还可以算顶事件的发生概率。公式很简单:

对于或门:P(输出) = 1 - ∏(1 - P(输入))
对于与门:P(输出) = ∏ P(输入)

我在做核电项目时,每个基本事件的概率都要从历史数据里查,精确到小数点后六位。但说实话,在嵌入式系统里,很多时候没有这么精确的数据。那怎么办?用相对值——比如“高”、“中”、“低”三个等级,也能指导设计。

避坑指南:我曾经犯过一个错——把FTA做得太细,拆了七八层,结果发现最底层的事件根本没法测量。后来我学乖了:FTA拆到你能控制的那一层就够了。比如“芯片引脚虚焊”这个事件,你拆到“焊接温度不够”就没意义了,因为那是产线的事。

2.3 失效模式与影响分析(FMEA)入门

FMEA,全称Failure Mode and Effects Analysis。它和FTA是反过来的——FTA是从结果推原因,FMEA是从原因推结果。

你想想看,FMEA更像是一个“如果...会怎样?”的头脑风暴。比如:“如果这个电阻短路了,会怎样?” “如果这个电容容量下降了20%,会怎样?”

2.3.1 FMEA的三个维度

每个失效模式,我们评估三个东西:

  1. 严重度(S):后果有多严重?1-10分,10分最严重(比如人员伤亡)。
  2. 发生度(O):发生的概率有多大?1-10分,10分最高(比如几乎必然发生)。
  3. 检测度(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,可以优化但不紧急。

注意:RPN只是一个参考值,不是绝对真理。我见过有人为了降低RPN,故意把O值写低——这是自欺欺人。FMEA的目的是发现问题,不是应付检查。

2.3.3 FMEA与FTA的配合使用

我个人习惯,先做FMEA,把每个组件可能的失效模式列出来。然后挑出RPN高的那些,用FTA做深入分析。

举个例子:FMEA发现“MOSFET短路”的RPN很高。那我就用FTA分析:什么情况下MOSFET会短路?可能是“过压”、“过流”、“过热”。再往下拆,“过压”可能是“电源浪涌”或“栅极驱动异常”...这样一层层挖下去,直到找到根本原因。

嗯,这里要注意:FMEA和FTA不是二选一,而是互补的。FMEA帮你找到“哪里可能出问题”,FTA帮你找到“为什么会出问题”。两个都用,才能把故障分析做透。

我的经验:做FMEA时,一定要拉上硬件工程师、软件工程师、测试工程师一起开会。一个人做FMEA,往往会漏掉很多模式。比如软件工程师可能不知道“电容ESR增大”会导致电源纹波,从而影响ADC采样精度。跨团队讨论,才能把问题想全。

好了,这一章的内容就这些。下一章咱们聊故障检测与诊断——怎么在系统运行中实时发现这些故障。记住一句话:故障不可怕,可怕的是你不知道它发生了。