diff --git a/Assignment 6 - Tuning PID/tugas6_ZN1.m b/Assignment 6 - Tuning PID/tugas6_ZN1.m new file mode 100644 index 0000000..62d09b7 --- /dev/null +++ b/Assignment 6 - Tuning PID/tugas6_ZN1.m @@ -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