mirror of
https://github.com/gabrielkheisa/control-system.git
synced 2024-11-23 20:03:22 +07:00
add zn1 method matlab
This commit is contained in:
parent
fa26663ede
commit
e10894e4b4
111
Assignment 6 - Tuning PID/tugas6_ZN1.m
Normal file
111
Assignment 6 - Tuning PID/tugas6_ZN1.m
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
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
|
Loading…
Reference in New Issue
Block a user