mirror of
				https://github.com/gabrielkheisa/control-system.git
				synced 2025-11-04 06:19:20 +00:00 
			
		
		
		
	add zn1 method matlab
This commit is contained in:
		
							
								
								
									
										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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user