How would I determine the gain required for a settling time of 1 second for the system G=(s+4)/((​s+1)(s^2+6​s+13))?

3 views (last 30 days)
For the following equation:
G=(s+4)/((s+1)(s^2+6s+13))
How would I determin the gain required for the system the have a settling time of 1 second?
I have the code set (see below) to confirm the theory, but the hand calculation is messing me up.
clear
close all
clc
a = input('input a in form [... ... ...]');
b = input('input b in form [... ... ...]');
c = input('input c in form [... ... ...]');
sys = zpk(a,b,c)
step(sys)
Thank-you for your time and help.

Accepted Answer

Sam Chak
Sam Chak on 11 Nov 2023
I think no gain can make the closed-loop system to settle at 1 second. The fastest is around 1.74 sec with the gain 16.89. You need a high-order controller to achieve that.
s = tf('s');
% Plant
Gp = (s + 4)/((s + 1)*(s^2 + 6*s + 13))
Gp = s + 4 ----------------------- s^3 + 7 s^2 + 19 s + 13 Continuous-time transfer function.
% Controller
Gc = (425*s^3 + 2977*s^2 + 8080*s + 5528)/(s^4 + 27*s^3 + 260*s^2 + 681*s)
Gc = 425 s^3 + 2977 s^2 + 8080 s + 5528 ---------------------------------- s^4 + 27 s^3 + 260 s^2 + 681 s Continuous-time transfer function.
% Closed-loop system
Gcl = feedback(Gc*Gp, 1)
Gcl = 425 s^4 + 4677 s^3 + 19988 s^2 + 37848 s + 22112 --------------------------------------------------------------------------- s^7 + 34 s^6 + 468 s^5 + 3452 s^4 + 14735 s^3 + 36307 s^2 + 46701 s + 22112 Continuous-time transfer function.
% Check Settling Time
S = stepinfo(Gcl); Ts = S.SettlingTime
Ts = 0.9991
% Plot response
step(Gcl, 3), grid on
  2 Comments
Kez
Kez on 11 Nov 2023
Hi sam,
thank-you for the help.
May I ask how you determined the equation for the high order controller?
Sam Chak
Sam Chak on 11 Nov 2023
Hi @Kez
The 7 parameters in the controller are tuned simultaneously. However, I believe the current Control System Toolbox lacks a one-click solution when the 1-second requirement is specified. You can explore the optimization-based graphical approach. Nevertheless, I find the following method more suitable since there is only one design parameter (0 dB gain crossover frequency) to be tuned:
s = tf('s');
% Plant
Gp = (s + 4)/((s + 1)*(s^2 + 6*s + 13))
Gp = s + 4 ----------------------- s^3 + 7 s^2 + 19 s + 13 Continuous-time transfer function.
% Controller
w = 6.35; % <-- tune this 0 dB gain crossover frequency
Gc = pidtune(Gp, 'pidf', w)
Gc = 1 s Kp + Ki * --- + Kd * -------- s Tf*s+1 with Kp = 31.4, Ki = 39.9, Kd = 4.87, Tf = 0.00138 Continuous-time PIDF controller in parallel form.
% Closed-loop system
Gcl = feedback(Gc*Gp, 1)
Gcl = 3569 s^3 + 3.711e04 s^2 + 1.203e05 s + 1.158e05 ----------------------------------------------------------------- s^5 + 732.7 s^4 + 8668 s^3 + 5.092e04 s^2 + 1.297e05 s + 1.158e05 Continuous-time transfer function.
% Check Settling Time
S = stepinfo(Gcl); Ts = S.SettlingTime
Ts = 0.9519
% Plot response
step(Gcl, 3), grid on

Sign in to comment.

More Answers (0)

Products


Release

R2023b

Community Treasure Hunt

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

Start Hunting!