3. 运动控制算法:PID控制原理与参数整定、前馈控制与扰动补偿、轨迹规划(S曲线、T曲线)
大家好,我是老张。在半导体设备这行摸爬滚打十几年,今天咱们来聊聊运动控制里最核心的东西——算法。
你想想看,一台光刻机或者晶圆搬运机械手,动作稍微抖一下,可能整批晶圆就报废了。所以,控制算法就是设备的“灵魂”。
这一章,我打算把PID控制、前馈补偿和轨迹规划这三块硬骨头,用咱们工程师能听懂的大白话,掰开揉碎了讲清楚。
核心逻辑: 轨迹规划决定“要去哪”,PID控制决定“怎么去”,前馈补偿解决“路上有坑怎么办”。三者缺一不可。
3.1 PID控制原理与参数整定
PID,说白了就是三个字:比例、积分、微分。我刚开始带徒弟的时候,总有人问我:“张工,这三个参数到底管什么?”
我打个比方你就懂了。你开车想停在某个车位:
- 比例(P):看到离车位还差2米,你就踩油门。差得越远,油门越大。这就是比例控制——根据当前误差大小来调整。
- 积分(I):如果一直有侧风,你总差那么10厘米停不进去。积分就是帮你“攒劲儿”,把过去积累的偏差一点点补回来。说白了就是消除静差。
- 微分(D):眼看要撞到后车了,你赶紧松油门甚至踩刹车。微分就是预测未来趋势,提前抑制过冲。
公式很简单,但用起来学问大:
u(t) = Kp * e(t) + Ki * ∫e(t)dt + Kd * de(t)/dt
3.1.1 参数整定——我的“土办法”
我记得刚入行时,看老工程师调参数,三下五除二就搞定。后来我自己总结了一套流程,分享给你:
- 先调P,让系统动起来:Ki和Kd先设为0。慢慢加大Kp,直到系统出现等幅振荡。记录此时的Kp(叫临界增益Ku)和振荡周期Tu。
- 用Ziegler-Nichols公式算初值:
| 控制器类型 | Kp | Ki | Kd |
|---|---|---|---|
| P | 0.5 * Ku | - | - |
| PI | 0.45 * Ku | 1.2 * Kp / Tu | - |
| PID | 0.6 * Ku | 2 * Kp / Tu | Kp * Tu / 8 |
算出来之后,别急着用。我习惯再微调一下:
- 如果响应太慢,适当加P或减I。
- 如果过冲太大,加D或减P。
- 如果稳态有抖动,可能是D太大,或者机械共振。
我的小技巧: 在半导体设备里,晶圆搬运对过冲要求极高(通常<1%)。我一般会先让P小一点,用I来补精度,D用来抑制振荡。这样虽然响应慢个几十毫秒,但绝对不超调。
避坑指南: 我曾经在一个晶圆对准平台上,积分项设得太大,结果每次启动都“冲过头”,晶圆直接飞出去了。后来加了积分分离——误差大时关掉积分,误差小时再启用。问题就解决了。
3.2 前馈控制与扰动补偿
光靠PID,说实话,在半导体设备里是不够的。为什么?因为PID是“事后诸葛亮”——它看到误差了才去调整。但很多扰动是可以提前预判的。
举个例子:你让一个机械手加速运动,惯性会产生一个很大的位置滞后。PID看到滞后了才去追,永远慢半拍。这时候就需要前馈控制。
3.2.1 速度前馈与加速度前馈
前馈的核心思想是:我知道你要干什么,我先给你一个补偿量。
// 速度前馈:根据目标速度提前给力
Feedforward_velocity = Kvff * target_velocity
// 加速度前馈:根据目标加速度提前给力
Feedforward_acceleration = Kaff * target_acceleration
// 总输出 = PID输出 + 前馈输出
total_output = pid_output + Feedforward_velocity + Feedforward_acceleration
我在做晶圆划片机的时候,X轴行程有1米,加速度设到2G。如果不加前馈,光靠PID,位置误差能到0.5mm。加了前馈之后,误差直接降到0.01mm以内。效果立竿见影。
3.2.2 摩擦补偿
摩擦是个很讨厌的东西。低速时摩擦力大,容易造成“爬行”;换向时摩擦力突变,造成位置过冲。
我常用的摩擦模型是Stribeck模型:
F_friction = Fc + (Fs - Fc) * exp(-(v/vs)^2) + B * v
其中Fc是库仑摩擦力,Fs是静摩擦力,vs是Stribeck速度,B是粘滞系数。
实际应用中,我一般做个摩擦前馈表:测出不同速度下的摩擦力,存成表格。运行时根据当前速度查表补偿。简单粗暴,但非常有效。
关键点: 前馈不能完全替代反馈。前馈处理“已知扰动”,反馈处理“未知扰动”。两者结合,才是王道。
3.3 轨迹规划:S曲线与T曲线
好了,现在控制算法有了,但你要让电机怎么动?是直接给一个阶跃信号?那肯定不行,机械会散架的。
轨迹规划就是告诉电机:你从A点到B点,速度怎么变,加速度怎么变,甚至加加速度(Jerk)怎么变。
3.3.1 T曲线(梯形速度曲线)
T曲线是最简单的。就是匀加速→匀速→匀减速三段。你看它的速度图,像个梯形。
// T曲线位置计算示例
// 已知:总位移S,最大速度Vmax,加速度A
// 计算加速段位移:S_acc = Vmax^2 / (2 * A)
// 如果 S_acc * 2 <= S,则有匀速段
// 否则,是三角形速度曲线(没有匀速段)
T曲线的问题很明显:加速度突变。在加速结束的瞬间,加速度从A突然变成0,加加速度(Jerk)无穷大。这会导致机械振动。
在半导体设备里,T曲线基本只用于低速、大惯量、对振动不敏感的场合。比如一些粗定位机构。
3.3.2 S曲线(S形速度曲线)
S曲线就优雅多了。它把加速度的变化也规划成连续的。通常分为7段:
- 加加速度段(Jerk为正,加速度增加)
- 匀加速段(加速度恒定)
- 减加速度段(Jerk为负,加速度减小到0)
- 匀速段
- 加减速度段(Jerk为负,加速度反向增加)
- 匀减速段(加速度恒定)
- 减减速度段(Jerk为正,加速度减小到0)
你看,S曲线的速度是S形的,加速度是梯形的,加加速度是方波。这样整个运动过程没有加速度突变,机械振动大大减小。
// S曲线关键参数计算(简化版)
// 已知:总位移S,最大速度Vmax,最大加速度Amax,最大加加速度Jmax
// 1. 计算加加速度段时间:Tj = Amax / Jmax
// 2. 计算加速段位移:S_acc = Amax * Tj^2 + 0.5 * Amax * Tj^2 + Vmax * Tj
// 3. 判断是否有匀速段...
我的经验: 在晶圆搬运机械手上,我一般把Jerk设为5000-10000 mm/s³。太小了,加减速时间太长,影响效率;太大了,振动又压不住。这个值需要根据机械结构的固有频率来调。你可以做一次扫频测试,找到共振点,然后避开它。
3.3.3 连续轨迹与电子凸轮
在半导体设备里,很多动作不是点到点的,而是连续轨迹。比如晶圆检测时,相机要沿着一条曲线扫描。
这时候就需要轨迹衔接。我常用的方法是:
- 在两条轨迹的交接处,插入一段过渡曲线(比如圆弧或样条曲线)。
- 限制交接点的速度方向变化率,保证加速度连续。
- 用前瞻算法(Look-ahead)提前规划未来几段轨迹,避免速度降到0再加速。
电子凸轮则是另一种思路。它把主轴的角度映射到从轴的位置上。比如在芯片贴装设备里,吸嘴要跟着传送带同步运动。用电子凸轮,主轴转一圈,从轴走一个特定的位置曲线。这个曲线就是凸轮表。
// 电子凸表示例(5点样条插值)
// 主轴角度: 0°, 90°, 180°, 270°, 360°
// 从轴位置: 0mm, 10mm, 20mm, 10mm, 0mm
// 运行时根据主轴当前角度,查表插值得到从轴目标位置
避坑指南: 我曾经在一个高速贴片机上,凸轮表的点数太少(只有16点),结果运行时从轴振动特别大。后来把点数增加到128点,并且用了五次样条插值,振动就消失了。记住:凸轮表的点数至少是运动周期的10倍以上。
小结
这一章的内容,说白了就是三件事:
- PID 是基础,调好了能解决80%的问题。
- 前馈 是进阶,帮你把精度再提一个数量级。
- 轨迹规划 是前提,决定了设备能不能“优雅地”运动。
我个人觉得,做运动控制,不要只盯着算法本身。要多想想机械特性——惯量、刚度、摩擦、共振频率。算法是软件,机械是硬件,两者匹配才能出好效果。
好了,这一章就到这里。有什么问题,欢迎交流。