一、摘要
由于PID算法结构简单,容易理解,所以电子工程师用的最多的控制算法就是PID算法。对于简单的被控对象,使用单闭环PID即可达到良好的控制效果。对于稍微复杂的控制对象,使用串级PID也能够实现良好的控制。由此可见,PID算法能够适用于大部分装置的控制。虽然PID算法只有一条公式,但是想发挥出良好的作用,就必须准确的整定参数。一般整定PID参数使用试凑法,这个方法虽然能在大部分情况下能够实现我们想要的效果,但是需要反复调节,效率很低。但其实是存在简单高效PID参数整定方法,叫Ziegler-Nichols法,它只需要测量出系统几个关键的参数,就可以计算出PID算法的具体参数,不需要盲目的进行调试了。
二、Ziegler-Nichols法
首先我们来看看离散式PID的公式:
u(k)是我们最终的输出,e(k)是我们控制系统当前时刻的误差,e(k-1)是上一时刻的误差,Kp是比例系数,T是控制周期,Ti是积分常数,Td是微分常数。
早在1942年,Ziegler与Nichols给出了著名的PID控制器整定的经验公式,为过程控制提出了一种切实可行的控制器整定方法,后来称为Ziegler-Nichols整定公式。这种方法与其改进的形式至今仍用于实际的过程控制。
假设已经得到了系统近似的带有时间延迟的一阶模型参数K(终值)、L(延迟)、和T(上升时间),根据相似三角形的原理就可以立即得出斜率a=KL/T,这样就可以根据表1设计出P、PI和PID控制器,设计方法很简单直观。根据此算法可以编写一个MATLAB函数Ziegler,由该函数可以直接设计出系统的PID控制器。
<center>图1-带有时间延迟的一阶模型 </center>
<center>表1-Ziegler-Nichols整定法 </center>
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,2,3,分别对应P、PI、PID控制器;vars是一个矩阵,当里面存储的变量个数不一样时,对应不同的模式,当变量个数为3个时,由频域响应整定PID参数,当变量个数为4个时,由阶跃响应整定PID参数,当变量个数为5个时,使用基于频域响应的改进版Ziegler-Nichols法整定PID参数。
三、Ziegler-Nichols整定法的实际应用
当我们在实际应用的时候。例如要控制电机的转动角度,这时候我们就可以结合编码器来进行PID的参数整定。首先组装好硬件,软件上也配置好PID调试助手用于画图,电机开环控制。首先打开单片机的定时器,频率1000Hz。定时器每毫秒发一次电机的角度到上位机。然后电机给最大的PWM值(相当于给电机一个阶跃响应),1秒后关闭电机。在获取到电机的阶跃响应曲线之后,将获得的一千个数据导入到MATLAB计算K、L、T三个参数,然后使用上面的程序计算相应的PID参数。
四、Chien-Hrones-Reswick参数整定法
在实际应用中,传统的Ziegler-Nichols算法有各种各样的变形,所谓的Chien-Hrones-Reswick(CHR)算法就是其中的一种改进。表2中给出来PID控制器设计的经验公式,其中还允许带有较大的阻尼,以确保“没有超调量的快速响应”,该指标在表中标识为“有0%超调量”,该表中还允许设计出所谓有“20%超调量的最快速响应”,在表中标识为“有20%超调量”。和传统的Ziegler-Nichols整定算法相比,在CHR算法中直接使用了时间常数T。
<center>表2-Chien-Hrones-Reswick整定法 </center>
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);
Key=1,2,3,分别对应P、PI、PID控制器;vars=[K L T N ov],ov为0对应没有超调量的控制,ov为1对应有20%超调量的控制。