自控第三章matlab,刘金锟 先进PID控制及MATLAB仿真第3章专家PID学习心得及疑问

附:我的专家控制器

%Expert PID Controller

clear all;

close all;

ts=0.001;

sys=tf(158.91e6,[0.7596 133.728 1.405e4 6.237e5 1.015e7 9.015e6]);

dsys=c2d(sys,ts,'z');

[num,den]=tfdata(dsys,'v');

u_1=0.0;u_2=0.0;u_3=0.0;u_4=0.0;u_5=0.0;

y_1=0;y_2=0;y_3=0;y_4=0;y_5=0;

x=[0,0,0]';

x2_1=0;

kp=1.44;

ki=1.28;

kd=0.008;

error_1=0;

for k=1:1:5000

time(k)=k*ts;

rin(k)=1;                   %Tracing Jieyue Signal

u(k)=kp*x(1)+kd*x(2)+ki*x(3); %PID Controller

%Expert control rule

if abs(x(1))>0.8      %Rule1:Unclosed control firstly

u(k)=0.45;

elseif abs(x(1))>0.40

u(k)=0.30;

elseif abs(x(1))>0.20

u(k)=0.2;

elseif abs(x(1))>0.10

u(k)=0.03;

elseif abs(x(1))<=0.05 %Rule5:Integration separation PI control

u(k)=0.25*x(1)+1.75*x(3);

elseif x(1)*x(2)>0|(x(2)==0)       %Rule2

if abs(x(1))>=0.1

u(k)=u_1+1.5*[kp*x(2)+ki*x(1)];

else

u(k)=u_1+0.6*[kp*x(2)+ki*x(1)];

end

elseif x(1)*x(2)<0&x(2)*x2_1<0   %Rule4

if abs(x(1))>=0.1

u(k)=u_1+2*kp*error_1;

else

u(k)=u_1+0.4*kp*error_1;

end

end

if (x(1)*x(2)<0&x(2)*x2_1>0)|(x(1)==0)   %Rule3

u(k)=u(k);

end

%Restricting the output of controller

if u(k)>=2

u(k)=2;

end

if u(k)<=0

u(k)=0;

end

%Linear model

yout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3-den(5)*y_4-den(6)*y_5+num(2)*u_1+num(3)*u_2+num(4)*u_3+num(5)*u_4+num(6)*u_5;

error(k)=rin(k)-yout(k);

%----------Return of PID parameters------------%

u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k);

y_5=y_4;y_4=y_3;y_3=y_2;y_2=y_1;y_1=yout(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,rin,'b',time,yout,'r');

xlabel('time(s)');ylabel('rin,yout');

grid on;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值