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) |
|---|---|---|---|---|
| 80 | 353.15 | 312 | 18.5 | 62 |
| 90 | 363.15 | 318 | 11.2 | 40 |
| 100 | 373.15 | 321 | 6.8 | 25 |
| 110 | 383.15 | 325 | 4.1 | 16 |
拟合步骤:① 对每个温度曲线做数值微分得到 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 作为兼顾操作时间与脱模效率的工艺点。
结果验证与常见偏差
- 回代验证:用拟合参数重新计算 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 是否落在约束线内侧,确认窗口未被模型外推误差放大。