简介:这是一份面向硬件研发、测试工程师及质量管理人员的技术培训讲义,聚焦可靠性测试的完整方法体系,帮助读者建立从概念到落地的测试认知。压缩包内为1个ppt文件,约3.12MB,以幻灯片形式组织内容,便于直接用于内部培训或自学。讲义围绕测试概述、测试项目选择与测试用例设计、可测试性设计、测试仪器选型与工装设计、测评过程管理及参考标准等模块展开,并重点剖析按键粘连、显示屏静电损坏、数据接口错误、接插件松动等潜在失效点,以及环境应力、机械应力、电气应力对应的失效类型。同时区分研发、中试、批量生产、鉴定各阶段的测试目的与应力条件差异,说明如何确定产品耐环境应力的工作极限与破坏极限、激发系统性缺陷并验证纠正措施。目前已有329人学习参考,适合需要系统梳理可靠性测试思路、排查典型故障隐患的从业者。
1. 可靠性测试培训讲义里最先要掰清楚的一件事:MTBF不是寿命
带过新人做可靠性测试培训,最常见的翻车点不是试验不会做,而是第一页 PPT 就把 MTBF 写成"平均寿命"。台下的人照这个理解去设计试验,样本量、试验时长、判定门限全错。MTBF 是平均故障间隔时间,只对可修复产品成立,是稳态失效强度的倒数;对芯片、密封件、一次性执行机构这类不可修复件,该用 MTTF。这一页讲不清,后面的浴盆曲线、加速因子、B10 寿命全是空中楼阁。
一份能拿去讲课的可靠性测试培训讲义,至少要压住四块内容:指标口径、失效分布(以 Weibull 为主)、试验设计(环境应力筛选、加速寿命、HALT/HASS)、数据分析(删失数据、参数估计、置信区间)。缺任何一块,学员回去只能照抄试验条件,换个产品就得重新问人。
2. 讲义里的可靠性指标与Weibull寿命分布:β、η和B10怎么算
指标这一块如果只用一页文字带过,学员回去一定会把几个符号混着用。先把每个量对应什么对象、什么假设条件写死在表格里,再讲浴盆曲线才有落脚点。Weibull 之所以在讲义里占这么大篇幅,是因为 β 一个参数就能把早期失效、随机失效、磨损失效三种机理区分开,比指数分布多一层诊断能力。
2.1 讲义第一页就该统一的指标口径
| 指标 | 定义 | 适用对象 | 常被误用成 |
|---|---|---|---|
| MTTF | 平均失效前时间 | 不可修复件 | 系统寿命 |
| MTBF | 平均故障间隔时间 | 可修复系统 | 单件寿命 |
| λ(t) | t 时刻失效率 | 任意 | 恒定常数 |
| R(t) | 可靠度,R(t)=1−F(t) | 任意 | 可用率 |
| B10 | 累计失效 10% 对应时间 | 任意 | 中位寿命 |
在恒定失效率假设下才有 λ=1/MTBF 这个简化关系,一旦产品处在早期失效期或耗损期,这条式子立刻失真。讲义里要明确写:这个换算只在偶然失效期、且失效服从指数分布时成立。B10 常被写成"平均寿命的十分之一",其实它由分布参数决定,β=2 时 B10 约为 0.46η,β=3.5 时约为 0.66η,差距很大。
2.2 浴盆曲线三段与失效判据的对应关系
早期失效期对应的是工艺缺陷、来料波动,讲义里要把它和环境应力筛选(ESS)、老化(Burn-in)绑在一起讲,筛选应力的目标是"只暴露缺陷、不引入新损伤"。偶然失效期对应正常使用,失效率近似常数,MTBF 的估算、可靠性预计都在这一段做。耗损失效期对应磨损、疲劳、腐蚀,对应的试验项是加速寿命试验和耐久试验,判据一般写成"到寿时 B10 不劣于某个值"。
把三段的应力水平和判据写成一一映射,学员才不会把 ESS 的应力直接拿来当寿命试验应力用。常见做法是:ESS 温度变化率取 10~15 ℃/min、上限不超过产品破坏限的 70%;加速寿命试验的应力则要压到能产生目标失效机理、又不引入非相关机理的区间。
2.3 用Weibull分布拟合失效数据:形状参数β在说什么
Weibull 累积失效函数写成 F(t)=1−exp(−(t/η)^β),η 是特征寿命(此时失效概率 63.2%),β 是形状参数,直接对应失效机理:
| β 区间 | 物理含义 | 讲义里常配的试验 |
|---|---|---|
| β<1 | 早期失效,失效率递减 | 来料、ESS 筛选效果评估 |
| β≈1 | 随机失效,退化为指数分布 | MTBF 估算 |
| 1<β<2.5 | 早期磨损或复合机理 | 温循、振动 |
| β>3 | 明显耗损,接近正态 | 疲劳、轴承、焊点 |
下面这段代码用中位秩法对失效点做线性化回归,这是讲义里最容易手算演示的一种估计方式:
import numpy as np # 观测到的失效时间(小时),仅取已失效样本 t_fail = np.array([820, 1150, 1340, 1600, 1980, 2450]) k = len(t_fail) # 中位秩近似:F_i = (i - 0.3) / (k + 0.4) F = (np.arange(1, k + 1) - 0.3) / (k + 0.4) # Weibull 线性化:ln(-ln(1-F)) = beta*ln(t) - beta*ln(eta) slope, intercept = np.polyfit(np.log(t_fail), np.log(-np.log(1 - F)), 1) beta = slope eta = np.exp(-intercept / beta) print(f"形状参数 beta={beta:.3f}, 特征寿命 eta={eta:.0f} h") print(f"B10={eta * (-np.log(0.9)) ** (1 / beta):.0f} h")参数说明上,-0.3和+0.4是 Benard 中位秩的经验修正常数,样本量小于 20 时用它比用 i/(n+1) 更稳;np.log(-np.log(1 - F))是 Weibull 的线性化变换,斜率就是 β,截距是 −β·ln(η)。注意这个回归只用了失效点,删失样本被直接丢掉,样本量小的时候会明显高估 η——这正是后面要用极大似然的原因。判断结果是否可信,先看 β 落在哪个区间,再看拟合点在 Weibull 概率纸上是否成一条直线;如果中间明显弯折,说明混了两个失效机理,需要按失效模式拆开分别拟合。
3. 加速寿命试验设计与加速因子计算:Arrhenius与Coffin-Manson参数怎么定
加速试验的核心目的是把正常使用条件下要跑几年的失效,压缩到几周内复现。压缩的倍数就是加速因子 AF,AF 算错,整份报告的寿命外推全废。讲义里最稳妥的写法是:按应力类型分别列模型,把每个模型里那个"需要凭经验取值"的参数单独标红,并给出来源建议。
3.1 Arrhenius温度加速模型:活化能Ea怎么取
温度加速用 Arrhenius 模型,加速因子 AF=exp[(Ea/k)(1/T_use−1/T_stress)],其中 k=8.617×10⁻⁵ eV/K,温度必须换算成开尔文。争议最大的是 Ea,取值直接决定 AF,差 0.2 eV 就可能让 AF 差一倍以上。讲义里应给出按失效机理分类的取值区间,而不是给一个万能数字:
| 失效机理 | Ea 典型值(eV) | 备注 |
|---|---|---|
| 金属间化合物扩散 | 0.7~1.0 | 焊点 IMC 生长 |
| 电迁移 | 0.5~0.7 | 互连失效 |
| 栅氧击穿 | 0.3~0.5 | 介质失效 |
| 接触腐蚀 | 0.4~0.6 | 需配合湿度模型 |
| 通用保守值 | 0.7 | 缺少机理数据时的兜底 |
3.2 Coffin-Manson与Peck模型:温循、振动、湿热的加速因子
温度循环用 Coffin-Manson,AF=(ΔT_stress/ΔT_use)^m,m 常取 2~4,焊点类取 1.9~2.7;若循环频率差异大,需要换 Norris-Landzberg 并补一个频率修正项。湿热用 Peck 模型,AF=(RH_s/RH_u)^n·exp[(Ea/k)(1/T_u−1/T_s)],n 一般取 2.5~3,湿度按相对湿度百分数代入。振动用逆幂律,AF=(G_s/G_u)^b,随机振动 b 取 4~6,正弦振动或单一频率下 b 可能更小。
下面把三个模型封装成可直接复用的函数:
import numpy as np K_B = 8.617e-5 # 玻尔兹曼常数, eV/K def arrhenius_af(T_use_C, T_stress_C, Ea): """温度加速因子;试验时间 = 正常使用时间 / AF""" Tu, Ts = T_use_C + 273.15, T_stress_C + 273.15 return np.exp(Ea / K_B * (1 / Tu - 1 / Ts)) def coffin_manson_af(dT_use, dT_stress, m=2.5): """温循加速因子,m 为 Coffin-Manson 指数""" return (dT_stress / dT_use) ** m def peck_af(RH_use, RH_stress, T_use_C, T_stress_C, Ea=0.7, n=2.8): """温湿度加速因子,RH 用百分数""" Tu, Ts = T_use_C + 273.15, T_stress_C + 273.15 return (RH_stress / RH_use) ** n * np.exp(Ea / K_B * (1 / Tu - 1 / Ts)) print(f"Arrhenius AF={arrhenius_af(55, 125, 0.7):.1f}") print(f"Coffin-Manson AF={coffin_manson_af(25, 100, 2.5):.1f}") print(f"Peck AF={peck_af(45, 85, 35, 85):.1f}")参数说明:m越大,温循外推越激进,焊点类器件建议先用 2.0 做保守估计,再拿实际失效数据回归出真实值;Peck 的n取 2.8 是常见折中值,若产品有凝露风险,这个模型直接失效,必须改用带偏压的 HAST 条件。约束条件是温度不能越过材料的 Tg 点或焊料熔点附近的相变区,越过之后失效机理换了一个,算出来的 AF 就没有意义。
3.3 样本量与试验时长的确定:定时截尾加卡方单边下限
样本量分两种场景。第一种是零失效方案,只有可靠度目标 R 和置信度 C,用 n=ln(1−C)/ln(R)。第二种是给定试验时长 T、允许失效数 r,用 MTBF 单边下限 θ_L=2T/χ²(1−C, 2r+2),这是定时截尾的标准做法,讲义里务必写清 χ² 的自由度是 2r+2 而不是 2r。
import numpy as np from scipy import stats def zero_failure_samples(R, C): """零失效方案所需样本量:R 可靠度目标,C 置信度""" return int(np.ceil(np.log(1 - C) / np.log(R))) def mtbf_lower_limit(T_total, r, C=0.9): """定时截尾 MTBF 单边下限,T_total 为总台时,r 为失效数""" chi2 = stats.chi2.ppf(1 - C, 2 * r + 2) return 2 * T_total / chi2 print(f"R=0.90, C=0.90 -> n={zero_failure_samples(0.90, 0.90)}") print(f"R=0.99, C=0.90 -> n={zero_failure_samples(0.99, 0.90)}") print(f"总台时 20000h, 2 个失效 -> MTBF 下限 {mtbf_lower_limit(20000, 2):.0f} h")R=0.90, C=0.90对应 22 台,R=0.99, C=0.90直接跳到 230 台,这个数量级跳变要在讲义里明确提示,避免有人在评审会上随口报一个 0.99 的可靠度目标。总台时按"投入台数×试验小时数"累加,中途失效的样品停机后不再计入后续台时,这一点如果统计口径不统一,算出来的下限会偏高。
4. 用Python把讲义里的可靠性数据算完:删失、MLE拟合与置信区间
试验做完,台账里最常出现的是"有的样品中途失效、有的跑到截止时间还好的",这类数据叫右删失。丢掉删失样本会让寿命被低估,直接当成失效点又会高估风险,所以讲义里必须专门讲一节数据处理,而不是让学员拿 Excel 手算平均。
4.1 删失数据整理:把试验台账变成可用矩阵
整理的目标是两列数组:观测时间t和事件指示e(1 表示失效,0 表示删失)。判据的统一写法是"性能参数超出规格限即判失效",比如接触电阻超过 50 mΩ、漏电流超过 10 μA,不要用"看起来坏了"这种描述。中途因为设备故障、人为断电造成的停测,属于非相关删失,要在数据表里单独打标,计算时剔除,否则会污染分布拟合。
4.2 Weibull参数估计:MLE与中位秩回归差在哪
中位秩回归直观、能手算、便于讲课演示,但有三个短板:删失样本被丢弃、无法给出参数的标准误、样本量小的时候偏差明显。极大似然估计能同时用上失效点和删失点,但要迭代求解,且 β 较小时收敛不稳。讲义里建议两种都讲,让学员看到同一组数据下两个结果差多少,理解"方法本身会带来偏差"这件事。
import numpy as np from scipy.optimize import minimize from scipy import stats # t: 观测时间; e: 1=失效, 0=右删失 t = np.array([820, 1150, 1340, 1600, 1980, 2450, 2600, 3000, 3200]) e = np.array([1, 1, 1, 1, 1, 1, 0, 0, 1]) def neg_log_lik(params): beta, eta = params if beta <= 0 or eta <= 0: return 1e12 # 失效点贡献 log f(t),删失点贡献 log R(t) log_f = (np.log(beta) - np.log(eta) + (beta - 1) * (np.log(t) - np.log(eta)) - (t / eta) ** beta) log_R = -(t / eta) ** beta return -np.sum(e * log_f + (1 - e) * log_R) res = minimize(neg_log_lik, x0=[1.5, 2000.0], method="Nelder-Mead") beta_hat, eta_hat = res.x # B10 的点估计与 MTBF(指数近似下) 对比 b10 = eta_hat * (-np.log(0.9)) ** (1 / beta_hat) print(f"MLE: beta={beta_hat:.3f}, eta={eta_hat:.0f} h, B10={b10:.0f} h")neg_log_lik里失效点用的是 Weibull 概率密度取对数,删失点用的是可靠度取对数,这两项加权求和再取负,就是标准的右删失似然。method="Nelder-Mead"不需要梯度,对初值要求低,适合放进讲义当默认解法;如果 β 估计值落在 1 附近,改用 L-BFGS-B 并给x0=[1.0, 2000]会更稳。要给出区间估计,用 profile likelihood:固定 β 扫一个范围,对每个 β 求最优 η,取 −2ΔlogL 小于 χ²(0.95,1)=3.84 的区间,代码量比 Bootstrap 小,讲义里也更好画图。
4.3 加速因子折算与外推:正常应力下的B10与置信区间
拿到 η_stress 之后,正常应力下的特征寿命为 η_use=AF×η_stress,注意 β 在折算前后保持不变,这是加速试验的核心假设——加速只改变时间尺度,不改变失效机理。如果两个应力水平下回归出的 β 差异超过 20%,说明机理已经变了,外推结果不能直接用。
| 折算方式 | 公式 | 适用与风险 |
|---|---|---|
| 单应力 Arrhenius | η_use=AF·η_stress | 温度主导,需先验证 β 一致 |
| 多应力累积 | 1/AF=Σ(1/AF_i) | 温湿振复合,可能高估加速 |
| 逆幂律 | η_use=(S_s/S_u)^b·η_stress | 振动、电压,b 需实测标定 |
在做外推时,讲义一定要给一条硬约束:外推时间不超过试验时长的 10 倍,超过就要补试验或补机理分析。这条经验线不是理论推导出来的,是大量项目里"外推翻车"总结出来的工程边界。
5. HALT与HASS的讲义讲法:工作限、破坏限和失效闭环
HALT 和 HASS 是可靠性测试培训讲义里被讲得最随意的一块,很多人把 HALT 当成"加强版的环境试验"来教。HALT 的目标不是验证产品合格,而是主动把产品拉到失效,找出设计余量和最薄弱的环节,本质上是一个探索性试验;HASS 才是量产筛选,应力必须收到工作限与破坏限之间,保证"筛得掉缺陷、筛不坏好品"。
5.1 工作限与破坏限怎么取
规范的讲法是分四步:先测规格限(产品标称的工作范围),再逐级加应力量到工作限(出现可恢复的性能退化),继续加到破坏限(出现不可恢复失效),最后取 HASS 应力为工作限到破坏限之间的一个比例,常见取法是不超过破坏限的 70%、且留出至少 10 ℃ 的余量。振动同理,HASS 的量级一般取 HALT 破坏限的 50%,同时要限制循环次数,避免累积损伤。讲义里可以给一张对应表,把温度步进、快速温变、随机振动、复合应力的起始值、步长和判据全部列出来,学员照着填参数就能开盘。
5.2 从失效模式反推讲义修订点
HALT 做完最有价值的是失效清单,而不是那张通过与否的结论表。我一般按这个顺序复盘:先记录失效发生的应力水平和失效现象,再用切片、X-ray、SEM 找到机理,接着判断这个机理在正常使用中会不会出现、出现概率多大,最后决定是改设计、加筛选,还是修讲义里的试验项。举几个典型映射:温步进下出现焊点开裂,对应讲义里温循项要补 ΔT 和循环数;振动步进下连接器瞬断,对应随机振动谱形要补 Grms 和持续时间;湿热下漏电流上升,对应 Peck 模型的湿度项要重取。
讲义落地前做一次自检:每个试验项是否写明了应力水平、持续时间、失效判据、样本量和统计口径;每个加速模型是否标清了参数来源和适用范围;每张失效清单是否闭环到具体的改进措施。这三点齐了,这份可靠性测试培训讲义才算能直接拿去讲课,而不是一份只有试验条件的清单。
本文还有配套的精品资源,点击获取