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