3. 复合材料力学基础(二):经典层合板理论(CLT)、层合板的刚度与柔度矩阵
各位工程师朋友,咱们接着聊复合材料力学。上一章我们把单层板的应力-应变关系理清了,那都是基础。但实际叶片结构,没人用单层板干活,都是把好几层不同角度的铺层叠在一起,形成层合板。这时候问题就来了:怎么算这个“叠在一起”的板子的整体刚度?
嗯,这就是经典层合板理论(CLT)要干的事。我个人觉得,CLT 是复合材料结构设计的基石,你搞不懂它,后面做失效分析、铺层优化,基本就是瞎蒙。
3.1 经典层合板理论的基本假设
CLT 不是凭空想出来的,它基于几个简化假设。说白了,就是把复杂的层合板问题,简化成我们熟悉的薄板问题。你想想看,叶片蒙皮厚度跟弦长比,通常很小,这就符合薄板假设。
核心假设有这么几条:
- 直法线假设(Kirchhoff 假设):变形前垂直于中面的直线,变形后仍为直线,且仍垂直于中面。这意味着我们忽略横向剪切变形。
- 等应变假设:各铺层之间完美粘接,没有滑移。层间应变是连续的。
- 平面应力状态:垂直于板面的应力分量(σz, τxz, τyz)忽略不计。因为板很薄,这些应力相对面内应力很小。
- 小变形假设:位移远小于板厚,应变-位移关系保持线性。
3.2 层合板的应变-位移关系
基于直法线假设,层合板内任意一点的应变,可以由中面的应变和曲率来表示。这个推导过程,我建议你亲手推一遍,印象会深很多。
设中面位移为 u₀, v₀, w₀,则板内任意一点 (x, y, z) 的位移为:
u(x,y,z) = u₀(x,y) - z * ∂w₀/∂x
v(x,y,z) = v₀(x,y) - z * ∂w₀/∂y
w(x,y,z) = w₀(x,y)
然后,利用小变形下的几何方程,得到应变分量:
εx = ∂u/∂x = εx⁰ + z * κx
εy = ∂v/∂y = εy⁰ + z * κy
γxy = ∂u/∂y + ∂v/∂x = γxy⁰ + z * κxy
其中,上标“⁰”表示中面应变,κ 表示曲率或扭率:
εx⁰ = ∂u₀/∂x
εy⁰ = ∂v₀/∂y
γxy⁰ = ∂u₀/∂y + ∂v₀/∂x
κx = -∂²w₀/∂x²
κy = -∂²w₀/∂y²
κxy = -2 * ∂²w₀/∂x∂y
写成矩阵形式,更清爽:
{ε} = {ε⁰} + z * {κ}
这里 {ε} 是总应变向量,{ε⁰} 是中面应变向量,{κ} 是曲率向量。z 是距离中面的坐标,向下为正。
3.3 层合板的合力与合力矩
有了每一点的应变,再结合单层板的应力-应变关系(还记得 Q 矩阵吗?),就能算出每一层的应力。但工程上我们更关心的是整个层合板的合力(N)和合力矩(M)。
说白了,就是把各层的应力沿厚度方向积分:
{N} = ∫_{-h/2}^{h/2} {σ} dz
{M} = ∫_{-h/2}^{h/2} {σ} * z dz
其中,h 是层合板总厚度。因为应力在各层内是常数(但层间可能突变),所以积分可以写成对各层求和:
{N} = Σ_{k=1}^{n} ∫_{z_{k-1}}^{z_k} {σ}_k dz
{M} = Σ_{k=1}^{n} ∫_{z_{k-1}}^{z_k} {σ}_k * z dz
把 {σ}_k = [Q]_k * {ε} = [Q]_k * ({ε⁰} + z * {κ}) 代入,得到:
{N} = [A] * {ε⁰} + [B] * {κ}
{M} = [B] * {ε⁰} + [D] * {κ}
这就是 CLT 的核心——层合板的本构方程。
3.4 刚度矩阵 [A]、[B]、[D]
上面公式里的 [A]、[B]、[D] 矩阵,就是层合板的三个关键刚度矩阵。我习惯叫它们:
- [A] 矩阵(拉伸刚度矩阵):联系中面力与中面应变。
- [B] 矩阵(耦合刚度矩阵):联系中面力与曲率,以及弯矩与中面应变。说白了,就是拉伸和弯曲会互相影响。
- [D] 矩阵(弯曲刚度矩阵):联系弯矩与曲率。
它们的计算公式如下:
Aij = Σ_{k=1}^{n} (Qij)_k * (z_k - z_{k-1})
Bij = (1/2) * Σ_{k=1}^{n} (Qij)_k * (z_k² - z_{k-1}²)
Dij = (1/3) * Σ_{k=1}^{n} (Qij)_k * (z_k³ - z_{k-1}³)
其中,z_k 是第 k 层底面的 z 坐标(从板中面算起)。
3.5 层合板的柔度矩阵
有了刚度矩阵,求逆就能得到柔度矩阵。但注意,层合板的柔度矩阵不是简单的 [A]⁻¹、[B]⁻¹、[D]⁻¹,而是整个 6×6 矩阵的逆:
| {ε⁰} | | [a] [b] | | {N} |
| {κ} | = | [b]ᵀ [d] | * | {M} |
其中,[a]、[b]、[d] 就是层合板的柔度矩阵子块。它们与 [A]、[B]、[D] 的关系是:
[a] = [A*]⁻¹
[b] = -[A*]⁻¹ * [B] * [D*]⁻¹
[d] = [D*]⁻¹
这里 [A*] = [A] - [B][D]⁻¹[B],[D*] = [D] - [B][A]⁻¹[B]。看着复杂,但实际计算时,我们直接用数值求逆就行。
我个人习惯用 Python 的 NumPy 库来算这些矩阵,几行代码就搞定。下面给个简单的示例:
import numpy as np
# 定义各层材料属性(Q矩阵)和铺层角度
# 这里假设是碳纤维/环氧,单层厚度 0.125mm
Q = np.array([[140, 3, 0],
[3, 10, 0],
[0, 0, 5]]) # 单位 GPa
layup = [0, 45, -45, 90, 90, -45, 45, 0] # 铺层顺序
thickness = 0.125 # mm
# 计算各层z坐标
n_layers = len(layup)
z = np.linspace(-n_layers*thickness/2, n_layers*thickness/2, n_layers+1)
# 初始化A, B, D矩阵
A = np.zeros((3,3))
B = np.zeros((3,3))
D = np.zeros((3,3))
# 逐层累加
for k in range(n_layers):
# 这里需要根据铺层角度旋转Q矩阵(略)
Qk = Q # 假设0°铺层
A += Qk * (z[k+1] - z[k])
B += 0.5 * Qk * (z[k+1]**2 - z[k]**2)
D += (1/3) * Qk * (z[k+1]**3 - z[k]**3)
print("A矩阵:\n", A)
print("B矩阵:\n", B)
print("D矩阵:\n", D)
3.6 知识体系结构图
下面这张图,是我梳理的 CLT 核心逻辑。你顺着箭头看,就能明白从单层到层合板的整个推导链条。
3.7 避坑指南与工程经验
最后,分享几个我在项目中踩过的坑:
- 铺层顺序影响巨大:同样的铺层比例(比如 50% 0°、30% ±45°、20% 90°),改变顺序,[B] 矩阵和 [D] 矩阵会变。我曾经为了优化弯曲刚度,把 ±45° 层从中间移到表面,结果弯曲刚度提升了 15%。
- 不要忽略热残余应力:CLT 只算力学载荷。但复合材料固化后,由于各层热膨胀系数不同,会产生残余应力。这个应力会影响失效判据。我一般会在 CLT 分析后,叠加一个热载荷步。
- 对称铺层不是万能的:虽然对称铺层消除了 [B] 矩阵,但如果你只加面内载荷,没问题。一旦有弯曲载荷,[D] 矩阵的各向异性会导致耦合变形(比如弯曲-扭转耦合)。这在叶片设计中要特别注意。
好了,CLT 的核心内容就这些。你把它吃透了,后面讲失效判据时,就能理解为什么应力要分“层”计算,为什么层间应力那么难处理。嗯,先消化一下,有问题随时交流。