2. 等温固化动力学参数拟合与窗口预测

为什么等温DSC数据需要动力学拟合

例1给出了固化窗口的粗略温度边界,但工艺工程师真正需要回答的是:在某个恒定温度下,树脂多久达到可脱模的固化度?多久达到 95% 以上?仅靠特征温度无法回答,必须把等温DSC的热流曲线转换为固化度—时间曲线,并用动力学模型外推到未测温度。本例采用最常用的 n 级自催化模型(Kamal 模型简化形式)进行拟合:

dα/dt = k(T) · (1−α)n,  k(T) = A · exp(−Ea/(R·T))

其中 α 为固化度,n 为反应级数,A 为指前因子,Ea 为表观活化能,R = 8.314 J/(mol·K)。等温DSC中,t 时刻的累积放热量除以总放热量即为 α(t)。

教学示例数据与拟合流程

下表为示例数据集(假设值,用于演示拟合流程,非实测)。每个温度下由DSC积分得到若干 (t, α) 点,总放热焓 ΔHtotal 取该温度等温段与后续升温残余放热之和。

等温温度 T (°C)T (K)ΔHtotal (J/g)α=0.5 时间 t50 (min)α=0.95 时间 t95 (min)
80353.1531218.562
90363.1531811.240
100373.153216.825
110383.153254.116

拟合步骤:① 对每个温度曲线做数值微分得到 dα/dt;② 取低转化率区间(α = 0.1~0.6,避开扩散控制段)做线性回归 ln(dα/dt) 对 ln(1−α),斜率即 n;③ 由截距得各温度 k(T);④ 用 Arrhenius 关系 ln k 对 1/T 线性回归,斜率 −Ea/R,截距 ln A。示例拟合结果为 n ≈ 1.6、Ea ≈ 78 kJ/mol、A ≈ 2.1×109 min−1(示例值)。

import numpy as np
from scipy.optimize import curve_fit

R = 8.314
# 示例:每个温度下的 (t_min, alpha) 采样点(假设数据)
data = {
    353.15: [(0,0.00),(5,0.12),(10,0.28),(18.5,0.50),(30,0.72),(45,0.86),(62,0.95)],
    363.15: [(0,0.00),(3,0.14),(6,0.30),(11.2,0.50),(20,0.74),(30,0.88),(40,0.95)],
    373.15: [(0,0.00),(2,0.16),(4,0.32),(6.8,0.50),(12,0.76),(18,0.89),(25,0.95)],
    383.15: [(0,0.00),(1,0.17),(2.5,0.34),(4.1,0.50),(8,0.78),(12,0.90),(16,0.95)],
}

def alpha_model(t, k, n):
    # n级模型解析解: alpha = 1 - [1-(1-n)k t]^(1/(1-n))
    if abs(n - 1.0) < 1e-6:
        return 1 - np.exp(-k * t)
    return 1 - np.power(np.maximum(1 - (1 - n) * k * t, 0), 1/(1 - n))

ks, ns = [], []
for T, pts in data.items():
    t = np.array([p[0] for p in pts], float)
    a = np.array([p[1] for p in pts], float)
    popt, _ = curve_fit(alpha_model, t, a, p0=[0.05, 1.5], bounds=([1e-4,0.5],[1.0,3.0]))
    ks.append(popt[0]); ns.append(popt[1])
    print(f"T={T:.2f}K  k={popt[0]:.5f}/min  n={popt[1]:.3f}")

# Arrhenius 拟合 ln k = ln A - Ea/(R T)
invT = 1/np.array(list(data.keys()))
lnk = np.log(np.array(ks))
slope, intercept = np.polyfit(invT, lnk, 1)
Ea = -slope * R / 1000          # kJ/mol
A  = np.exp(intercept)
print(f"Ea={Ea:.1f} kJ/mol  A={A:.3e} /min  n_avg={np.mean(ns):.2f}")

# 预测任意温度下的 alpha-t 曲线
def predict(T_C, t):
    T = T_C + 273.15
    k = A * np.exp(-Ea*1000/(R*T))
    return alpha_model(t, k, np.mean(ns))

for Tc in [70, 85, 100, 120]:
    t = np.linspace(0, 120, 241)
    a = predict(Tc, t)
    t50 = t[np.argmax(a >= 0.50)]
    t95 = t[np.argmax(a >= 0.95)]
    print(f"{Tc}C: t50={t50:.1f}min  t95={t95:.1f}min")

固化窗口的判读

把预测曲线与工艺约束叠加,即可界定可接受的等温固化窗口。示例约束:适用期下限——t50 不得短于 8 min(否则灌注/手糊来不及操作);效率上限——t95 不得长于 90 min(否则模具周转过慢)。据此,示例参数下可接受窗口约为 82~108 °C:低于 82 °C 时 t95 超过 90 min,高于 108 °C 时 t50 短于 8 min。窗口内推荐 95 °C 作为兼顾操作时间与脱模效率的工艺点。

拟合时务必剔除 α > 0.7 之后的数据点:此时反应受扩散控制,n 级模型会系统性高估反应速率,导致 t95 预测偏短。若必须精确预测后段,应改用 Kamal 扩散因子模型或分段拟合。
外推温度不要超出实测温度区间两端各 20 °C 以上。Arrhenius 参数在玻璃化转变附近会失效,低温外推尤其容易高估固化速度。
① 等温DSC → 固化度曲线 时间 t (min) α 80°C 90°C 100°C 110°C ② 模型拟合 dα/dt = k(T)(1−α)ⁿ n ≈ 1.6 Eₐ ≈ 78 kJ/mol A ≈ 2.1×10⁹ min⁻¹ 拟合区间 α = 0.1~0.6 (剔除扩散控制段) 示例拟合值 ③ 窗口预测 等温温度 (°C) 70 82 95 108 120 可接受窗口 82 ~ 108 °C 推荐 95 °C t₅₀<8min 操作不足 t₉₅>90min 效率过低 预测的固化度—时间曲线(模型外推) 时间 t (min) 固化度 α 0.5 1.0 0 30 60 90 120 150 70 °C 85 °C 100 °C 120 °C α = 0.95(脱模判据)

结果验证与常见偏差

  • 回代验证:用拟合参数重新计算 80/90/100/110 °C 的 t50 与 t95,与表中实测值对比,相对误差应控制在 15% 以内;若某温度偏差显著,检查该条DSC曲线的基线积分是否包含了残余放热峰。
  • n 值合理性:乙烯基酯树脂的 n 通常在 1.2~2.0。若拟合得到 n < 1,多半是数据点落在扩散控制段或基线漂移。
  • Ea 一致性:用 Kissinger 法(动态升温数据)得到的 Ea 应与等温拟合值接近;两者相差超过 20% 时,说明等温数据覆盖的温度区间过窄。
  • 窗口边界复核:在预测的窗口边界温度(如 82 °C 与 108 °C)各补做一次等温DSC,实测 t50/t95 是否落在约束线内侧,确认窗口未被模型外推误差放大。