4. PID参数整定方法(一):经验试凑法、Ziegler-Nichols整定法(临界比例度法)、Cohen-Coon整定法

参数整定这事儿,说白了就是给PID控制器找到三个最合适的数——Kp、Ki、Kd。我刚开始做电机控制那会儿,觉得这玩意儿不就是调三个旋钮嘛,拧到系统不抖不就行了?结果被现实狠狠教育了一顿。

后来我才明白,整定方法是有套路的。今天咱们就聊三种最常用的:经验试凑法、Ziegler-Nichols临界比例度法、还有Cohen-Coon整定法。每种方法都有自己的脾气,用对了地方,事半功倍。

核心观点:没有万能的方法,只有最合适的场景。经验试凑法适合现场快速调试,Z-N法适合有自振荡能力的系统,Cohen-Coon法专门对付大滞后对象。

PID参数整定方法体系 PID参数整定 经验试凑法 Ziegler-Nichols法 Cohen-Coon法 先调P → 再加I → 最后D 适用:现场快速调试 临界增益Ku + 临界周期Tu 适用:可自振荡系统 基于开环阶跃响应 适用:大滞后系统 💡 选择建议 快速调试→经验法 | 有自振荡能力→Z-N法 | 大滞后→Cohen-Coon法

4.1 经验试凑法——老工程师的直觉

经验试凑法,说白了就是靠手感。我见过很多老工程师,拧电位器的手比示波器还准。这方法不需要数学模型,不需要复杂的计算,全靠对系统响应的观察。

具体怎么操作?我一般按这个步骤来:

  1. 先把Ki和Kd置零,只保留比例项Kp。从一个小值开始,比如0.1或0.5,慢慢往上加。
  2. 观察系统响应:给一个阶跃输入,看输出波形。如果响应太慢,就加大Kp;如果出现持续振荡,就减小Kp。
  3. 找到临界状态:把Kp调到系统刚好出现等幅振荡的位置,记下这个值。然后退回来一点,留点余量。
  4. 加入积分项Ki:Ki的作用是消除稳态误差。从一个小值开始,比如Kp的1/10。加多了系统会振荡,加少了消除误差太慢。
  5. 最后加微分项Kd:Kd用来抑制超调,改善动态响应。从Kp的1/8到1/4开始试。注意,Kd对噪声非常敏感。

我的经验:调Kp的时候,我习惯用「二分法」——先给一个值,看响应;如果振荡就减半,如果太慢就加倍。这样来回几次,很快就能找到大概范围。比瞎拧快多了。

经验试凑法的优点很明显——简单、直观、不需要理论。但缺点也很致命:依赖个人经验,不同的人调出来的参数可能差很多。而且对于大滞后系统,这方法基本失效。

4.2 Ziegler-Nichols整定法——经典的临界比例度法

Z-N法,搞控制的没人不知道。1942年提出的方法,到现在还在用。它的核心思想是:找到系统的临界振荡点,然后用经验公式算出PID参数。

操作步骤是这样的:

  1. 把Ki和Kd置零,只保留Kp。
  2. 慢慢增大Kp,直到系统输出出现等幅振荡。记下此时的Kp值,称为临界增益Ku。
  3. 测量振荡周期,称为临界周期Tu。
  4. 根据下表查公式,算出Kp、Ki、Kd。
控制器类型 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

举个例子。我调一个直流电机速度环,慢慢加Kp到5.2的时候,电机转速开始等幅振荡,周期是0.8秒。那么Ku=5.2,Tu=0.8。如果要整定PID:

  • Kp = 0.6 × 5.2 = 3.12
  • Ki = 2 × 3.12 / 0.8 = 7.8
  • Kd = 3.12 × 0.8 / 8 = 0.312

注意:Z-N法算出来的参数,系统通常会有较大的超调(约25%~50%)。这不是bug,是Z-N法的设计目标就是追求快速响应,而不是小超调。如果对超调敏感,需要后续手动微调。

Z-N法的优点是有理论依据,可重复性好。但前提是系统必须能出现等幅振荡。有些系统不允许振荡(比如温度控制,振荡一次可能就烧了),或者根本振荡不起来,那Z-N法就没法用。

4.3 Cohen-Coon整定法——大滞后的克星

Cohen-Coon法,很多人不太熟悉。它专门针对大滞后系统——就是那种你给了控制信号,半天才有反应的系统。比如温度控制、管道压力控制等。

这个方法基于开环阶跃响应,不需要让系统振荡。具体步骤:

  1. 把系统切换到开环模式(断开反馈)。
  2. 给一个阶跃输入,记录输出响应曲线。
  3. 从曲线上提取三个参数:
    • L:纯滞后时间(从输入变化到输出开始变化的时间)
    • T:时间常数(输出从0变化到63.2%所需的时间)
    • K:开环增益(稳态输出变化量 / 输入变化量)
  4. 代入Cohen-Coon公式计算PID参数。

公式长这样(以PID为例):

Kp = (1.35 / K) × (T / L) × (1 + 0.18 × L / T)
Ki = Kp × (0.54 × L + 0.33 × T) / (T + 0.33 × L)²
Kd = Kp × (0.27 × T - 0.36 × L) / (0.54 × L + 0.33 × T)

看着复杂,其实用Excel算一下就行。我当年第一次用这个方法,是在一个工业炉温控制项目上。那个系统滞后时间L有30多秒,用经验法调了一整天都没搞定。后来用Cohen-Coon法,一次算出来,上机就跑通了。

关键点:Cohen-Coon法对滞后时间L的测量精度非常敏感。L测不准,参数全偏。我建议用示波器或数据采集卡记录响应曲线,在电脑上放大看,比肉眼估准确得多。

4.4 三种方法的对比与选择

我把三种方法的特点整理了一下,方便你对照选择:

方法 适用场景 优点 缺点
经验试凑法 现场快速调试、简单系统 简单直观,无需理论 依赖经验,不可重复
Z-N法 可自振荡的系统 有理论依据,可重复 超调大,需后续微调
Cohen-Coon法 大滞后系统 不开环振荡,针对性强 公式复杂,对L敏感

我个人习惯是:先用经验法快速试一下,如果系统响应还行,就微调收工。如果经验法搞不定,就上Z-N法。如果系统滞后明显,直接上Cohen-Coon法。

避坑指南:我曾经在一个项目上,用Z-N法算完参数直接上机,结果系统振荡得跟打摆子一样。后来发现是执行器饱和了——Z-N法算出来的Kp太大,导致积分饱和。所以记住:算出来的参数只是起点,不是终点。一定要在实际系统上验证和微调。

好了,三种方法都讲完了。下一种方法——基于模型的自整定,咱们后面再聊。先把这三种方法练熟,应付90%的现场问题足够了。