%PID
clear all
%采样时间
ts=1;
%K模糊控制表
dkp=[
6,6,6,5,4,4,4,3,3,2,0,0,0;
6,6,6,5,4,3,3,3,3,2,0,-1,-1;
6,6,6,5,4,3,3,3,3,2,0,-1,-2;
5,5,5,5,4,3,3,2,2,0,-1,-1,-2;
4,4,4,4,4,3,3,2,0,-1,-2,-2,-2;
4,4,4,3,3,2,2,0,-1,-1,-3,-3,-3;
4,4,4,3,3,2,0,-1,-2,-3,-3,-3,-3;
3,3,3,2,2,0,-1,-1,-2,-3,-3,-3,-3;
3,3,3,2,0,-1,-2,-2,-2,-3,-3,-3,-3;
3,2,2,0,-1,-1,-3,-3,-3,-3,-3,-4,-4;
3,2,0,-1,-2,-3,-3,-3,-3,-3,-3,-4,-6;
2,2,0,-1,-3,-3,-3,-3,-3,-4,-4,-4,-5;
0,0,0,-1,-3,-3,-3,-3,-3,-4,-6,-5,-6
];
dki=[-6,-5,-6,-4,-3,-3,-3,-3,-2,-1,0,0,0;
-5,-5,-5,-4,-3,-3,-3,-3,-2,-1,0,0,0;
-6,-5,-6,-4,-3,-3,-2,-2,-2,-1,0,0,0;
-5,-4,-4,-3,-3,-3,-2,-1,-1,0,2,2,2;
-6,-4,-3,-3,-2,-2,-2,-1,0,2,3,3,3;
-4,-4,-3,-3,-2,-1,-1,0,2,2,3,3,3;
-3,-3,-3,-3,-2,-1,0,2,3,3,4,4,4;
-3,-3,-3,-1,-1,0,2,2,3,3,4,5,5;
-3,-3,-2,-1,0,2,3,3,3,3,4,5,6;
-1,-1,-1,0,2,2,3,3,3,4,5,5,6;
0,0,0,2,3,3,3,3,4,5,6,6,6;
0,0,0,2,3,3,3,3,4,5,6,6,6;
0,0,0,2,3,3,4,4,4,5,6,6,6
];
dkd=[3,0,-2,-3,-6,-5,-6,-5,-6,-4,-3,0,3;
3,0,-2,-3,-5,-4,-4,-4,-4,-3,-3,0,2;
3,0,-2,-3,-6,-4,-3,-3,-3,-3,-2,-1,0;
2,0,-2,-3,-4,-4,-3,-3,-3,-3,-2,-1,0;
0,-1,-2,-3,-3,-3,-3,-3,-2,-2,-2,-1,0;
0,-1,-2,-3,-3,-3,-3,-3,-2,-2,-2,-1,0;
0,-1,-2,-2,-2,-2,-2,-2,-2,-2,-2,-1,0;
0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0;
0,0,0,0,0,0,0,0,0,0,0,0,0;
2,1,-1,0,2,2,2,2,2,2,2,2,2;
6,1,-2,0,3,3,3,3,3,3,3,4,6;
6,2,1,2,3,3,3,3,3,3,3,4,6;
6,5,4,4,4,4,4,3,3,3,3,4,6
];%KD查询表
sys=tf([1],[100,1],'inputdelay',10);
dsys=c2d(sys,ts,'zoh');
[num,den]=tfdata(dsys,'v');
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;u_6=0;u_7=0;u_8=0;u_9=0;u_10=0;
y_1=0;y_2=0;y_3=0;
error_1=0;error_2=0;
ei=0;te=0;tec=0;KPU=0.1;KPI=0.02;KPD=1.2;
for k=1:1:1000
time(k)=k*ts;
%离散化对象
yout(k)=-den(2)*y_1+num(2)*u_10;
rin(k)=15;
error(k)=rin(k)-yout(k);
ei=ei+error(k)*ts;
derror(k)=error(k)-error_1;
KE=1.2;KEC=6;kp=0.91035;
ki=0.026;kd=9.1;
te=fix(KE*error(k));
tec=fix(KEC*derror(k));
if te>=7
te=6;
end
if tec>=7
tec=6;
end
kp=kp+KPU*dkp(te+7,tec+7);
ki=ki+KPI*dki(te+7,tec+7);
kd=kd+KPD*dkd(te+7,tec+7);
u(k)=kp*error(k)+ki*ei+kd*derror(k);
%控制器的限制输出
if u(k)>=110
u(k)=110;
end
if u(k)<=-110
u(k)=-110;
end
u_10=u_9;u_9=u_8;u_8=u_7;u_7=u_6;u_6=u_5;u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
error2=error_1;error_1=error(k);
end
plot(time,rin,'b',time,yout,'r');
xlabel('time(s)');ylabel('rin,yout');
如有疑问,请留言