第4章:PID控制基础

各位同行,今天我们来聊聊套色控制里最核心的东西——PID。说实话,我入行那会儿,师傅丢给我一本泛黄的《自动控制原理》,说「小子,把这个啃透了再来上机」。结果我啃了三天,满脑子都是拉普拉斯变换和传递函数,上了机还是调得一团糟。

后来我才明白,PID这东西,说白了就是三个字:看、算、调。比例、积分、微分,三个环节各司其职。咱们今天就把它们掰开揉碎了讲清楚。

核心观点:PID不是数学公式,是工程师的手感。你调得多了,自然就知道什么时候该加P,什么时候该加I。

4.1 比例控制(P)—— 最直接的反馈

比例控制,说白了就是「偏差越大,调整越猛」。你想想看,套色系统里,如果当前色标和基准色标差了5mm,那肯定比差1mm的时候要调得更狠。这个「狠」的程度,就是比例系数Kp。

公式很简单:u(t) = Kp × e(t)

其中e(t)就是当前偏差。Kp越大,响应越快。但Kp太大了会怎样?我遇到过一台老式凹印机,操作工把Kp拧到了头,结果套色辊来回震荡,活像得了帕金森。嗯,这就是典型的比例过大导致的超调和振荡。

我的经验:调P的时候,先把I和D设成0,然后慢慢加大Kp,直到系统开始出现轻微振荡,再把Kp往回拧一点。这个点,就是「临界比例度」。我习惯记下这个值,后面调I和D的时候用得上。

4.2 积分控制(I)—— 消除静差

比例控制有个硬伤:它永远消除不了静差。为什么?因为当偏差小到一定程度,比例输出就很小,不足以推动执行机构。结果就是——系统稳定了,但就是差那么一点点。

积分控制就是来解决这个问题的。它把过去所有的偏差都累加起来,只要还有偏差,积分项就会一直增长,直到把偏差彻底吃掉。

公式:u(t) = Ki × ∫e(t)dt

但积分也有坑。我记得有一次调试一台高速印刷机,Ki设得偏大,结果积分项疯狂累积,导致系统响应严重滞后,色标一跑就拉不回来。这就是所谓的「积分饱和」。后来我加了个积分限幅,才把问题压下去。

避坑指南:我曾经在一条生产线上吃过亏——积分时间设得太短,导致系统低频振荡,套色精度反而下降了。后来我总结了一条经验:积分时间常数Ti,一般取振荡周期的1.5到2倍,比较稳妥。

4.3 微分控制(D)—— 提前预判

微分控制,说白了就是「看趋势」。它不关心偏差有多大,它关心偏差变化得有多快。如果偏差正在快速增大,微分项就会提前输出一个反向力,把振荡扼杀在摇篮里。

公式:u(t) = Kd × de(t)/dt

微分项对噪声特别敏感。你想想看,如果传感器信号上有个毛刺,微分一算,瞬间输出一个巨大的脉冲,执行机构直接抽风。所以我一般会在微分前加一个低通滤波器,把高频噪声滤掉。

实际应用:在套色控制中,微分项用得不多。因为印刷机的机械惯性本身就很大,微分项容易引入高频干扰。我个人的习惯是:只有在系统响应特别慢、或者需要抑制超调的时候,才加一点点D。

4.4 PID参数整定方法

参数整定,是PID控制里最考验功夫的环节。我见过有人用试错法调了一整天,也有人用公式法十分钟搞定。这里介绍两种最常用的方法。

4.4.1 试凑法

这个方法最直观,也最考验手感。步骤很简单:

  1. 先把I和D设为0,只调P。慢慢加大Kp,直到系统出现等幅振荡。
  2. 记下此时的Kp(称为临界增益Kc)和振荡周期Tc。
  3. 然后按经验公式设置:Kp = 0.6×Kc,Ti = 0.5×Tc,Td = 0.125×Tc。
  4. 微调:如果超调太大,适当减小Kp或增加Td;如果响应太慢,适当减小Ti。

这个方法我用了十几年,虽然不精确,但胜在快。现场调试的时候,谁有功夫去算传递函数?

4.4.2 Ziegler-Nichols整定法

这个方法更系统一些。它基于系统的阶跃响应曲线来整定参数。具体步骤:

  1. 给系统一个阶跃输入,记录响应曲线。
  2. 从曲线上找到拐点,画出切线,得到滞后时间L和时间常数T。
  3. 然后查表:
控制器类型 Kp Ti Td
P T/L 0
PI 0.9×T/L L/0.3 0
PID 1.2×T/L 2L 0.5L

我的建议:Z-N法给出的参数往往偏激进,容易产生超调。我一般会把Kp再打八折,然后根据实际效果微调。记住,参数整定没有标准答案,只有「适合当前工况」的答案。

4.5 数字PID实现

现在的套色控制器基本都是数字的,所以咱们得把连续PID离散化。说白了,就是把积分变成累加,把微分变成差分。

位置式PID公式:

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

增量式PID公式:

Δu(k) = Kp × [e(k) - e(k-1)] + Ki × e(k) + Kd × [e(k) - 2e(k-1) + e(k-2)]

我个人更推荐增量式。为什么?因为增量式只输出变化量,即使控制器死机重启,也不会产生巨大的冲击。位置式就不一样了,积分项累积了一大堆,一重启直接飞车。

下面是一个简单的数字PID实现,我用Python写的,现场调试的时候经常拿它做仿真:

class DigitalPID:
    def __init__(self, Kp, Ki, Kd, dt):
        self.Kp = Kp
        self.Ki = Ki
        self.Kd = Kd
        self.dt = dt
        self.last_error = 0
        self.integral = 0
        
    def update(self, setpoint, feedback):
        error = setpoint - feedback
        self.integral += error * self.dt
        derivative = (error - self.last_error) / self.dt
        
        output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative
        
        self.last_error = error
        return output

注意:实际工程中,一定要加积分限幅和输出限幅。我曾经见过一个案例,积分项累积到几万,输出直接饱和,执行机构卡死。加了限幅之后,至少不会出大问题。

4.6 本章知识体系

下面这张图,是我自己画的PID控制知识结构。你看一眼,就能把今天讲的内容串起来。

PID控制基础 比例控制 (P) u = Kp × e 直接响应偏差 积分控制 (I) u = Ki × ∫e dt 消除静差 微分控制 (D) u = Kd × de/dt 预判趋势 参数整定方法 试凑法 Ziegler-Nichols法 数字PID实现 位置式PID 增量式PID 核心:P看现在,I看过去,D看未来 三者配合,才能让套色系统稳、准、快

好了,这一章的内容就到这里。PID这东西,光看理论是学不会的。我建议你找个仿真平台,或者直接在设备上试试,把P、I、D三个参数分别调大调小,看看系统怎么反应。调上几次,你就有手感了。


公众号:蓝海资料掘金营,微信deep3321