专家PID控制
一、简介
专家PID控制,专家PID控制不同于常规意义下的PID控制,是专家经验与PID控制算法的结合,是基于PID控制器的智能化优化。
专家PID控制就是基于被控对象和控制规律的各种知识,而不需要知道被控对象的精确模型,利用专家经验来设计PID参数。
我们假设当前为第k采样(离散化),当前偏差为e(k),同样前一采样时刻的偏差为e(k-1),而前两个采样时刻的偏差为e(k-1),则可以得到两次的偏差增量为:
设定偏差的一个极大值,记为Mmax;设定一个偏差较大的中间值,记为Mmid;设定一个偏差的极小值,记为Mmin。根据以上偏差、偏差增量以及偏差极值的设定,我们分析如下:
(1)如果|e(k)|>Mmax (规则一)
这种情况说明偏差的绝对值已经很大了,不论偏差变化趋势如何,都应该考虑控制器的输入应按最大(或最小)输出,以达到迅速调整偏差的效果,使偏差绝对值以最大的速度减小。t同时避免超调,此时相当于开环控制。
(2)当e(k)*∆e(k)>0或者∆e(k)=0时 (规则二)
这种情况说明偏差在朝向偏差绝对值增大的方向变化,或者偏差为某一固定值,此时我们再判断偏差的绝对值与偏差的中间值Mmid之间的关系。
(2.1)此时如果|e(k)|>Mmid
说明偏差也较大,可考虑由控制器实施较强的控制作用,以达到扭转偏差绝对值向减小的方向变化,并迅速减小偏差的绝对值。
(2.2)此时如果|e(k)|≤Mmid
说明尽管偏差是向绝对值增大的方向变化,但是偏差绝对值本身并不是很大,可以考虑控制器实施一般的控制作用,只需要扭转偏差的变化趋势,使其向偏差绝对值减小的方向变化即可。
(3)当e(k)*∆e(k)<0且∆e(k)*∆e(k-1)>0或者e(k)=0时
说明偏差的绝对值向减小的方向变化,或者已经达到平衡状态,此时保持控制器输出不变即可。
(4)当e(k)*∆e(k)<0且∆e(k)*∆e(k-1)<0时
说明偏差处于极限状态。
(4.1)如果此时偏差的绝对值较大,|e(k)|>Mmid
可以考虑实施较强控制作用。
(4.2)如果此时偏差绝对值较小,|e(k)|<Mmid
可以考虑实施较弱控制作用。
其中,k1为增益放大系数,k1取大于1的值;k2为增益抑制系数,取大于0而小于1的值。
(5)如果|e(k)|<Mmin
这种情况实际上说明偏差绝对值很小,这种偏差有可能是系统静差引起的,此时必须要引入积分作用,减小系统的稳态误差。
二、题目要求
三、实验代码
%Expert PID Controller
clear all;
close all;
ts=0.001;
sys=tf(133,[1,25,0]); %Plant
dsys=c2d(sys,ts,'z');
[num,den]=tfdata(dsys,'v');
%u_1=0;u_2=0;u_3=0;
%y_1=0;y_2=0;y_3=0;
u_1=0;u_2=0;
y_1=0;y_2=0;
x=[0,0,0]';
x2_1=0;
kp=7;
ki=22.4;
kd=1.33;
error_1=0;
for k=1:1:500
time(k)=k*ts;
r(k)=1.0; %Tracing Step Signal
u(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller
%Expert control rule
if abs(x(1))>0.9 %Rule1:Unclosed control rule
u(k)=16;
elseif abs(x(1))>0.7
u(k)=5.7;
elseif abs(x(1))>0.5
u(k)=3.5;
elseif abs(x(1))>0.40
u(k)=0.4;
elseif abs(x(1))>0.20
u(k)=0.2;
elseif abs(x(1))>0.01
u(k)=0.05;
end
if x(1)*x(2)>0|(x(2)==0) %Rule2
if abs(x(1))>=0.05
u(k)=u_1+1.6*(kp*x(2)+ki*x(1)+kd*(x(2)-x2_1));
else
u(k)=u_1+(kp*x(2)+ki*x(1)+kd*(x(2)-x2_1));
end
end
if (x(1)*x(2)<0&x(2)*x2_1>0)|(x(1)==0) %Rule3
u(k)=u(k);
end
if x(1)*x(2)<0&x(2)*x2_1<0 %Rule4
if abs(x(1))>=0.05
u(k)=u_1+1.6*kp*error_1;
else
u(k)=u_1+0.2*kp*error_1;
end
end
if abs(x(1))<=0.005 %Rule5:Integration separation PI control
% u(k)=0.9*x(1)+0.110*x(3);
u(k)=u_1+kp*x(2)+ki*x(1);
end
%Restricting the output of controller
if u(k)>=10
u(k)=10;
end
if u(k)<=-10
u(k)=-10;
end
%Linear model
%y(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;
y(k)=-den(2)*y_1-den(3)*y_2+num(1)*u(k)+num(2)*u_1+num(3)*u_2;
error(k)=r(k)-y(k);
%----------Return of parameters------------%
%u_3=u_2;u_2=u_1;u_1=u(k);
u_2=u_1;u_1=u(k);
%y_3=y_2;y_2=y_1;y_1=y(k);
y_2=y_1;y_1=y(k);
x(1)=error(k); % Calculating P
x2_1=x(2);
x(2)=(error(k)-error_1)/ts; % Calculating D
x(3)=x(3)+error(k)*ts; % Calculating I
error_1=error(k);
end
figure(1);
plot(time,r,'b',time,y,'r');
xlabel('time(s)');ylabel('r,y');
figure(2);
plot(time,r-y,'r');
xlabel('time(s)');ylabel('error');
四、实验结果
说明:发现性能一般般吧,略超调,震荡得比较厉害,专家PID需要专家的经验(我不太行),仅供参考。
对比:PID tune