PID调参实战:Ziegler–Nichols(Z-N)搜索方案全解析
——一篇面向工程师的“拿来即用”方法论
文章目录
- @[toc]
- 前言
- 一、Z-N 方法 10 秒速览
- 二、开环阶跃法:画一条切线就能算
- 1. 实验步骤
- 2. 代码 3 行出结果
- 3. 注意坑
- 三、闭环临界振荡法:把系统“摇”起来
- 1. 实验步骤
- 2. 一键计算脚本
- 3. 注意坑
- 四、仿真验证:Simulink 5 分钟搭好
- 五、现场落地 3 条经验
- 六、小结
文章目录
- @[toc]
- 前言
- 一、Z-N 方法 10 秒速览
- 二、开环阶跃法:画一条切线就能算
- 1. 实验步骤
- 2. 代码 3 行出结果
- 3. 注意坑
- 三、闭环临界振荡法:把系统“摇”起来
- 1. 实验步骤
- 2. 一键计算脚本
- 3. 注意坑
- 四、仿真验证:Simulink 5 分钟搭好
- 五、现场落地 3 条经验
- 六、小结
前言
在工业现场,90% 以上的控制回路仍在用 PID。
“道理我都懂,可参数怎么整?”——如果你也踩过试凑法的坑,那么 1942 年诞生的 Ziegler-Nichols(简称 Z-N)搜索法绝对是值得你收藏的一把瑞士军刀:无需高精度模型,只要一次实验 + 一张查表,就能把 Kp、Ki、Kd 拉到“能用”甚至“好用”的区间。
本文用“博客体”把 Z-N 两套经典方案(开环阶跃法 & 闭环临界振荡法)拆成 5 个动作,并给出 Python 自动化脚本与 Simulink 避坑清单,助你 30 min 内跑完一轮参数自整定。
一、Z-N 方法 10 秒速览
| 方法 | 实验场景 | 关键测量量 | 查表得参数 | 典型适用 |
|---|---|---|---|---|
| ① 开环阶跃法(Reaction-Curve) | 开环,切手动给阶跃 | 纯滞后 L、时间常数 T | 表 1 | 温度、液位等自衡对象 |
| ② 闭环临界振荡法(Ultimate-Gain) | 闭环,只留 P | 临界增益 Kcr、临界周期 Pcr | 表 2 | 压力、流量等快过程 |
二、开环阶跃法:画一条切线就能算
1. 实验步骤
- 切手动,输出阶跃 Δu(通常 5%~10%)。
- 记录过程变量曲线,找到最大斜率点作切线 → 得到
- L:切线与起始值交点的时间滞后
- T:切线与终值交点的时间常数
- 代入表 1 计算 PID 初值。

表 1 开环 Z-N 经验表
| 控制器 | Kp | Ti | Td |
|---|---|---|---|
| P | T/L | — | — |
| PI | 0.9 T/L | L/0.3 | — |
| PID | 1.2 T/L | 2L | 0.5L |
例:某温度通道 L=18 s,T=120 s,则 PID 参数
Kp = 1.2×120/18 = 8.0,Ti = 36 s,Td = 9 s
Ki = Kp/Ti = 0.22,Kd = Kp×Td = 72
2. 代码 3 行出结果
def zn_open(L, T, mode='PID'):if mode=='PID':return {'Kp':1.2*T/L, 'Ti':2*L, 'Td':0.5*L}
print(zn_open(18,120))
# {'Kp': 8.0, 'Ti': 36, 'Td': 9}
3. 注意坑
- 对象必须自衡(积分环节不行)。
- 阶跃幅度太小 → 信噪比差;太大 → 影响生产,可用“二位式”伪阶跃替代。
三、闭环临界振荡法:把系统“摇”起来
1. 实验步骤
- 先去掉 I、D,只留 P。
- 逐步加大 Kp,直到出现等幅振荡(Ultimate),记录
- Kcr:此时的比例增益
- Pcr:振荡周期(峰-峰时间)
- 代入表 2。
表 2 闭环 Z-N 经验表
| 控制器 | Kp | Ti | Td |
|---|---|---|---|
| P | 0.5 Kcr | — | — |
| PI | 0.45 Kcr | Pcr/1.2 | — |
| PID | 0.6 Kcr | 0.5 Pcr | 0.125 Pcr |
例:Kcr = 10,Pcr = 30 s → PID 参数
Kp = 6,Ti = 15 s,Td = 3.75 s
2. 一键计算脚本
def zn_close(Kcr, Pcr, mode='PID'):if mode=='PID':return {'Kp':0.6*Kcr, 'Ti':0.5*Pcr, 'Td':0.125*Pcr}
print(zn_close(10,30))
# {'Kp': 6.0, 'Ti': 15.0, 'Td': 3.75}
3. 注意坑
- 找不到等幅?→ 用 relay 自激振荡,安全且不漂移设定值。
- 对噪声敏感 → 加一阶低通或“微分先行”结构。
四、仿真验证:Simulink 5 分钟搭好
- 拖一个“Step”+“Transfer Fcn”+“PID Controller”+“Scope”。
- 把上面算出的参数填进去,跑 200 s。
- 看超调量、调节时间。若超调大 → 把 Kp 往下打 0.8 折;若响应慢 → Ti 减小 0.8 折。
五、现场落地 3 条经验
- 先做开环还是闭环?
慢系统(分钟级)用开环法,快系统(秒级)用闭环法,避免等待。 - “Z-N 值”≠“最终值”
Z-N 以 1/4 衰减比为目标,偏激进;对超调敏感场合,整体 ×0.6~0.8 再细调。 - 安全限幅
实验阶段把输出限幅、积分抗饱和全打开,防止“一次整定,全厂跳车”。
六、小结
Z-N 搜索法就像“自动对焦”:先粗调再微移,30 min 就能让 PID 从“裸奔”到“能跑”。
记住两张表、两套公式,外加一条 relay 安全振荡小技巧,下次现场再被问“参数怎么整”,你可以直接把这篇博客甩给他。
Happy Tuning!
