control-system/Assignment 6 - Tuning PID/tugas6_ZN1.m

112 lines
2.5 KiB
Mathematica
Raw Permalink Normal View History

2022-10-03 14:10:02 +07:00
clc
clear all
close all
% Get the tangent line
J = 0.01;
b = 0.1;
K = 0.01;
R = 1;
L = 0.5;
s = tf('s');
num_motor = [K];
den_motor = [J*L J*R+b*L R*b+K*K];
motor = tf(num_motor,den_motor);
% =========== mencari tangenline dan menetukan nilai T dan Y ================
tic
timeVal=tic;
[y,t] = step(motor);
h = mean(diff(t));
dy = gradient(y, h); % Numerical Derivative
[~,idx] = max(dy); % Index Of Maximum
b = [t([idx-1,idx+1]) ones(2,1)] \ y([idx-1,idx+1]); % Regression Line Around Maximum Derivative
tv = [-b(2)/b(1); (1-b(2))/b(1)]; % Independent Variable Range For Tangent Line Plot
f = [tv ones(2,1)] * b; % Calculate Tangent Line
L = tv(1);
T = tv(2);
figure(1)
plot(t, y)
hold on
plot(tv, f, '-r') % Tangent Line
plot(t(idx), y(idx), '.r')
title('Mencari tangent line plant ')% Maximum Vertical
hold off
grid
% ================ menentukan control PID sistem ===================
% Deklarasi variable control
control = tf(zeros(1,1,5));
sys=tf(zeros(1,1,5));
complete=tf(zeros(1,1,5));
% sistem dengan P
kp = T/L
control(:,:,1)= tf([0 kp 0],[1 0]);
% sistem dengan PI
kp = 0.9*T/L
Ti= L/0.3;
ki = kp/Ti
control(:,:,2)= tf([0 kp ki],[1 0]);
% sistem dengan PID
kp = 1.2*T/L
Ti= 2*L;
ki = kp/Ti
Td = 0.5*L;
kd = kp*Td
control(:,:,3)= tf([kd kp ki],[1 0]);
toc
%menentukan transfer function sistem
for x = 1:3
sys(:,:,x) = motor*control(:,:,x);
complete(:,:,x) = feedback(sys(:,:,x),1);
end
for x = 1:3
%Step response
figure(2)
hold on
step(complete(:,:,x));
title('Step Response sistem')
legend('kendali P', 'kendali PI','kendali PID')
hold off
% Mencari karakteristik gelombang
tf_info(x)= stepinfo(complete(:,:,x));
% mencari steady state error
[y,t]=step(complete(:,:,x));
sserror(x)=(1-y(end));
% Impulse Repsonse
figure(3)
hold on
impulse(complete(:,:,x));
title('Impulse Response sistem')
legend('kendali P', 'kendali PI','kendali PID')
hold off
% Ramp Repsonse
figure(4)
hold on
step(complete(:,:,x)/s);
title('Ramp Response sistem')
legend('kendali P', 'kendali PI','kendali PID')
hold off
figure(5)
hold on
step(complete(:,:,x)/(s*s));
title('Acceleration Response sistem')
legend('kendali P', 'kendali PI','kendali PID')
hold off
end