Ziegler-Nichols法在PID参数整定中的应用
Ziegler-Nichols法在PID参数整定中的应用
PID控制算法是工业自动化领域应用最广泛的控制算法之一。虽然PID算法结构简单,但要发挥其最佳性能,就需要准确整定其参数。本文将介绍一种简单高效的PID参数整定方法——Ziegler-Nichols法,并通过MATLAB代码示例展示其具体应用。
一、PID算法概述
PID算法因其结构简单、易于理解而被广泛应用于各种控制场景。无论是简单的单闭环控制还是复杂的串级控制,PID算法都能提供良好的控制效果。然而,要使PID算法发挥最佳性能,就必须准确整定其参数。传统的试凑法虽然在很多情况下都能达到预期效果,但需要反复调试,效率较低。Ziegler-Nichols法提供了一种更系统、更高效的方法来整定PID参数。
二、Ziegler-Nichols整定法
首先回顾离散式PID的公式:
$$
u(k) = K_p e(k) + \frac{K_p}{T_i} \sum_{i=0}^{k} e(i) T + K_p T_d \frac{e(k) - e(k-1)}{T}
$$
其中,$u(k)$是最终输出,$e(k)$是当前时刻的误差,$e(k-1)$是上一时刻的误差,$K_p$是比例系数,$T$是控制周期,$T_i$是积分常数,$T_d$是微分常数。
Ziegler-Nichols法最早由Ziegler与Nichols在1942年提出,是一种基于系统模型参数的PID控制器整定方法。该方法通过测量系统的关键参数(如增益$K$、延迟$L$和上升时间$T$),可以计算出PID控制器的具体参数,避免了盲目调试。
MATLAB实现
根据Ziegler-Nichols整定法,可以编写一个MATLAB函数ziegler
来设计PID控制器:
function [Gc,Kp,Ti,Td]=ziegler(key,vars)
% 输入两个参数
% Ziegler-Nichols整定法,内置三种模式,由频域响应整定,由阶跃响应整定,还有改进版本,一般使用阶跃响应整定PID参数。算法来源于控制系统计算机辅助设计P322
% key:范围1~3,分别对应P、PI、PID控制器
% vars:这是一个向量,不同的模式有不同的长度,使用阶跃响应整定PID参数时,有4个参数,分别是K(终值)、L(延迟)、T(上升时间)、N(微分滤波器除数,一般取10)
switch length(vars)
case 3 % 由频域响应整定
K=vars(1);Tc=vars(2);N=vars(3);
if key==1 % P控制器
Kp=0.5*K;
Ti=inf;
Td=0;
elseif key==2 % PI控制器
Kp=0.4*K;
Ti=0.8*Tc;
Td=0;
elseif key==3 % PID控制器
Kp=0.6*K;
Ti=0.5*Tc;
Td=0.12*Tc;
end
case 4 % 由阶跃响应整定
K=vars(1);L=vars(2);T=vars(3);N=vars(4);
a=K*L/T;
if key==1 % P控制器
Kp=1/a;
Ti=inf;
Td=0;
elseif key==2 % PI控制器
Kp=0.9/a;
Ti=3*L;
Td=0;
elseif key==3 % PID控制器
Kp=1.2/a;
Ti=2*L;
Td=L/2;
end
case 5 % 改进的Ziegler-Nichols法,参考P324,前提是看懂奈奎斯特图
K=vars(1);Tc=vars(2);rb=vars(3);N=vars(5);
pb=pi*vars(4)/180;
Kp=K*rb*cos(pb);
if key==2
Ti=-Tc/(2*pi*tan(pb));
Td=0;
elseif key==3
Ti=Tc*(1+sin(pb))/(pi*cos(pb));
Td=Ti/4;
end
end
Gc=pidstd(Kp,Ti,Td,N); % pidstd具体看参考文档还有书的P315,改这里可以改输出形式
其中,key
参数用于选择控制器类型(1为P控制器,2为PI控制器,3为PID控制器),vars
参数是一个向量,根据其长度不同,可以选择不同的整定模式。
三、实际应用案例
在实际应用中,例如控制电机的转动角度时,可以结合编码器进行PID参数整定。具体步骤如下:
- 组装好硬件并配置PID调试助手用于画图。
- 设置单片机定时器频率为1000Hz,每毫秒发送一次电机角度到上位机。
- 给电机最大PWM值(相当于阶跃响应),1秒后关闭电机。
- 获取电机的阶跃响应曲线数据,并导入MATLAB计算K、L、T三个参数。
- 使用上述程序计算相应的PID参数。
四、Chien-Hrones-Reswick参数整定法
Chien-Hrones-Reswick(CHR)算法是Ziegler-Nichols算法的一种改进版本,允许设计出具有不同超调量的控制响应。表2给出了PID控制器设计的经验公式:
对应的MATLAB实现如下:
function [Gc,Kp,Ti,Td]=chrpid(key,vars)
% vars=[K L T N ov],ov为0对应没有超调量的控制,ov为1对应有20%超调量的控制
K=vars(1);L=vars(2);T=vars(3);N=vars(4);
ov=vars(5)+1;
a=K*L/T;
KK=[0.3,0.35,1.2,0.6,1,0.5; % 有0%超调量的参数
0.7,0.6,1,0.95,1.4,0.47]; % 有20%超调量的参数
if key==1 % P控制器
Kp=KK(ov,1)/a;
Ti=inf;
Td=0;
elseif key==2 % PI控制器
Kp=KK(ov,2)/a;
Ti=KK(ov,3)*T;
Td=0;
else % PID控制器
Kp=KK(ov,4)/a;
Ti=KK(ov,5)*T;
Td=KK(ov,6)*L;
end
Gc=pidstd(Kp,Ti,Td,N);
其中,vars
参数包括系统模型参数K、L、T以及微分滤波器除数N,ov
参数用于选择是否允许超调(0表示不允许,1表示允许20%超调)。