📄 pidp96.m
字号:
%可以运行, 但结果图好像不对
%Expert PID Controller
clear all;
close all;
ts=0.001;
sys=tf(5.235e005, [1, 87.35, 1.047e004, 0]);
dsys=c2d(sys, ts, 'z'); %怎么Help出来的没有z, 只有一个zoh- 零阶保持器
[num, den] = tfdata(dsys, 'v'); %以降序得到离散系统的分子分母
u_1=0.0; u_2=0.0; u_3=0.0;
y_1=0; y_2=0; y_3=0;
x=[0,0,0]';
x2_1=0;
kp=0.6; ki=0.03; kd=0.01; %PID参数
error_1=0;
for k=1:1:500
time(k)=k*ts;
rin(k)=1.0; %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.40;
elseif abs(x(1)) > 0.20
u(k) = 0.12;
elseif abs(x(1)) > 0.01
u(k) = 0.10;
end
if x(1) * x(2) > 0 | (x(2) == 0) %Rule2
if abs(x(1)) >= 0.05
u(k) = u_1 + 2*kp*x(1);
else
u(k) = u_1 + 0.4*kp*x(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 +2*kp*error_1
else
u(k) = u_1 + 0.6*kp*error_1;
end
end
if abs(x(1)) <= 0.001 %Rule5: Integration separation PI control
u(k) = 0.5*x(1) + 0.010*x(3);
end
%Restricting the output of controller
if u(k) >= 10
u(k) = 10;
end
if u(k) <= -10
u(k) = -10;
end
%Linear model
yout(k) = -den(2)*y_1 - den(3)*y_2 - den(4)*y_3 + num(2)*u_1 + num(3)*u_2 + num(4)*u_3;
error(k) = rin(k) - yout(k);
%-------------Return of PID parameters------------------
u_3 = u_2; u_2 = u_1; u_1 = u(k);
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; %Calculatin D
x(3) = x(3) + error(k)*ts; %Calculation I
errro_1 = error(k);
end
figure(1);
plot(time, rin, 'b', time, yout, 'r');
xlabel('time(s)'); ylabel('rin, yout');
figure(2);
plot(time, rin-yout, 'r');
xlabel('time(s)'); ylabel('errro');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -