PID not achieving required results

조회 수: 6 (최근 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 CenterFile Exchange에서 Classical Control Design에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by