金属材料常幅疲劳行为解析:S-N曲线、疲劳极限与寿命估算
2026/9/19 2:22:42 网站建设 项目流程

简介:《疲劳与断裂力学第2章金属材料的常幅疲劳行为》PPT课件面向学习材料力学、疲劳与断裂力学的高年级本科生与研究生,聚焦金属材料在交变载荷下的循环应力应变特性、S-N曲线及疲劳极限等核心概念。课件以图文并茂方式系统讲解交变载荷参数、循环滞回环、Bauschinger效应、循环软/硬化行为,以及成组试样法、增级试验法确定循环应力应变曲线的方法,并延伸平均应力松弛、棘轮行为与非比例附加硬化等进阶内容。整个资源为1个PPT文件,压缩包大小约2.3MB,内容覆盖第2章全部小节,层次清晰,便于按节选学。已有101人学习下载,适合需要系统掌握金属材料疲劳行为基础理论、理解S-N曲线工程含义及疲劳寿命估计要点的读者。

1. 疲劳数据为什么比强度数据更“不讲道理”

很多工程师第一次接触疲劳时都会有一个困惑:静强度校核明明通过了,安全系数给到了 2 以上,构件还是在服役几个月后断了。断口上那圈贝壳纹和放射棱,几乎就是疲劳破坏的身份证。而真正让设计人员被动的是,破坏应力往往远低于材料的屈服强度,有时甚至不到抗拉强度的三分之一。这说明金属材料的常幅疲劳行为,本质上不是在跟强度打交道,而是在跟“循环次数”打交道。本章讨论的就是这一章 PPT 要解决的核心问题:在应力幅恒定的循环载荷下,金属材料如何从完好到萌生裂纹、再到失稳扩展,以及工程师如何用 S-N 曲线、疲劳极限和累积损伤法则把这些现象变成可计算、可查表、可写进设计规范的东西。这套内容既是断裂力学课程里连接材料性能与结构寿命的桥梁,也是工程实践中做寿命评估绕不开的底子。

2. 金属材料常幅疲劳行为的数学描述与 S-N 曲线拟合

2.1 高周疲劳与低周疲劳的分界:常幅载荷该用哪一段

常幅疲劳指的是应力幅在整个试验过程中基本保持不变、应力比也固定的载荷形式。最常见的对称循环(R = -1)和脉动循环(R = 0)都属于这个范畴。要描述这种载荷下的材料行为,第一件事是搞清楚构件落在低周还是高周区间,因为两段的控制参量完全不同。

低周疲劳通常指循环寿命 N < 10⁴ ~ 10⁵ 次的区间,这时交变应力水平高,塑性应变在总应变中占比明显,控制寿命的是应变幅而不是应力幅。高周疲劳则是 N > 10⁵ 次的区间,名义应力低于屈服强度,材料整体处于弹性范围,控制寿命的是应力幅。工程上绝大多数机械构件,比如轴、螺栓、齿轮齿根、压力容器接管,都落在高周疲劳区间,这也是 S-N 曲线最常被使用的场景。Luft 这样说过:PPT 课件里如果不先讲清楚这条分界线,后面的 S-N 曲线、疲劳极限概念就容易让学生误以为单根曲线能包打天下。

2.2 S-N 曲线与 Basquin 方程:从经验规律到回归参数

常幅疲劳行为的核心表达就是 S-N 曲线,横坐标是循环次数 N,纵坐标是应力幅 σ_a(或最大应力 σ_max)。在高周区,这条曲线在双对数坐标下近似为一条直线,对应 Basquin 方程:

σ_a = σ_f' × (2N_f)^b

其中 σ_f' 是疲劳强度系数,量纲与应力相同;b 是疲劳强度指数,对多数金属材料是负值,大致在 -0.05 到 -0.15 之间。把方程两边取对数就能得到线性回归形式,这也是目前绝大多数疲劳数据处理软件的内部算法。

实际工程中常见的是把 S-N 曲线写成另外两种等价形式:应力幅形式 σ_a^m × N = C,或最大应力形式 σ_max^m × N = C。这里的 m 和 C 是材料常数,m 一般取 3~12,值越大说明曲线越陡,也就是寿命对应力越敏感。下表给出常见金属材料的 Basquin 参数大致范围,具体数值应以本单位的疲劳试验报告为准:

材料类别疲劳强度系数 σ_f'(MPa)疲劳强度指数 b疲劳极限/抗拉强度比
结构钢800~1800-0.06~-0.100.35~0.50
铝合金400~800-0.08~-0.120.25~0.40
钛合金900~1400-0.05~-0.080.45~0.60
铸铁300~600-0.08~-0.150.30~0.45

参数 b 的绝对值越大,说明材料对循环载荷越敏感,寿命曲线越陡。铝合金的 b 值普遍比钢大,这也是铝合金构件在交变载荷下寿命分散性更明显的原因之一。

2.3 用 Python 对疲劳试验数据做 Basquin 拟合

拿到一组(σ_a, N_f)试验数据后,常见做法是在双对数坐标下做线性回归,直接得到 Basquin 参数。下面这段代码用 numpy 的最小二乘法完成拟合,并输出斜率和截距对应的材料常数:

import numpy as np # 试验数据:[应力幅 MPa, 循环次数] data = np.array([ [350, 1.2e5], [320, 3.4e5], [300, 8.9e5], [280, 2.1e6], [260, 6.8e6], [240, 1.5e7], ]) # 取对数:x = log10(2*Nf),y = log10(sigma_a) x = np.log10(2 * data[:, 1]) y = np.log10(data[:, 0]) # 一次多项式拟合,返回 [斜率, 截距] coeffs = np.polyfit(x, y, 1) b = coeffs[0] # 疲劳强度指数 b log_sigma_f = coeffs[1] # log10(sigma_f') sigma_f = 10 ** log_sigma_f # 计算拟合优度 R^2 y_pred = np.polyval(coeffs, x) residual = y - y_pred ss_res = np.sum(residual ** 2) ss_tot = np.sum((y - np.mean(y)) ** 2) r_squared = 1 - ss_res / ss_tot # 计算标准差(对数坐标下,单位与 y 相同) std_dev = np.std(residual, ddof=2) print(f"Basquin 参数:b = {b:.4f}, sigma_f' = {sigma_f:.1f} MPa") print(f"拟合优度 R^2 = {r_squared:.4f}") print(f"对数标准差 s = {std_dev:.4f}")

这段代码的核心逻辑是先把试验数据转换到对数空间,然后用一次多项式拟合得到 Basquin 方程的斜率和截距。这里有几个参数需要特别注意:b 是负值,代码里输出的是直接拟合结果,不必取绝对值;σ_f' 的物理意义是 2N_f = 1 时的虚拟应力幅,它通常远高于抗拉强度,不代表真实应力,只是回归参数而已。R² 低于 0.95 时先检查是不是有数据点落在了低周区或过渡区,这两段的点不应该参与同一个线性拟合。对数标准差 s 反映数据的分散性,s 越大说明材料疲劳性能越不稳定,在做设计时对应力修正系数的取值要有心理准备。

3. 疲劳极限的测定:升降法与分组法的实操口径

3.1 疲劳极限的物理前提:裂纹不扩展的应力阈值

疲劳极限(endurance limit)是常幅疲劳行为里最有工程价值的概念,它代表材料在给定应力比下能承受无限次循环而不失效的最大应力幅。低碳钢、球墨铸铁等材料在 S-N 曲线上存在明显的水平渐近线,这就是疲劳极限存在的直接证据。而铝合金、多数不锈钢等材料在双对数坐标下 S-N 曲线持续下降,不存在明确的水平段,工程上通常用“条件疲劳极限”替代,也就是指定寿命(比如 10⁷ 次)对应的应力幅。

为什么有些材料有疲劳极限、有些没有,这个问题涉及位错结构和裂纹扩展门槛值的概念。简单说,钢材在循环载荷下会发生循环硬化和应变时效,使裂纹尖端的塑性区尺寸趋近于零,裂纹无法继续扩展;而铝合金没有明显的应变时效效应,裂纹尖端始终存在可逆滑移,微裂纹可以在低于疲劳极限的应力下缓慢长大。做 PPT 课件时,这块内容适合放一张铁素体-珠光体钢和铝合金 S-N 曲线的对比图,比文字描述直观得多。

3.2 升降法测疲劳极限的具体流程与判定

工程上测定疲劳极限的标准方法是升降法(staircase method),也叫 up-and-down 法。它的工作方式非常工程化:先预估一个疲劳极限附近的应力水平 σ₀,在某级应力下试验一个试样。如果试样在指定循环次数(比如 10⁷ 次)之前断裂,就把应力降低一个台阶 Δσ 再做下一个试样;如果试样越过了指定寿命,就把应力升高一个台阶。这样后续试样的应力水平完全由前一个试样的结果决定,最终所有试验点会围绕疲劳极限的均值上下波动。

试验完成后,取断裂和未断裂这两组数据中数量较少的那一组参与统计分析。设这一组有 n 个有效数据点,最低应力水平为 σ_min,Δσ 为应力台阶,则疲劳极限的均值按下式估算:

σ_e = σ_min + Δσ × (A/n ± 1/2)

式中的 A 是对参与统计的那组数据按“编号 × 出现次数”加权求和的结果,正负号的选取规则是:用断裂组数据时取加号,用未断裂组数据时取减号。台阶 Δσ 一般取预估疲劳极限的 3%~5%,取得太大结果粗糙,取得太小浪费试样且容易受数据分散性干扰。有效试样数量建议不少于 6~8 个,否则统计意义很弱。

3.3 疲劳极限数据的 Python 处理

升降法试验做完后的数据处理非常机械,手算容易出错,用 Python 处理可以顺便把均值和标准差一起算出来:

import numpy as np # 试验记录:[应力水平 MPa, 结果] 结果:1=断裂,0=未断裂 trials = np.array([ [300, 1], [280, 1], [260, 0], [280, 1], [260, 0], [280, 0], [300, 1], [280, 0], ]) # 取数量较少的那一组:这里未断裂(0)有4个,断裂(1)有4个,任取一组 target = trials[trials[:, 1] == 0] stress_levels = target[:, 0].astype(int) # 统计各应力水平出现次数 unique, counts = np.unique(stress_levels, return_counts=True) A = np.sum(unique * counts) n = len(stress_levels) sigma_min = unique.min() delta_sigma = 20 # 应力台阶,单位 MPa # 未断裂组,用减号 sigma_e = sigma_min + delta_sigma * (A / n - 0.5) print(f"应力水平分布:{dict(zip(unique, counts))}") print(f"疲劳极限均值:{sigma_e:.1f} MPa")

这段代码的核心逻辑是把升降法试验记录整理成程序能读的格式,然后按标准公式计算疲劳极限。注意几个关键点:参与统计的那一组必须是数量较少的一组,这是升降法数据处理的核心约定;台阶 Δσ 的取值不在代码里体现,它是在试验设计阶段定的,数据处理时直接引用即可;当断裂组和未断裂组数量相同时,两组分别计算的结果理论上应该接近,偏差大说明试验数据分散性异常或者 Δσ 取得不合适。另外,这里算出的疲劳极限对应 50% 存活率,如果要用于设计,需要按材料的标准差和要求的可靠度做进一步修正。

4. 平均应力与累计损伤:常幅疲劳行为向工程寿命估算的延伸

4.1 应力比与平均应力:S-N 曲线查不到的值怎么换算

标准 S-N 曲线通常是在对称循环(R = -1)条件下测出来的,但实际构件承受的载荷很少是纯对称循环。转轴除了弯曲应力还有自重引起的平均应力,压力容器内压产生的是脉动循环(R = 0),螺栓联接的载荷更是带大预紧力的非对称循环。当平均应力不为零时,直接用对称循环的 S-N 曲线查寿命会偏危险,必须进行平均应力修正。

最常用的三种修正是 Goodman、Gerber 和 Soderberg 公式。Goodman 是线性关系,偏保守,工程上用得最多;Gerber 是抛物线关系,更接近试验数据的趋势,但不保守;Soderberg 用屈服强度替代抗拉强度做分母,比 Goodman 还保守,适合脆性材料或不允许出现塑性变形的场合。三种公式的统一形式是把实际应力幅折算成等效应力幅 σ_eq:

修正方法等效应力幅公式特点
Goodmanσ_eq = σ_a / (1 - σ_m / σ_b)线性、工程常用
Gerberσ_eq = σ_a / (1 - (σ_m / σ_b)²)抛物线、贴合数据
Soderbergσ_eq = σ_a / (1 - σ_m / σ_s)最保守、用屈服强度

4.2 等效应力幅的换算与代码实现

实际计算时,平均应力 σ_m 和应力幅 σ_a 可以从载荷谱中分解出来。对正弦波载荷,若最大应力为 σ_max、最小应力为 σ_min,则 σ_m = (σ_max + σ_min) / 2,σ_a = (σ_max - σ_min) / 2。下面这段代码对一组载荷循环做 Goodman 修正:

import numpy as np # 载荷谱:[最大应力 MPa, 最小应力 MPa] spectrum = np.array([ [320, 80], [280, 40], [350, 50], ]) sigma_b = 620 # 抗拉强度,MPa sigma_s = 420 # 屈服强度,MPa def goodman_equivalent(sigma_max, sigma_min, sigma_b): sigma_m = (sigma_max + sigma_min) / 2 sigma_a = (sigma_max - sigma_min) / 2 if sigma_m >= sigma_b: return np.inf return sigma_a / (1 - sigma_m / sigma_b) equivalent_amplitudes = [] for smax, smin in spectrum: eq = goodman_equivalent(smax, smin, sigma_b) equivalent_amplitudes.append(eq) print(f"σ_max={smax:3d} MPa, σ_min={smin:3d} MPa, " f"σ_eq={eq:6.1f} MPa") # 判断哪些循环是危险的 fatigue_limit = 200 # 对称循环疲劳极限,MPa risk_cycles = [eq for eq in equivalent_amplitudes if eq > fatigue_limit] print(f"超限循环数:{len(risk_cycles)} / {len(spectrum)}")

这里的核心逻辑是先拆解出平均应力和应力幅,再用 Goodman 公式折算成对称循环等效应力幅。需要注意的是,当最大应力接近抗拉强度时,修正后的等效应力幅会急剧增大,程序里给 σ_m ≥ σ_b 的情况返回无穷大,是为了避免除零错误,实际试验中这种工况意味着静强度可能已经失效,疲劳分析不再适用。另外,Goodman 修正对压应力状态(σ_m < 0)通常不做修正,因为压缩平均应力对疲劳寿命是有利的,忽略它相当于偏保守。

4.3 Miner 线性累积损伤在常幅谱下的应用

实际构件承受的载荷不是单一的常幅循环,但工程上常用“雨流计数 + 各级损伤累加”的办法处理变幅载荷。Miner 法则的核心假设是:每一级应力循环消耗的损伤量 Dᵢ = nᵢ / Nᵢ,其中 nᵢ 是第 i 级应力的实际循环次数,Nᵢ 是该级应力对应的疲劳寿命(从 S-N 曲线查得)。总损伤 D = Σ(nᵢ / Nᵢ),当 D ≥ 1 时认为构件发生疲劳破坏。

Miner 法则是线性累积损伤的典型代表,它不关心各级载荷的作用顺序,也不考虑载荷之间的相互作用。对于常幅载荷谱,应用非常简单:如果某个构件的设计寿命是 2000 小时,转速 3000 r/min,那总循环次数就是 3.6 × 10⁸ 次。通过雨流计数拆成若干个常幅块,再按 Miner 法则累加就能估算寿命。代码跟 4.2 节的等效应力幅计算衔接起来,把每个等效幅值对应的 Nᵢ 从拟合好的 S-N 曲线上插值出来,整套逻辑就完整了。

这里必须提醒一个工程上常见的误用:Miner 法则里 D = 1 只是名义破坏点,大量试验数据表明,实际破坏时 D 的取值在 0.3 到 3.0 之间波动。做设计时取 D > 1 才判破坏是危险的,规范做法是引入损伤容限系数,把允许的总损伤限制在 0.5 甚至更低。PPT 课件里如果能放一张 D 值分布直方图,学生对这个概念的印象会深很多。

5. 把常幅疲劳数据整理成能直接上课的 PPT:结构、图表与三个容易出错的地方

5.1 PPT 数据页的标准结构

一份能直接上课用的常幅疲劳行为 PPT,数据页应该遵循从原始记录到结论的完整链路,不给学生留“这个数从哪来的”的疑问。我一般会把每一组数据的处理过程拆成四页:第一页放原始试验记录表,包含应力水平、试样编号、循环次数、断口位置;第二页放双对数坐标下的散点图和拟合直线,标注 Basquin 方程和 R²;第三页放按升降法整理的疲劳极限结果,含应力水平序列和计算过程;第四页放工程应用示例,比如某个实际构件在给定载荷谱下的寿命估算。这四页形成一条完整的证据链,比单贴一张 S-N 曲线图有说服力得多。

5.2 三个容易出错的地方

第一个坑是旋转弯曲疲劳极限和轴向加载疲劳极限混用。旋转弯曲试样的应力梯度比轴向加载试样大,同样的材料,旋转弯曲测出的疲劳极限通常比轴向拉压低 10%~20%。查手册时一定要确认数据对应的加载方式,否则会把疲劳极限估高。第二个坑是不标注存活率。教科书上的 S-N 曲线中值曲线对应 50% 存活率,设计时至少要用 95% 存活率甚至 99% 存活率对应的 P-S-N 曲线,直接拿中值曲线做设计意味着有一半的构件会提前失效。第三个坑是 S-N 曲线的横坐标用线性刻度还是对数刻度。疲劳数据跨越几个数量级,线性坐标下低周区的点会挤在一起,高周区反而拉得很开,看上去好像数据很多,实际上信息密度很差。统一用双对数坐标,回归拟合也方便。

5.3 一键输出带参数标注的 S-N 曲线

做 PPT 时最常用到的是把拟合结果直接输出为图片。用 matplotlib 可以一次性完成散点、拟合线、参数标注三个动作:

import numpy as np import matplotlib.pyplot as plt # 承接 2.3 节的拟合结果 x_fit = np.linspace(x.min(), x.max(), 100) y_fit = np.polyval(coeffs, x_fit) plt.figure(figsize=(8, 6)) plt.scatter(x, y, marker='o', facecolors='none', edgecolors='steelblue', label='试验数据') plt.plot(x_fit, y_fit, 'r-', linewidth=1.5, label=f'Basquin: $\\sigma_a = {sigma_f:.0f} (2N_f)^{{{b:.3f}}}$') plt.xlabel('$\log_{10}(2N_f)$') plt.ylabel('$\log_{10}(\\sigma_a / MPa)$') plt.legend() plt.grid(True, which='both', linestyle='--', alpha=0.6) plt.tight_layout() plt.savefig('sn_curve.png', dpi=300) plt.show()

这段代码把拟合曲线和参数直接标注在图上,输出 300 dpi 的 PNG 图片,插入 PPT 后清晰度足够。需要注意曲线标注里 b 是负值,LaTeX 语法里要把负号包在花括号里才能正常显示。图片保存后建议再检查一下坐标轴范围,确保散点和拟合线完整显示,不要把边缘的数据点裁掉。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询