3. 复合材料力学基础(二):经典层合板理论(CLT)、层合板的刚度与柔度矩阵

各位工程师朋友,咱们接着聊复合材料力学。上一章我们把单层板的应力-应变关系理清了,那都是基础。但实际叶片结构,没人用单层板干活,都是把好几层不同角度的铺层叠在一起,形成层合板。这时候问题就来了:怎么算这个“叠在一起”的板子的整体刚度?

嗯,这就是经典层合板理论(CLT)要干的事。我个人觉得,CLT 是复合材料结构设计的基石,你搞不懂它,后面做失效分析、铺层优化,基本就是瞎蒙。

3.1 经典层合板理论的基本假设

CLT 不是凭空想出来的,它基于几个简化假设。说白了,就是把复杂的层合板问题,简化成我们熟悉的薄板问题。你想想看,叶片蒙皮厚度跟弦长比,通常很小,这就符合薄板假设。

核心假设有这么几条:

  • 直法线假设(Kirchhoff 假设):变形前垂直于中面的直线,变形后仍为直线,且仍垂直于中面。这意味着我们忽略横向剪切变形。
  • 等应变假设:各铺层之间完美粘接,没有滑移。层间应变是连续的。
  • 平面应力状态:垂直于板面的应力分量(σz, τxz, τyz)忽略不计。因为板很薄,这些应力相对面内应力很小。
  • 小变形假设:位移远小于板厚,应变-位移关系保持线性。
⚠️ 注意: 我曾经在分析一个厚叶片根部连接区时,直接套用 CLT,结果算出来的刚度偏大。后来发现,厚板区域横向剪切变形不可忽略,必须用一阶剪切变形理论(FSDT)才行。所以,CLT 只适用于薄板,一般要求长厚比大于 20。

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 坐标(从板中面算起)。

💡 关键点: 如果层合板是对称铺层(比如 [0/90/90/0]),那么 [B] 矩阵为零矩阵。这意味着拉伸和弯曲不耦合,设计起来简单很多。我在做叶片主梁设计时,几乎都用对称铺层,就是为了避免耦合带来的翘曲问题。

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)
🔧 实用技巧: 实际项目中,我一般不会手算这些矩阵。我会用商业软件(如 ANSYS ACP、ABAQUS)或开源工具(如 PreComp、NuMAD)来生成。但理解原理很重要,至少你要能看懂输出结果,知道 [B] 矩阵非零意味着什么。

3.6 知识体系结构图

下面这张图,是我梳理的 CLT 核心逻辑。你顺着箭头看,就能明白从单层到层合板的整个推导链条。

经典层合板理论(CLT)知识体系 单层板刚度 [Q] 铺层角度 + 厚度 + 顺序 层合板刚度矩阵 [A] = Σ Q·Δt [B] = ½ Σ Q·(z²) [D] = ⅓ Σ Q·(z³) 本构方程 {N} = [A]{ε⁰}+[B]{κ} 柔度矩阵 {ε⁰,κ} = [a,b;bᵀ,d]{N,M} 工程常数 Ex, Ey, Gxy, νxy 图:从单层刚度到层合板宏观力学性能的推导路径

3.7 避坑指南与工程经验

最后,分享几个我在项目中踩过的坑:

  • 铺层顺序影响巨大:同样的铺层比例(比如 50% 0°、30% ±45°、20% 90°),改变顺序,[B] 矩阵和 [D] 矩阵会变。我曾经为了优化弯曲刚度,把 ±45° 层从中间移到表面,结果弯曲刚度提升了 15%。
  • 不要忽略热残余应力:CLT 只算力学载荷。但复合材料固化后,由于各层热膨胀系数不同,会产生残余应力。这个应力会影响失效判据。我一般会在 CLT 分析后,叠加一个热载荷步。
  • 对称铺层不是万能的:虽然对称铺层消除了 [B] 矩阵,但如果你只加面内载荷,没问题。一旦有弯曲载荷,[D] 矩阵的各向异性会导致耦合变形(比如弯曲-扭转耦合)。这在叶片设计中要特别注意。

好了,CLT 的核心内容就这些。你把它吃透了,后面讲失效判据时,就能理解为什么应力要分“层”计算,为什么层间应力那么难处理。嗯,先消化一下,有问题随时交流。