% Given parameters
J = 600000;
B = 20000;
% a. Evaluate the closed-loop transfer function
s = tf('s');
K = sym('K', 'real');
G = 1 / (J * s^2 + B * s + K);
% b. State-space representation for K = 1
A = [0 1; -K/J -B/J];
B = [0; 1/J];
C = [1 0];
D = 0;
sys = ss(A, B, C, D);
% c. Calculate poles for stability
poles = eig(A);
max_K_stable = max(real(poles));
% d. Calculate maximum K for Mp < 10%
zeta = -log(0.1) / sqrt(pi^2 + log(0.1)^2);
max_K_Mp = B / (2 * J * zeta);
% e. Calculate K for Tr < 80 sec
Tr = 80;
omega_n = 2.2 / Tr;
K_Tr = J * omega_n^2 - B;
% f. Plot step responses and find overshoot and rise time
K_values = [200, 400, 1000, 2000];
figure;
for i = 1:length(K_values)
K = K_values(i);
sys = ss(A, B, C, D);
sys_cl = feedback(K * sys, 1);
[y, t] = step(sys_cl);
subplot(2, 2, i);
plot(t, y);
title(['K = ' num2str(K)]);
overshoot = max(y) - 1;
rise_time = max(t(y >= 0.9)) - min(t(y >= 0.9));
disp(['For K = ' num2str(K) ', Overshoot = ' num2str(overshoot) ', Rise Time = ' num2str(rise_time)]);
end
% g. Plot poles and zeros for each K
figure;
for i = 1:length(K_values)
K = K_values(i);
sys = ss(A, B, C, D);
sys_cl = feedback(K * sys, 1);
subplot(2, 2, i);
pzmap(sys_cl);
title(['Poles and Zeros for K = ' num2str(K)]);
end
% h. Steady-state error for each K
ss_errors = 1 ./ (1 + K_values);
disp('Steady-state errors:');
disp(ss_errors);
% i. Simulink model with added pole
% Create a Simulink model to analyze the effect of an additional pole.
% j. Discussion for proximity of higher-order pole
% k. Simulink model with added zero
% Create a Simulink model to analyze the effect of an additional zero.
% l. Discussion for the proximity of a zero to the dominant second-order pole pair