M-file:
% File Name: example4.m % Description: Comparison of Root-Loci for variety of controllers % including P, PD, PI, PID, lead, and lag. % % clear matlab memory and close all figures clear all; close all; % define motor transfer function, G L = 1e-3; R = 1; J = 5e-5; B = 1e-4; Ke = 0.1; Kt = 0.1; numG = [Kt/(L*J)]; denG = [1 (R/L + B/J) (R*B + Ke*Kt)/(L*J) 0]; G = tf(numG, denG); % P-control numD = [1]; denD = [1]; D = tf(numD, denD); subplot(6,2,1); rlocus(series(D,G)); title('P-Control') cltf = feedback(series(D,G), [1], -1); hold on; plot(real(roots(cltf.den{:})), imag(roots(cltf.den{:})), 'rx'); hold off; subplot(6,2,2); step(cltf); title('P-Control w/k_P = 1'); % PD-control numD = [1 1000]; denD = [1]; D = tf(numD, denD); subplot(6,2,3); rlocus(series(D,G)); title('PD-Control') cltf = feedback(series(D,G), [1], -1); hold on; plot(real(roots(cltf.den{:})), imag(roots(cltf.den{:})), 'rx'); hold off; subplot(6,2,4); step(cltf); title('PD-Control w/k_D = 1, k_P/k_D = 1000'); % PI-control numD = [1 100]; denD = [1 0]; D = tf(numD, denD); subplot(6,2,5); rlocus(series(D,G)); title('PI-Control') cltf = feedback(series(D,G), [1], -1); hold on; plot(real(roots(cltf.den{:})), imag(roots(cltf.den{:})), 'rx'); hold off; subplot(6,2,6); step(cltf); title('PI-Control w/k_P = 1, k_I/k_P = 100'); % PID-control numD = conv([1 200+200j], [1 200-200j]); denD = [1 0]; D = tf(numD, denD); subplot(6,2,7); rlocus(series(D,G)); title('PID-Control') cltf = feedback(series(D,G), [1], -1); hold on; plot(real(roots(cltf.den{:})), imag(roots(cltf.den{:})), 'rx'); hold off; subplot(6,2,8); step(cltf); title('PID-Control w/k_D = 1, z_1 = 200-j200, z_2 = 200+j200'); % Lead-compensation numD = [1 400]; denD = [1 1000]; D = tf(numD, denD); subplot(6,2,9); rlocus(series(D,G)); title('Lead Compensation') cltf = feedback(series(D,G), [1], -1); hold on; plot(real(roots(cltf.den{:})), imag(roots(cltf.den{:})), 'rx'); hold off; subplot(6,2,10); step(cltf); title('Lead Compensation w/k = 1, z = 400, p = 1000'); % Lag-compensation numD = [1 1000]; denD = [1 400]; D = tf(numD, denD); subplot(6,2,11); rlocus(series(D,G)); title('Lag Compensation') cltf = feedback(series(D,G), [1], -1); hold on; plot(real(roots(cltf.den{:})), imag(roots(cltf.den{:})), 'rx'); hold off; subplot(6,2,12); step(cltf); title('Lag Compensation w/k = 1, z = 1000, p = 400');
Root-Locus Plots and Step Responses Generated: