MTBF计算书实战:从BOM到元器件应力分析与可靠性预计 简介面向电子硬件可靠性预计、元器件失效率计算与MTBF报告编制人员提供一份可直接参照的MTBF计算书示例重点解决实际项目中缺少完整算例、参数取值和表格组织范式的问题。整包仅含1份PDF约187KB共34页以金属膜电阻器为对象系统展示MTBF概念、失效率公式λpλbπEπCVπQ以及基本失效率、环境系数、质量系数、应力系数等参数在具体型号和位号中的取用与汇总方式并逐项列出位号、数量、型号与各系数说明工作失效率的汇总过程和结果呈现便于对照检查参数选取是否完整。读者可据此理解从器件应力、温度条件到工作失效率的计算路径参考其章节结构、表格字段和编制口径用于产品可靠性预计、客户资料准备或内部计算书模板整理。已有1649人学习。1. MTBF计算书不是“算”出来的是“查”出来的手里这份 34 页的 MTBF计算书第一眼看像天书几百行位号每行后面挂着一串表号工作失效率精确到小数点后四五位。真拿计算器从头敲一遍会发现要“算”的地方只有乘法和加法剩下全是查表和抄数。它解决的不是“MTBF 公式是什么”而是“一台 80VDC 输入、5V1/4A、5V2/0.5A、-5V3/0.5A 输出的电源按元器件应力分析法走完一遍到底要准备哪些数据、每一列填什么、哪些系数会让人栽跟头”。适合正在写可靠性预计报告、要交客户交付件、或者想给自家板子估个寿命底线的硬件工程师。公式早就写在那里难的是把 BOM 一行行对进表格里还得保证对得进去。2. λp λb·πE·πCV·πQ把 34 页表格还原成一个通用式子2.1 串联模型整机 MTBF 为什么不等于“最短命的那个器件”计算书默认的前提是板上每一个元器件都是串联的。任何一个位号失效整机就判失效器件之间相互独立失效率在预计周期内视为常数。满足这三条整机失效率就是各器件工作失效率的直接相加Σλ Σ Ni × λpiMTBF 1 / Σλ这个式子带来一个反直觉的结论。你可能盯着那几颗大电解电容和 MOS 管觉得它们才是寿命短板但整机 MTBF 并不由它们单独决定——真正决定结果的是“所有位号的失效率之和”。一百颗看起来不起眼的 1/4W 电阻每颗 0.03×10⁻⁶/h加起来就是 3×10⁻⁶/h比一颗 0.5×10⁻⁶/h 的电解电容重得多。所以做敏感性分析时先看“谁贡献的 Σλ 最多”而不是“谁最贵、谁最热”。还有一点容易混严格讲不可修复产品谈的是 MTTF可修复产品才谈 MTBF。但电源类交付件里这两个叫法经常混着用本质上都是“平均无故障时间”。心里清楚就行写报告时按客户模板的用词来不用在这种地方较真。MTBF 1/Σλ得到的是一个指数分布参数不代表“能连续跑这么久不坏”。实际工作到 t 时刻仍然正常的概率是P(t) e^(-t/MTBF)。MTBF 为 10 万小时不等于跑 10 万小时才坏一次而是大约 37% 的样本能无故障撑过 10 万小时。2.2 每一行失效率的四段结构把这 34 页拆开任意一行都是同一个结构只是 π 系数的个数不同段内容例子电阻行常见误填器件身份种类、位号、型号、厂商、数量 N金属膜电阻 / R1 / RN1/2WS 1MΩ / N2把贴片电阻并进“金属膜电阻”类基本失效率λb只跟器件类型和规格有关跟环境无关0.005010⁻⁶/h拿同类别的别的阻值直接套π 系数环境、质量、应力、温度、电路功能等πE1.8、πQ1.0、πCV1.6全板 πE 填同一个值工作失效率λp λb × 全部 π 系数再乘 N合计 0.028810⁻⁶/h汇总时又乘了一遍 N先看一个容易忽略的差异同一块板、同一个环境不同类型的器件查出来的 πE 并不相同。电阻是 1.8铝电解电容是 2.4整流二极管是 1.7MOS 管是 2.0光耦是 1.8接插件是 1.5。这不是谁抄错了而是每一类器件对应的系数表本来就不一样。把 πE 当成“整机环境参数”统一填一个数是这类计算书里最常见的系统性偏差。再看 π 系数的个数。电阻那行只有 πE、πQ、πCV 三项二极管那行却有 πE、πQ、πA、πS2、πr 五项MOS 管还要多一个 πK。不同器件类型的公式在结构上是不同的不能用一个模板套到底。电解电容要额外乘 πCV电压应力比二极管要额外乘 πA应用系数和 πS2二次应力光耦要乘 πT温度和 πC电路功能。表格里那些“π 系数”列看似空着一大片其实是留给不同器件类型的。提示判断一行填得对不对最快的办法是看 π 系数的个数。电阻行出现 πA 或 πK基本可以判定是模板串行了。2.3 拿三行数据验算确认你读对了列光看结构没用得能算回去。挑三行能形成完整对应关系的位号组类型Nλbπ 系数单个 λp合计R1金属膜电阻20.0050πE1.8、πQ1.0、πCV1.60.01440.0288CD9~CD13铝电解电容40.0916πE2.4、πQ0.3、πCV1.90.12530.5012D8~D22整流二极管80.0160πE1.7、πQ1.0、πA0.20.005440.0435三行验算的过程R10.0050 × 1.8 × 1.0 × 1.6 0.0144两颗合计0.0288CD9~CD130.0916 × 2.4 × 0.3 × 1.9 0.1253四颗合计0.5012D8~D220.0160 × 1.7 × 1.0 × 0.2 0.00544八颗合计0.0435如果自己按这三行复现后对不上先别怀疑系数按顺序查三件事单位是不是 10⁻⁶/hN 到底乘在哪一层πQ 有没有从“质量等级 B2”错译成一个数字 2。这三处能解释九成以上的偏差。3. 把 BOM 变成失效率表位号、数量与系数的对齐3.1 位号合并与数量列N 到底乘在哪一层计算书里 R9、R14、R19、R27、R29、R57、R58、R59、R62 九颗 1K 电阻合成一行N9这是正确的做法——同型号、同应力、同温度的位号才允许合并。合并的判据不是“阻值一样”而是“阻值 封装 精度 应力比 工作温度”五项全一致。少一项就得拆行。拆行的反例在这份文档里就有80VDC 那一节写的是RSS2W 0.22Ω翻到 100VDC 那一节同一位号变成了RSS1W 0.75Ω。输入电压变了采样电阻的阻值和功率都跟着换这是真实现象但也说明这两行根本不能合并——它们代表两种不同的物料状态。如果你的 BOM 里一个位号对应多个可选料合并前先确认最终交付的是哪一版。关于 N 乘在哪一层我的习惯是末列一律存“合计失效率”单只失效率单独留一列做核对。这样汇总时只做一次sum()不会出现“表里已经乘过 N、汇总又乘一次”的重复计入。文档里几个行能验证这一点D8~D22 八颗单只 0.00544末列 0.04352正好是 8 倍CD9~CD13 四颗单只 0.1253末列 0.5012正好是 4 倍。看到末列等于单只乘以 N说明这一列是合计值。提示如果一批数据的末列和单只恰好相等、而 N 又大于 1先别急着往下算回头确认那一列到底记的是单只还是合计。3.2 实测应力和温度从哪来π 系数里最容易被拍脑袋填的是应力项和温度项而这两项恰恰是拉开门差距的地方。应力比 S 的定义是“实际工作值 / 额定值”。电阻看功率比电容看电压比二极管看电流或电压比中的较大者。计算书里电阻的应力系数 S 大量填 0.1说明这些电阻的实际功耗只有额定功率的十分之一电解电容则填 0.3 到 0.8明显吃得更满——这也是为什么电容那几行的 λp 一骑绝尘。温度要填热点温度不是环境温度。文档里 PWM 芯片那段写的是Tj 55 3 58℃55 是壳温、3 是热阻折算的温升这个“壳温 温升”的写法值得学。用 25℃ 室温去查 πT等于假设芯片不发热算出来的 MTBF 会偏乐观一大截。至于电阻、电容那些行统一写“环境温度 25℃”是因为它们的温升相对小、且手册表本身就是按环境温度组织的属于合理简化但芯片、MOS、大功率二极管不能这么干。3.3 系数表的索引规律表格里那些表5.1.6.8-1、表5.1.6.8-2看着像乱码其实有规律可循前缀5.1.6.8指向“铝电解电容”这一大类尾号-1是环境系数 πE-2是质量系数 πQ-3是电压应力系数 πCV-5是基本失效率 λb。同一组前缀下尾号越小越靠前通常对应越基础的系数。掌握这个规律的好处是拿到一份陌生的计算书不用逐行读只看每一行引用的表号前缀就能判断它归到了哪个器件大类。如果一行电阻引用了5.1.6.x开头的表电容类基本可以判定归类错了。会读表号比会套公式更能决定这份文档能不能被复现。3.4 用 Python 把汇总跑起来手工算几十行还行几百行必须上脚本。下面这段只取五组器件做小样结构可以直接扩到整份 BOMimport pandas as pd # 一行 一组“同型号 同应力 同温度”的位号 # lb 单位 10^-6/hpi_* 为各类系数n 为该组数量 rows [ dict(groupR1, kind金属膜电阻, n2, lb0.0050, pi_E1.8, pi_Q1.0, others{pi_CV: 1.6}), dict(groupR10/R15/R46, kind金属膜电阻, n3, lb0.0050, pi_E1.8, pi_Q1.0, others{pi_CV: 1.0}), dict(groupCD9~CD13, kind铝电解电容, n4, lb0.0916, pi_E2.4, pi_Q0.3, others{pi_CV: 1.9}), dict(groupD8~D22, kind整流二极管, n8, lb0.0160, pi_E1.7, pi_Q1.0, others{pi_A: 0.2, pi_S2: 1.0, pi_r: 1.0}), dict(groupQ2, kindMOS管, n1, lb0.3560, pi_E2.0, pi_Q0.2, others{pi_A: 2.5, pi_K: 0.7, pi_r: 1.0}), ] df pd.DataFrame(rows) # 把 others 里不定长的系数摊平成列缺失项补 1.0不参与乘积 pi_cols sorted({k for d in df[others] for k in d}) for c in pi_cols: df[c] df[others].apply(lambda d: d.get(c, 1.0)) # 单只失效率 lb × 全部 π 系数缺省 1.0 的项不影响结果 coef_cols [pi_E, pi_Q] pi_cols df[coef_prod] df[coef_cols].prod(axis1) df[lam_single] df[lb] * df[coef_prod] df[lam_total] df[lam_single] * df[n] # 数量只在这里乘一次 lam_sum df[lam_total].sum() df[share] df[lam_total] / lam_sum * 100 print(df[[group, kind, n, lam_single, lam_total, share]] .round(5).to_string(indexFalse)) print(f\nΣλ {lam_sum:.4f} ×10^-6/h) print(fMTBF {1/lam_sum:.2f} ×10^6 h ≈ {1/lam_sum*1e6/8760:.0f} 年)跑出来的结果是 Σλ ≈ 0.8497×10⁻⁶/hMTBF ≈ 1.18×10⁶ 小时。这个数字看着离谱是因为只塞了五组器件——真实整机有几百个位号Σλ 会大两三个数量级MTBF 自然回落到正常区间。代码里有三个参数值得说明。n只参与lam_total的计算绝不进lam_single这是防止重复计入的关键隔离。others字典里缺失的系数统一补 1.0是因为乘 1 不改变结果这样不同类型器件可以共用同一张表不必为每种器件建一个 schema。share那一列是给下一步用的——按占比降序排前十名就是整机的失效率大头改料、降额、加散热都优先从这几个位号下手。4. 80VDC 与 100VDC 两套工况多工况汇总与结果自检4.1 为什么要按输入电压分两遍算这份文档把 80VDC 和 100VDC 分成前后两大块各算一遍。原因很直接输入电压变了采样电阻的阻值要换0.22Ω → 0.75Ω开关管的占空比和工作点变了二极管的电压应力比跟着变πS 和 πCV 都会动。这些变化会传导到最终 λp 上不能只算一种工况就交差。更实际的原因是客户要求。电源类产品的规格书通常标一个输入范围交付件需要证明“在最不利输入下仍然满足 MTBF 指标”。所以要按边界工况各算一遍取更差的那个。4.2 取最坏值但不能重复计入多工况汇总的原则是同一台整机同一时刻只可能处在一种工况。所以不能把 80VDC 和 100VDC 的 Σλ 相加那样相当于假设两个工况同时发生。正确做法是分别得到Σλ_80和Σλ_100取较大者作为整机失效率再用MTBF 1/Σλ_最坏得出结果。实际操作中有个细节不是所有器件在两种工况下都变。变压器、PCB、接插件、外壳相关的失效率基本不动电阻电容里也只有承担应力变化的那部分会变。如果两套表算出来的 Σλ 差异很小说明整机的失效率大头落在“与输入电压无关”的器件上这时候再优化输入侧的降额收益有限。4.3 三个量级自检算完别急着写结论先做三道量级检查能挡掉大部分低级错误。第一道看 Σλ 的量级。几十个位号的小板子Σλ 通常在 0.1 到 1×10⁻⁶/h几百个位号的整机电源落在 10 到 200×10⁻⁶/h 之间。如果你的结果跑到 10⁴ 量级八成是某个 π 系数多乘了一位或者单位从 10⁻⁶/h 错当成了 10⁻⁹/h。第二道看单项占比。正常电源里电解电容、光耦、继电器、变压器这几类通常是失效率大户单类占到 20% 到 40% 不奇怪。如果某颗普通 1/4W 电阻的贡献超过了整块板的 30%回去查它的 π 系数是不是串行了。第三道看两套工况的比值。80VDC 和 100VDC 的 Σλ 一般差在 5% 到 30% 之间差出几倍就说明某处应力比算错了。文档里 R11 从 0.22本文还有配套的精品资源点击获取