How do I use a root locus to find a value of K such that the damping ratio of dominant closed loop poles is a specified value?

538 ビュー (過去 30 日間)
How do I use a root locus to find a value of K such that the damping ratio of dominant closed loop poles is 0.7071?
Using the following TF and associated root locus.
Many thanks

採用された回答

Paul
Paul 2023 年 3 月 9 日
Click on branch of the root locus and drag along the branch. The values in the datatip, which include the damping ratio, will correspond to the datamarker point on the locus.
  2 件のコメント
Luke McDevitt
Luke McDevitt 2023 年 4 月 26 日
How would you find that programmatically?
Paul
Paul 2023 年 5 月 1 日
編集済み: Paul 2023 年 5 月 1 日
Here's my attempt. Can't say I've thorougly tested it, but maybe it's a start. I know for sure it will break down if the desired damping ratio is 1.
Transfer function for testing and its root locus
h = tf([2 5 1],[1 2 3]);
s = tf('s');
h = h/(s+4)/(s+5);
figure
rlocus(h);
hold on
Desired damping ratios
zetad = [0.2, 0.6, 0.99];
Loop through the zetad, compute the gains and corresponding root locations, which are added to plot as filled, black dots
for ii = 1:numel(zetad)
[r,k{ii}] = zetagain(h,zetad(ii));
plot(real(r),imag(r),'k.','MarkerSize',15);
end
Warning: The numerator or denominator of this transfer function has complex-valued coefficients.
Warning: The numerator or denominator of this transfer function has complex-valued coefficients.
Warning: The numerator or denominator of this transfer function has complex-valued coefficients.
sgrid(zetad,1:5:25)
k
k = 1×3 cell array
{[214.6052]} {[15.2534 0.3113]} {[0.4787 9.2402]}
Cases with no solution
[r,k] = zetagain(tf(1,[1 1]),0.2)
Warning: The numerator or denominator of this transfer function has complex-valued coefficients.
r = 0×1 empty double column vector k = 1×0 empty double row vector
[r,k] = zetagain(tf(1,[1 2*.5*1 1]),0.7)
Warning: The numerator or denominator of this transfer function has complex-valued coefficients.
r = 0×1 empty double column vector k = 1×0 empty double row vector
Other corner cases would be where one or more branches of the root locus either lie exactly on a line of constant zetad or if the line of constant zetad is a root locus asymptote.
function [r,k] = zetagain(h,zetad)
% compute the rotation angle
theta = asin(zetad);
m = numel(h.num{:})-1;
n = numel(h.den{:})-1;
h1 = tf(h.num{:}.*exp(-1j*theta).^(m:-1:0),h.den{:}.*exp(-1j*theta).^(n:-1:0));
% gain margin in rotated complex plane
s = allmargin(h1);
k = s.GainMargin;
% roots at values of k
r = rlocus(h,k);
r = r(:);
% eliminate extraneous roots that aren't at the the desired zeta. use 0.02 as a tolerance,
% maybe this should be an input parameter. maybe this test could could be made more robust.
zeta = sin(atan2(-real(r),abs(imag(r))));
r(abs(zeta-zetad)>0.02) = [];
end

サインインしてコメントする。

その他の回答 (1 件)

Sam Chak
Sam Chak 2023 年 4 月 26 日
編集済み: Sam Chak 2023 年 4 月 26 日
The steps are generally described in the following documentation, as well as in most undergrad control textbooks.
Demo:
% Plant
Gp = tf(32.5, [1 5 40])
Gp = 32.5 -------------- s^2 + 5 s + 40 Continuous-time transfer function.
% rlocus(Gp), sgrid
From the Root Locus of uncompensated system Gp with the s-plane grid of constant damping factors, it is clear that no matter how we move the 'square' data marker (■) to track the gain and damping values, it cannot achieve the desired 0.7071 damping ratio. Thus, a feedback controller is needed. In this example, a PID controller is designed and its gains are tuned.
% PID Controller
kp = -0.5066;
ki = 0.8703;
kd = 0.38;
Tf = 0.7071;
Gc = pid(kp, ki, kd, Tf)
Gc = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = -0.507, Ki = 0.87, Kd = 0.38, Tf = 0.707 Continuous-time PIDF controller in parallel form.
rlocus(Gc*Gp), sgrid
From the Root Locus of the compensated system Gc*Gp, we clearly have more rooms to move the data marker (■). Now, if we zoom into the locus and move the data marker (■) until the desired 0.707 damping ratio is observed, then the corresponding gain is found to be .

カテゴリ

Help Center および File ExchangeClassical Control Design についてさらに検索

タグ

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by