☰
45°应变花测主应力:从公式推导到Python批量处理实战
2026/10/12 17:09:37 网站建设 项目流程

简介:复杂应力状态下应变测量和数据处理方法探析》是一份面向结构工程、材料力学及实验应力分析领域的专业参考文献,适合需要处理平面应力状态应变数据、推导主应力大小与方向的工程师和科研人员。资源以45度应变花为例,清晰推导了由实测应变计算主应变、主应力的公式,并结合具体型号测试数据进行实例处理,兼具理论完整性与工程实用性。压缩包内含1个PDF文件,大小215KB,内容紧凑,便于快速查阅与打印。该资源已有127人学习下载,可作为相关课程设计、实验数据处理及结构强度评估的参考指导。读者可从中获得应变花布片原理、胡克定律应用、主应力方向求解方法及实际数据处理流程等要点,帮助理解复杂应力状态下的测量与分析方法。

1. 复杂应力状态下的实测难题:理论算不准时,只能靠应变花

做结构强度校核时,最怕遇到的就是复杂应力状态下的应变测量和数据处理。形状不规则的构件,按计算简图做理论分析,结果经常和实测对不上,主应力未知时单轴应变片根本不够用。这份PDF把平面应力状态下应变花测量的完整推导过程走了一遍,从任意方向线应变公式,到45°应变花的主应力计算公式,最后附了一个30个测点、1kHz采样频率的实测数据处理实例。适合做结构试验、强度校核、实验力学分析的工程师,也适合刚接触应变电测的学生用来补上公式推导这一课。资料本身只讲原理和公式不带代码,但推导足够完整,可以直接照着写处理脚本。

2. 从应变到应力的推导:平面应力假设与胡克定律的两个关键点

2.1 平面应力状态:表面测点为什么可以这样简化

应变测试的一切推导都建立在平面应力状态的假设上。构件表面没有外力作用的区域,垂直于表面方向的正应力为零,剪应力也为零,这一点可以从自由表面的边界条件直接得到。也就是说,表面上任意一点的应力状态可以用平面内的两个主应力σ₁、σ₂和它们的方向角描述,第三个主应力为零。这个假设对大多数板壳类结构和实体构件表面都成立,也是电阻应变计法能够用平面应变数据反推应力的前提。

需要注意的是,平面应力不等于平面应变。如果测点处于厚壁构件的内部,或者结构表面存在明显的约束,垂直于表面的变形被限制,用平面应力公式就会带来误差。原文推导用的广义胡克定律是平面应力版本,也就是σ₃=0那一套,适用场景就是表面贴片测量,这一点在应用前要先确认。

根据被测构件的受力情况,实际测试分为三种工况:单向应力、二向应力且主应力方向已知、二向应力且主应力方向未知。前两种只在已知应力方向贴单轴或双向应变片就够了,数据处理也简单。工程上更普遍的情况是主应力大小和方向都未知,这时候只有在不同方向同时贴几个应变片组成应变花才能解决。这也是应变花存在的根本理由。

2.2 任意方向线应变公式:应变花读数的几何来源

应变花计算的核心是一条公式:与x轴成θ角的任意方向上的线应变,等于x方向正应变、y方向正应变和切应变三者的线性组合。具体表达式为:

εθ = εx·cos²θ + εy·sin²θ + γxy·sinθ·cosθ

这条公式的实际意义是:贴一个方向任意的应变片,它的读数不完全由该方向的正应变决定,还受到另外两个方向的应变和切应变影响。原文从几何变形关系逐步推导了这三项,分别对应正应变拉伸、横向收缩和切应变引起的斜向伸长三个效应。在应变很小的情况下,角度变化量和切应变近似成正比,线性叠加成立。

后面的应变花推导全部依赖这条公式。关键点是:它包含εx、εy、γxy三个未知数,理论上只要贴三个不同方向的应变片,读出三个线应变,建立三个方程就能解出这三个未知数。这也是为什么三片式应变花是工程标配的原因,四片五片并不是必须,更多片子是为了冗余或特定工况。

2.3 应变花选型:45°直角花为何是默认配置

理论上三个贴片方向可以任意选择,但实际使用时要考虑应变花批量制造、粘贴工艺和计算公式固定的需求。最常见的是三片直角45°应变花(0°、45°、90°)和三片等角60°应变花(0°、60°、120°),两种都是三片解决三个未知数的标准配置。

应变花类型贴片角度适用场景公式复杂度
45°直角花0°/45°/90°主方向未知的平面应力,最常用适中,方向角直观
60°等角花0°/60°/120°不便贴90°角,或对对称性要求高稍复杂,系数对称
双向直角花0°/90°主方向已知的二向应力最简单

我一般优先选45°直角花,理由有三:一是0°和90°天然正交,贴片定位方便,普通角尺就能保证角度精度;二是方向角计算式简单,主方向角直接用两倍角关系就能得到;三是最常见的应变花传感器都是45°配置,采购方便,不同厂家的修正系数体系也成熟。60°等角花在三片之间夹角都是60°,对贴片角度误差的敏感性分布更均匀,适合空间受限的场景,但公式推导和象限判断相对绕一些。

3. 45°应变花公式落地:三片读数到主应力与方向角

3.1 剪应变换算:2ε45-(ε0+ε90)的来历与边界

把0°、45°、90°三个方向代入任意方向线应变公式,可以得到三个关系式。0°方向的应变片直接给出εx,90°方向的应变片直接给出εy,这两个结果不需要推导,贴哪个方向就测哪个方向的线应变。

45°方向的关键作用是把切应变联系起来。将θ=45°代入公式,利用sin45°和cos45°都等于√2/2的关系,可以得到:

ε45 = (εx+εy)/2 + γxy/2

整理后就是原文给出的剪应变换算公式:

γxy = 2ε45 − (ε0 + ε90)

这条公式的物理意义很直观:45°方向的读数减去0°和90°读数的平均值,再乘以2,就是x-y平面内的工程剪应变。边界条件要注意的是,如果三个应变片不是严格的0°、45°、90°,而是存在角度偏差,这个公式会引入系统误差,后面避坑部分会详细讲。

3.2 主应变与主方向角:用atan2避开象限陷阱

得到εx、εy和γxy之后,先用应变莫尔圆求主应变。应变莫尔圆的圆心为(εx+εy)/2,半径为√[(εx-εy)²+γxy²]/2,代入上面的三个关系式后,45°应变花的主应变公式可以整理为:

ε₁ = (ε0+ε90)/2 + (√2/2)·R ε₂ = (ε0+ε90)/2 − (√2/2)·R

其中R = √[(ε0−ε45)² + (ε45−ε90)²]。

这个形式比直接用莫尔圆半径更适合作数据处理,因为只需要三个方向的应变读数,不需要中间变量γxy参与开方,减少一步出错的可能。实际计算时可以直接用NumPy把三个通道的数据做向量化运算,避免在Python里写循环。

主方向角由切应变和正应变差值共同决定:

tan(2α₀) = γxy / (εx − εy) = [2ε45 − (ε0 + ε90)] / (ε0 − ε90)

这里最容易翻车的是象限判断。直接调用math.atan或者np.arctan,值域只有(−π/2, π/2),当分母为正时结果落在第一象限没问题,分母为负时就会丢180°。正确做法是使用atan2(γxy, εx−εy),值域覆盖整个圆周,再除以2得到主方向角。如果分母恰好接近零,arctan会直接报错或给出不稳定的角度,atan2能正确处理这种情况。

3.3 广义胡克定律:E和μ的选择会让应力失真

主应变算出来后,主应力由平面应力状态的广义胡克定律给出:

σ₁ = E/(1−μ²)·(ε₁ + μ·ε₂) σ₂ = E/(1−μ²)·(ε₂ + μ·ε₁)

把上面两个主应变公式代进去,整理后得到45°应变花最终的主应力计算式:

σ₁ = [E/(1−μ)]·(ε0+ε90)/2 + [E/(1+μ)]·(√2/2)·R σ₂ = [E/(1−μ)]·(ε0+ε90)/2 − [E/(1+μ)]·(√2/2)·R

注意这里E是材料的弹性模量,μ是泊松比,两个参数都是结构材料本身的性质而不是应变片参数。钢和铝的E、μ差别很大,如果整批数据处理混用材料参数,算出来的应力同样一份应变数据可能差出一倍以上。代码实现时建议把E和μ作为函数参数传入,不要写死在函数体里。

4. 30测点实例复现:1kHz应变数据的批量处理脚本

4.1 数据组织:90通道CSV的结构与命名规范

原文实例是30个测点、每个测点45°应变花,也就是90个应变通道,采样频率1kHz,每次测量20分钟。按这个配置算下来,单通道数据量是120万个点,全部通道合计超过1亿个点,组织不好数据后面的处理会非常痛苦。

我处理这类数据时会把通道命名做成结构化格式:测点编号+贴片方向。比如测点1的三个通道命名为S01_0、S01_45、S01_90,测点2命名为S02_0、S02_45、S02_90,以此类推。CSV的第一列是时间戳,后面90列按测点顺序排列,读入时用pandas一次性加载,列名直接作为字典索引使用。

文件名上也要下功夫,建议命名为“项目编号_日期_工况编号.csv”,比如“T25_20250608_loadcase03.csv”。这个习惯能避免数据多了之后搞混工况,尤其是做重复性试验的时候。

4.2 批量处理脚本:滤波、稳定段平均与主应力计算

下面这段Python脚本可以直接跑通整个流程,包含滤波、稳定段选择和主应力计算。先看一下完整代码:

import numpy as np import pandas as pd from scipy.signal import butter, filtfilt def butter_lowpass(data, cutoff_hz, fs=1000.0, order=4): """四阶巴特沃斯低通滤波,输入为1D数组,返回同长度数组""" nyquist = 0.5 * fs normal_cutoff = cutoff_hz / nyquist b, a = butter(order, normal_cutoff, btype='low', analog=False) return filtfilt(b, a, data) def calc_principal(e0, e45, e90, E=2.06e5, mu=0.3): """ 输入:三个方向的微应变(με),E为MPa,mu为泊松比 输出:主应变(με)、主应力(MPa)、主方向角(度) """ e0 = np.asarray(e0, dtype=float) e45 = np.asarray(e45, dtype=float) e90 = np.asarray(e90, dtype=float) R = np.sqrt((e0 - e45) ** 2 + (e45 - e90) ** 2) # 主应变,单位仍为微应变 eps1 = (e0 + e90) / 2.0 + np.sqrt(2.0) / 2.0 * R eps2 = (e0 + e90) / 2.0 - np.sqrt(2.0) / 2.0 * R # 应力计算:把微应变换算成无量纲应变,结果单位为MPa const1 = E / (1.0 - mu) const2 = E / (1.0 + mu) * np.sqrt(2.0) / 2.0 mean_abs = (e0 + e90) * 1e-6 / 2.0 R_abs = R * 1e-6 sigma1 = const1 * mean_abs + const2 * R_abs sigma2 = const1 * mean_abs - const2 * R_abs # 主方向角,用atan2处理象限 gamma_xy = 2.0 * e45 - (e0 + e90) delta = e0 - e90 alpha = 0.5 * np.degrees(np.arctan2(gamma_xy, delta)) return eps1, eps2, sigma1, sigma2, alpha # 模拟一组3通道、1kHz、2秒的应变数据 fs = 1000.0 t = np.arange(0, 2.0, 1.0 / fs) e0 = 300.0 + 20.0 * np.sin(2 * np.pi * 5.0 * t) # 0度方向应变 e45 = 150.0 + 10.0 * np.sin(2 * np.pi * 5.0 * t) # 45度方向应变 e90 = -80.0 + 5.0 * np.sin(2 * np.pi * 5.0 * t) # 90度方向应变 # 先滤波,截止频率20Hz,去掉高频噪声 e0_f = butter_lowpass(e0, 20.0, fs) e45_f = butter_lowpass(e45, 20.0, fs) e90_f = butter_lowpass(e90, 20.0, fs) # 取稳定段(0.5s~1.5s)的平均值,作为该测点的静应变结果 mask = (t >= 0.5) & (t <= 1.5) e0_avg = np.mean(e0_f[mask]) e45_avg = np.mean(e45_f[mask]) e90_avg = np.mean(e90_f[mask]) eps1, eps2, sigma1, sigma2, alpha = calc_principal( e0_avg, e45_avg, e90_avg ) print(f"主应变1: {eps1:.1f} με, 主应变2: {eps2:.1f} με") print(f"主应力1: {sigma1:.2f} MPa, 主应力2: {sigma2:.2f} MPa") print(f"主方向角: {alpha:.2f}°")

代码里的几个参数值得说明。截止频率20Hz是针对原始信号中的5Hz振动成分设置的,实际处理时要先看频谱再决定,不能盲目套这个值。稳定段取0.5~1.5s是因为模拟数据里这段时间信号最平稳,真实数据需要根据加载工况选择合适的分析窗口,比如加载完成后的保持段。E和μ作为calc_principal的默认参数传入,不同测点如果材料不同,调用时单独指定即可。

对于30个测点的批量处理,只需要把上面的逻辑套进一个循环。每个测点读取三列,滤波后取稳定段平均,调用calc_principal得到五组输出,汇总到一个总表里。

4.3 输出自检:主应力方向角与量级合理性判断

批量计算完成后,不要直接拿结果去做强度评估,先做一轮自检。检查每个测点的主方向角是否指向合理的方向,比如一个受拉区域的主方向角应该接近加载方向,如果某个测点算出来的主方向角明显偏出预期范围,先怀疑贴片角度或数据通道错位。

量级检查也很关键。主应力数值不能超过材料的比例极限对应值,如果算出来几百MPa而材料的屈服强度只有两三百MPa,检查是否已经超出弹性范围,超出后胡克定律不成立,后续所有评估都没有意义。原始数据里如果有明显的零点漂移,稳定段平均值会带偏整个计算,这种情况下先做零漂修正再重算。

5. 应变测试避坑清单:贴片、温补与滤波的翻车现场

5.1 贴片角度偏差:主方向角跟着漂

现象:同一个测点、同样工况,两次测量的主应力大小差了10%,主方向角差了5度以上。

原因:手贴应变花时各片夹角不精确,目标0-45-90实际贴成了0-47-91。应变花基底在弯曲面上粘贴时也会产生角度的系统性偏移,微小角度偏差在tan(2α)公式里被放大,方向角误差尤其明显。

解决:粘贴时用带定位膜的直角应变花,贴完后用角度规复核。如果发现偏差超过2度,不要用标准的0-45-90公式,把实际角度代回到通用应变花方程组重新解三个未知数。我在正式测试前会先在一根等强度梁上做标定试验,用已知应力场反推应变花的实际角度偏差,这个习惯能提前发现不少问题。

5.2 温度补偿片贴错位置

现象:应变读数随时间单调漂移,看起来像构件在持续受力变形,但实际上载荷并没有变化。

原因:补偿片贴在了受力构件上或者靠近热源的支撑结构上。补偿片没有与工作片处于相同的温度场,或者两者材料不一致,温度变化引起的电阻变化没有被抵消。

解决:补偿片要贴在与试件同材质、同厚度、处于同一温度环境但不受力的独立试块上。桥路连接上采用半桥补偿方式,工作片和补偿片分别接在相邻桥臂。测试开始前先预热应变仪半小时,让内部电路和贴片都达到热平衡,再调零开始测量。

5.3 低通滤波把峰值削掉

现象:动态加载下主应力峰值比预期小20%,但看滤波后的时域波形已经很光滑,不像是噪声问题。

原因:低通截止频率设得太低,把真实载荷的冲击成分一并滤掉了。对冲击型载荷,峰值能量集中在较宽频带,单纯追求光滑波形会牺牲幅值精度。

解决:先对原始数据做FFT,看清楚信号能量分布再选截止频率。峰值到达前的时间很短,滤波器的群延迟会让峰值位置偏移,处理冲击信号时用零相位滤波(filtfilt)而不是普通IIR滤波器。如果原始数据本身信噪比可以,只做移动平均平滑,窗口大小取采样周期的十分之一以内。

5.4 主方向角象限判断出错

现象:算出来的主方向角有时是正有时是负,而且和实际受力方向对不上,看起来像是随机跳变。

原因:直接用arctan(γxy/(εx−εy))处理,值域只有(−π/2, π/2),分母正负不同会丢180度,180度除以2就是90度的方向角偏差。代码里用arctan而不是atan2是这个问题最常见的原因,另外没有考虑分母为零的情况。

解决:统一使用atan2(γxy, ε0−ε90)计算再除以2。根据工况判断角度是否落在合理区间,如果输出的第一主应力方向角不符合物理直觉,加上90度重新验证。处理时先画一个应变花三通道的原始波形对比图,确认哪个通道是0度方向,避免通道顺序搞错导致角度全偏。

5.5 应变超量程,胡克定律失效

现象:动态加载后计算的应力超过了材料抗拉强度,数据看起来完全不可信。

原因:应变读数可能已经超过应变片的线性范围,或者材料已经进入塑性阶段。胡克定律只适用于弹性范围,塑性阶段的主应力和主应变不再是线性关系,用弹性公式外推得到的结果没有意义。

解决:设置合理的应变阈值,比如钢材料的屈服应变大约1-2‰,在软件里对超限数据打标记而不是直接丢弃。测试方案设计阶段先估算最大应变,选择合适灵敏系数的应变片。数据报告里要单列一列状态标志,注明哪些测点超限、哪些在弹性范围内。

6. 进阶用法:第四强度理论校核与结果自洽验证

6.1 冯·米塞斯等效应力的一行代码

主应力算出来后,可以进一步算第四强度理论的等效应力,也就是冯·米塞斯应力。对平面应力状态,第三主应力为零,米塞斯等效应力的计算非常简洁:

def von_mises(s1, s2): """平面应力状态下的冯·米塞斯等效应力,s1、s2单位MPa""" return np.sqrt(s1**2 - s1 * s2 + s2**2)

这个函数只有一行,但意义很重要。两个主应力单独看都不超限,它们的组合可能已经超过屈服条件。把每个测点的米塞斯应力和材料许用应力对比,比只看σ₁要可靠得多。原文里也提到可以用推导结论做第四强度理论校核,这正是最直接的应用。

6.2 与有限元结果的交叉验证习惯

拿到实测主应力后,我习惯做一次交叉验证:把测点位置对应的有限元模型节点应力提取出来,与实测值一起画在同一张图上。实测值和仿真值偏差在15%以内属于正常范围,偏差过大时先检查应变花的贴片位置是否和仿真节点一一对应,再检查边界条件设置。

方向角的对比同样有价值。仿真给出的主方向角和实测角相差超过10度时,通常是网格局部畸变或贴片位置偏了。这轮校验做完,数据才算真正可信。

从那以后,我每次处理应变花数据都强制走一遍这个流程:滤波前先看频谱、稳定段人工确认、主应力算完立刻做米塞斯校核、再和仿真结果交叉比对。熟手做这一轮也就多花二十分钟,但能拦住大部分低级错误。希望帮到你。

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

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

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

立即咨询