PID not achieving required results

4 ビュー (過去 30 日間)
Desislava Petkova
Desislava Petkova 2022 年 5 月 19 日
コメント済み: Desislava Petkova 2022 年 5 月 20 日
Hi all, a newbie here.
I have been trying to achieve a PID control with rise time of 0.5 seconds and settling time of less than 2 seconds, but this doesn't seem to be possible ... am i doing something wrong or do i just need to add another component to the system to improve the parameters. I have tried both Matlab and Simulink, but no joy.
Help please!
s = tf('s');
P = 0.047/(s^3+3.88*s^2+0.26*s+0.07);
step(P)
pidTuner(P,'pid')
Error using matlab.internal.lang.capability.Capability.require
This functionality is not available on remote platforms.

Error in matlab.internal.webwindow (line 161)
Capability.require(Capability.WebWindow);

Error in matlab.ui.container.internal.AppContainer/buildWindow (line 2054)
window = matlab.internal.webwindow(url, this.getOpenPort());

Error in matlab.ui.container.internal.AppContainer/set.Visible (line 689)
this.Window = this.buildWindow(windowBounds);

Error in pidtool.PIDToolDesktop/open (line 138)
this.TPComponent.Visible = true;

Error in pidtool.PIDToolDesktop (line 100)
this.open();

Error in pidtool (line 112)
eval(cmd);

Error in pidTuner (line 91)
eval(cmd);

採用された回答

Sam Chak
Sam Chak 2022 年 5 月 20 日
編集済み: Sam Chak 2022 年 5 月 20 日
The Plant (a 3rd-order system) settles at around 123 seconds.
s = tf('s');
Gp = 0.047/(s^3 + 3.88*s^2 + 0.26*s + 0.07); % Plant (original open loop system)
figure(1)
step(Gp)
grid on
PID controller:
K = 1.11155;
Gpid = K*(1 + 36*s + (18*s)^2)/s % PID Controller
Gcl1 = feedback(Gpid*Gp, 1);
Gcl1 = minreal(Gcl1) % Closed-loop Control System #1
figure(2)
step(Gcl1, 3)
S1 = stepinfo(Gcl1)
grid on
hold on
S1 =
struct with fields:
RiseTime: 0.379837466412825
SettlingTime: 1.99996802024607
SettlingMin: 0.96521666875026
SettlingMax: 1.20603245716344
Overshoot: 20.6032457163443
Undershoot: 0
Peak: 1.20603245716344
PeakTime: 0.880851721438949
High-order Compensator:
a1 = 14.528;
a2 = 165.347073378685;
a3 = 1090.83668370638;
b1 = 98834.1688799017;
b2 = 580988.793504546;
b3 = 845755.825300342;
G1 = (b1*s^2 + b2*s + b3)/(s^3 + a1*s^2 + a2*s + a3);
c1 = 847380.47568033;
d1 = 14.528;
d2 = 165.34707337868;
d3 = 1090.8366837063;
G2 = c1/(s^3 + d1*s^2 + d2*s + d3);
Gcom = G2/(G1*Gp - G2*Gp + 1);
Gcom = minreal(Gcom, 1e-6) % 6th-order Compensation Filter
Gcl2 = feedback(Gcom*Gp, 1);
Gcl2 = minreal(Gcl2) % Closed-loop Control System #2
step(Gcl2, 3)
S2 = stepinfo(Gcl2)
hold off
S2 =
struct with fields:
RiseTime: 0.498556717717106
SettlingTime: 1.05004587168131
SettlingMin: 0.904167446381624
SettlingMax: 1.01000955014111
Overshoot: 1.00095447432156
Undershoot: 0
Peak: 1.01000955014111
PeakTime: 1.7860121485132
Both proposed controllers satisfy the performance requirements (Rise time ≤ 0.5 sec; Settling time ≤ 2 sec). However, the control system under the high-order compensator (6th-order compensation filter) converges nearly 1 second faster and there is no significant overshoot.
  1 件のコメント
Desislava Petkova
Desislava Petkova 2022 年 5 月 20 日
Thank you so much for your help!
Best Regards,
Desislava

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

その他の回答 (0 件)

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by