第2章:PID控制原理:比例、积分、微分的作用、PID的数学模型、位置式与增量式PID

大家好,我是老张。今天咱们聊聊PID控制原理。说实话,我在半导体设备这行摸爬滚打十几年,PID整定是绕不开的核心技能。你想想看,晶圆搬运机械臂、精密对准台、真空机械手,哪个离得开PID?

很多新人一上来就调参数,结果越调越乱。为什么?因为不理解PID的本质。今天我就把比例、积分、微分这三个家伙的脾气秉性,给你掰扯清楚。

PID控制原理知识体系 PID控制器 比例(P) Kp × e(t) 当前误差放大 积分(I) Ki × ∫e(t)dt 历史误差累积 微分(D) Kd × de(t)/dt 误差变化趋势 数学模型 位置式PID u(t) = Kp·e(t) + Ki·∫e(t)dt + Kd·de(t)/dt 增量式PID Δu(k) = Kp·Δe(k) + Ki·e(k) + Kd·Δ²e(k) 半导体设备:晶圆对准、机械臂、真空传输

2.1 比例作用:最直接的响应

比例控制,说白了就是「有多大错,使多大劲」。误差大,输出就大;误差小,输出就小。这个逻辑很直观。

数学上很简单:Pout = Kp × e(t)。其中e(t)是当前误差,Kp是比例增益。

我在调试晶圆对准台时遇到过一个问题:Kp设小了,平台半天挪不到位;Kp设大了,又抖得像筛糠。这就是比例控制的典型矛盾——快速性与稳定性不可兼得

关键点:纯比例控制一定会产生稳态误差。为什么?因为系统需要误差来维持输出。你想想看,如果误差为零,比例输出就是零,那系统怎么保持位置?

我的经验:调试时先把I和D设为零,只调P。让系统刚好不振荡,然后记下这个Kp值。这个值就是你的「基准线」。

2.2 积分作用:消除稳态误差的利器

积分项解决的就是比例控制搞不定的稳态误差。它把过去的误差累积起来,慢慢修正。

数学表达式:Iout = Ki × ∫e(t)dt。注意这个积分符号,它意味着只要误差存在,积分项就会一直增长。

我曾经调试一台真空机械手,位置总是偏0.02mm。比例调了无数遍就是消不掉。后来加了积分项,嘿,三秒钟就拉回来了。但要注意——积分饱和是个大坑。

避坑指南:我曾经在晶圆传输系统中吃过积分饱和的亏。启动时误差很大,积分项疯狂累积,等系统到达目标位置时,积分输出还在「惯性滑行」,导致严重超调。后来加了积分限幅和抗饱和算法才解决。

积分还有一个特点:它会降低系统的响应速度。因为积分需要时间累积,所以系统会变得「慢半拍」。

2.3 微分作用:提前预判的智慧

微分项看的是误差的变化趋势。误差在变大,它就加大输出;误差在变小,它就减小输出。说白了,就是给系统加了个「刹车」。

数学形式:Dout = Kd × de(t)/dt。这个导数项对噪声特别敏感。

微分在半导体设备中非常有用。比如晶圆对准时,平台接近目标位置,微分项能提前减速,避免冲过头。但要注意,微分对高频噪声是放大器

实战要点:我建议在传感器噪声较大的场合,要么加低通滤波,要么干脆不用微分。有时候D设得不好,比不设还糟糕。

2.4 PID的完整数学模型

把三个家伙合在一起,就是完整的PID公式:

u(t) = Kp × e(t) + Ki × ∫e(t)dt + Kd × de(t)/dt

其中:

  • u(t):控制输出(比如电机电压、阀门开度)
  • e(t):设定值与实际值的偏差
  • Kp:比例增益
  • Ki:积分增益
  • Kd:微分增益

在数字系统中,我们用的是离散形式。把连续时间换成采样周期Ts:

u(k) = Kp × e(k) + Ki × Σe(i)×Ts + Kd × [e(k) - e(k-1)]/Ts

这里k表示第k个采样时刻。注意积分变成了累加,微分变成了差分。

2.5 位置式PID vs 增量式PID

这是实际工程中必须搞清楚的两种实现方式。

对比项 位置式PID 增量式PID
输出含义 直接输出控制量(如位置、角度) 输出控制量的增量(变化量)
计算公式 u(k) = Kp·e(k) + Ki·Σe(i) + Kd·[e(k)-e(k-1)] Δu(k) = Kp·Δe(k) + Ki·e(k) + Kd·[Δe(k)-Δe(k-1)]
积分累积 需要累加所有历史误差 不需要累加,只依赖最近几次误差
抗积分饱和 需要额外处理 天然抗积分饱和
手动/自动切换 切换时可能有冲击 切换平滑,无冲击
适用场景 伺服位置控制、精密对准 步进电机、阀门控制、增量式执行器

位置式PID,我习惯用在晶圆对准台这类需要绝对位置控制的场合。但要注意积分饱和问题——我曾经在设备启动时,积分项累积到几万,输出直接饱和,平台「飞」出去了。

增量式PID,说白了就是只算「这次比上次多输出多少」。它不需要记住所有历史误差,只依赖最近三次的误差值。在步进电机控制中特别好用,因为步进电机本身就是增量式的。

我的选择原则:如果执行器是伺服电机(带编码器反馈),用位置式;如果是步进电机或阀门,用增量式。这不是绝对的,但90%的情况都适用。

2.6 增量式PID的代码实现

给你看一段我常用的增量式PID代码,简洁实用:

// 增量式PID结构体
typedef struct {
    float Kp, Ki, Kd;      // PID参数
    float error[3];        // 误差缓存:error[0]=e(k), error[1]=e(k-1), error[2]=e(k-2)
    float output;          // 当前输出
} IncrementalPID;

// 增量式PID计算函数
float IncrementalPID_Calc(IncrementalPID *pid, float setpoint, float feedback) {
    pid->error[2] = pid->error[1];
    pid->error[1] = pid->error[0];
    pid->error[0] = setpoint - feedback;
    
    // Δe(k) = e(k) - e(k-1)
    float delta_error = pid->error[0] - pid->error[1];
    // Δ²e(k) = e(k) - 2*e(k-1) + e(k-2)
    float delta2_error = pid->error[0] - 2*pid->error[1] + pid->error[2];
    
    // 计算增量
    float delta_u = pid->Kp * delta_error 
                  + pid->Ki * pid->error[0] 
                  + pid->Kd * delta2_error;
    
    // 累加输出
    pid->output += delta_u;
    
    // 输出限幅(防止溢出)
    if(pid->output > OUTPUT_MAX) pid->output = OUTPUT_MAX;
    if(pid->output < OUTPUT_MIN) pid->output = OUTPUT_MIN;
    
    return pid->output;
}

这段代码我用了好多年,在多个半导体设备项目中验证过。注意那个误差缓存数组,它只存最近三次的误差值,内存占用极小。

核心区别总结:

  • 位置式PID:输出是绝对值,需要积分累加,适合伺服控制
  • 增量式PID:输出是增量值,不需要积分累加,适合步进电机
  • 增量式PID天然抗积分饱和,切换无冲击

好了,这一章的内容就到这里。比例、积分、微分这三个家伙,你只要理解了它们的脾气,整定参数就不再是玄学。下一章我们聊聊具体的整定方法,到时候我会分享一些实战中的「野路子」技巧。


专注资料整理