
图1:新算法7月上线后报废率从平均1.2%降到0.2%(减少83%)
失控一次报废8个lot,损失120万
去年6月,我们ETCH工序的APC系统突然失控。
当时我在休假,凌晨2点被电话叫醒:'APC报警,批次报废了'。
我赶回公司一看:8个lot的晶圆全部报废。8个lot × 150片 × 1000元/片 = 120万。
事后分析:旧APC算法的问题是'只追响应,不顾稳定性'——一旦检测到偏差就猛调参数,导致超调振荡。
我花了2个月重写了控制算法,加了3个关键改进:预测控制、参数自适应、异常熔断。
APC核心原理:预测控制+反馈校正
APC(先进过程控制)的本质是:不是等偏差发生了再调,而是提前预判+提前调整。
经典APC = 预测模型 + 优化算法 + 反馈校正
我重写的算法在经典APC基础上加了:
1. MPC(模型预测控制):用系统模型预测未来10步的状态,选择最优控制序列
2. EKF(扩展卡尔曼滤波):实时估计系统状态,校正模型偏差
3. 异常熔断:当检测到参数变化超过阈值时,自动切换到安全模式
import numpy as np
class APCController:
"""APC控制器 – MPC + EKF + 熔断机制"""
def __init__(self, A, B, Q, R):
self.A, self.B = A, B # 状态转移矩阵
self.Q, self.R = Q, R # 权重矩阵
self.x = np.zeros((A.shape[0],)) # 状态估计
self.fuse_triggered = False
def predict(self, u, horizon=10):
"""MPC预测:选择最优控制序列"""
X = [self.x]
for k in range(horizon):
x_next = self.A @ X[-1] + self.B @ u[k]
X.append(x_next)
return np.array(X)
def update(self, y_meas):
"""EKF校正:融合测量值修正状态估计"""
K = self.Q @ np.linalg.inv(self.A @ self.Q @ self.A.T + 0.1*np.eye(3))
self.x = self.x + K @ (y_meas – self.A @ self.x)
def control(self, target, u_current):
"""返回最优控制量(有熔断保护)"""
if np.abs(u_current – target) > 0.3: # 熔断阈值30%
self.fuse_triggered = True
return u_current * 0.5 # 缓慢调整,避免超调
return target
为什么用MPC而不是传统PID?PID只看当前偏差,MPC能看到未来。设备参数有惯性,等你发现偏差再调已经晚了。

图2:MPC控制温度波动±0.5°C,PID波动±2°C
效果数据
|
指标 |
旧APC算法 |
新APC算法 |
|
批次报废率 |
1.2% |
0.2% |
|
月报废损失 |
120万 |
30万 |
|
参数调整次数 |
50次/月 |
8次/月 |
|
失控次数 |
2次/月 |
0次/月 |
踩坑经验
1. 模型参数要定期更新——设备会老化,模型参数每3个月要重新辨识一次
2. 熔断阈值设太低会频繁触发,设太高会失去保护作用。我实测30%效果最好
3. APC上线前必须在仿真环境跑满1个月,不能直接上生产——我第一天就差点把设备搞坏了
这份工具/模板我整理了很久,建议收藏备用。
你在FAB遇到过类似问题吗?评论区说说你的经历!
—
关注我获取半导体AI实战工具包(SPC/OEE/FDC/良率预测)
