Break in and break away points on Root Locus

33 visualizzazioni (ultimi 30 giorni)
Hi,
I'm busy developing a controller, but for some reason my plot does not cut through the real axis and I'm not able to find the locations where the damping ratio is 0.59.
Herewith the code, block diagram and RLocus plot:
G=tf([0.151 0.1774], [1 0.739 0.921 0.25])
rlocus(G)
Any assistance will be appreciated.
Thanks
Niel

Risposta accettata

Sam Chak
Sam Chak il 18 Mag 2025
Previously in this post, it was shown that we must at least place a compensating pole at the origin so that the root locus intersects the desired damping ratio grid.
In fact, we can place additional compensating poles and zeros at appropriate locations in the s-plane so that the root locus takes on a cross-shaped form. This is ideal in root locus design because it allows us to theoretically vary the feedback gain parameter k from just above 0 to , achieving the desired damping ratio ζ and natural frequency without destabilizing the system.
This approach only works if the zeros and poles of the plant, , have no positive real parts and are not located near the imaginary axis of the s-plane. While this approach is effective, it is also necessary to ensure that the transfer function of the compensator, , is proper, which in turn limits the overall effectiveness of such method for other types of plants.
%% Plant
G = tf([0.151 0.1774], [1 0.739 0.921 0.25])
G = 0.151 s + 0.1774 -------------------------------- s^3 + 0.739 s^2 + 0.921 s + 0.25 Continuous-time transfer function.
% check if zero of G has positive real part
zG = zero(G)
zG = -1.1748
% check if poles of G have negative real parts
pG = pole(G)
pG =
-0.2107 + 0.8618i -0.2107 - 0.8618i -0.3176 + 0.0000i
%% Pole–Zero compensator
zeta= 0.59; % desired damping ratio
wn = 1; % desired natural frequency
zC = pG; % desired zeros of Compensator
pC = [zG, -2*zeta*wn, 0]; % desired poles of Compensator (minimally put a pole at the origin)
C = tf(zpk(zC, pC, 1)) % check if Compensator TF is proper
C = s^3 + 0.739 s^2 + 0.921 s + 0.25 -------------------------------- s^3 + 2.355 s^2 + 1.386 s Continuous-time transfer function.
%% Check if the Root Locus takes on a "Cross-shaped form"
figure
rlp = rlocusplot(C*G);
axis([-1.4, 0.2, -1.5, 1.5])
rlp.AxesStyle.GridVisible = "on";
rlp.AxesStyle.GridDampingSpec = zeta; % grid of desired damping ratio
rlp.AxesStyle.GridFrequencySpec = wn; % grid of desired natural frequency
%% Closed-loop system
% if root locus takes on a "Cross-shaped form", tune feedback gain until zeta = 0.59.
k = 6.62251655629139; % feedback gain
Gcl = feedback(k*C*G, 1) % actual closed-loop
Gcl = s^4 + 1.914 s^3 + 1.789 s^2 + 1.332 s + 0.2937 ---------------------------------------------------------------------- s^6 + 3.094 s^5 + 5.048 s^4 + 5.357 s^3 + 3.655 s^2 + 1.679 s + 0.2937 Continuous-time transfer function.
Gcl = minreal(Gcl) % perform pole-zero cancellation
Gcl = 1 ---------------- s^2 + 1.18 s + 1 Continuous-time transfer function.
[wn, zeta] = damp(Gcl) % check if desired wn and zeta are achieved
wn = 2×1
1.0000 1.0000
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
zeta = 2×1
0.5900 0.5900
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
Scl = stepinfo(Gcl)
Scl = struct with fields:
RiseTime: 1.8314 TransientTime: 5.9235 SettlingTime: 5.9235 SettlingMin: 0.9047 SettlingMax: 1.1007 Overshoot: 10.0686 Undershoot: 0 Peak: 1.1007 PeakTime: 3.9027
%% Simulation
figure
step(Gcl, 2*round(Scl.SettlingTime)), grid on
  2 Commenti
Niel
Niel il 18 Mag 2025
Thank you Sam this has been extremely helpful, much appreciated.

Accedi per commentare.

Più risposte (2)

Sulaymon Eshkabilov
Sulaymon Eshkabilov il 17 Mag 2025
IS it what you're looking for:
% Transfer Function:
SYS = tf([0.151 0.1774], [1 0.739 0.921 0.25]);
% Plot the RLocus:
figure
rlocus(SYS)
title('Root Locus of the Transfer Function')
grid on
% Compute and display the damping ratio and natural frequency:
[wn zeta] = damp(SYS);
fprintf('Natural Frequencies: %f \n', wn)
Natural Frequencies: 0.317596 Natural Frequencies: 0.887223 Natural Frequencies: 0.887223
fprintf('Damping Ratios: %f \n', zeta);
Damping Ratios: 1.000000 Damping Ratios: 0.237485 Damping Ratios: 0.237485

Sam Chak
Sam Chak il 18 Mag 2025
Modificato: Sam Chak il 18 Mag 2025
The reason is simply that the locus never intersects the 0.59 damping ratio grid line, regardless of how the feedback gain parameter is varied from 0⁺ to 6 (within the stable region). Looking at the blue and green root locus branches, it starts with a damping ratio of 0.237. As the feedback gain parameter is increased, the damping ratio continues to decrease, resulting in an oscillatory step response. This is certainly undesirable.
Since you have not mentioned any performance specifications other than the desired damping ratio of 0.59, if you use the graphical root locus design approach, minimally, you will need to add a pole at the origin to provide the flexibility in varying the feedback gain parameter until the locus intersects the 0.59 damping ratio grid line in the 2nd figure.
However, please note that the feedback gain will also intersect the red and green root locus branches (low damping ratio paths). Because these branches are closer to the imaginary axis, they can significantly influence the system's transient response in the step response (see the 3rd figure).
G = tf([0.151 0.1774], [1 0.739 0.921 0.25])
G = 0.151 s + 0.1774 -------------------------------- s^3 + 0.739 s^2 + 0.921 s + 0.25 Continuous-time transfer function.
%% Step 1: Analysis
damp(G)
Pole Damping Frequency Time Constant (rad/seconds) (seconds) -3.18e-01 1.00e+00 3.18e-01 3.15e+00 -2.11e-01 + 8.62e-01i 2.37e-01 8.87e-01 4.75e+00 -2.11e-01 - 8.62e-01i 2.37e-01 8.87e-01 4.75e+00
[r1, k1] = rlocus(G);
display('Poles near the imaginary axis'), display(r1(:,30))
Poles near the imaginary axis -0.0088 + 1.3423i -0.0088 - 1.3423i -0.7214 + 0.0000i
display('Corresponding feedback gain value'), display(k1(30))
Corresponding feedback gain value 5.9181
figure
rlp1 = rlocusplot(G);
zeta1 = [0.1 0.2 0.3 0.59 0.9];
wn1 = [ 1 2 3 4];
ylim([-4 4])
rlp1.AxesStyle.GridVisible = "on";
rlp1.AxesStyle.GridDampingSpec = zeta1;
rlp1.AxesStyle.GridFrequencySpec = wn1;
%% Step 2: Design – Pure graphical Root Locus method (no advanced control theory)
C = tf(1, [1 0]) % add a pole at the origin
C = 1 - s Continuous-time transfer function.
figure
rlp2 = rlocusplot(C*G);
zeta2 = [0.07, 0.59];
wn2 = 1;
axis([-2, 1, -1.5, 1.5])
rlp2.AxesStyle.GridVisible = "on";
rlp2.AxesStyle.GridDampingSpec = zeta2;
rlp2.AxesStyle.GridFrequencySpec = wn2;
[r2, k2] = rlocus(C*G);
display(r2(:,24))
-0.3429 + 0.4504i -0.0266 + 0.7505i -0.0266 - 0.7505i -0.3429 - 0.4504i
display(k2(24)) % approx. limit of k before Closed-loop becomes unstable
1.0188
k = 0.9205 % tune the feedback gain until you see the damping ratio of 0.59
k = 0.9205
Gcl = feedback(k*C*G, 1);
[wn zeta] = damp(Gcl)
wn = 4×1
0.5372 0.5372 0.7522 0.7522
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
zeta = 4×1
0.5900 0.5900 0.0698 0.0698
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
%% Step 3: Simulation
figure
Scl = stepinfo(Gcl)
Scl = struct with fields:
RiseTime: 2.1835 TransientTime: 65.5187 SettlingTime: 65.5187 SettlingMin: 0.6135 SettlingMax: 1.6276 Overshoot: 62.7612 Undershoot: 0 Peak: 1.6276 PeakTime: 6.1020
step(Gcl), grid on

Prodotti


Release

R2024b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by