How to get the output of a controller from MATLAB codes not simulink

11 次查看(过去 30 天)
In simulink, it is easy to get the control output (or input to the actuator) by connecting a scope to the controller output. How do you get the output of the controller in MATLAB codes? I need the output to apply to another system as well as the plant infront of the controller.
Thanks.

采纳的回答

Sam Chak
Sam Chak 2022-9-16
Since a sample plant is not provided, we will use a 1st-order plant as an example:
Gp = tf(1, [1 2])
Gp = 1 ----- s + 2 Continuous-time transfer function.
step(Gp, 5)
If we want to improve the settling time at 1 second and to eliminate the steady-state error, we can try:
kp = 5;
ki = 10;
Gc = pid(kp, ki)
Gc = 1 Kp + Ki * --- s with Kp = 5, Ki = 10 Continuous-time PI controller in parallel form.
The closed-loop system is given by
Gcl = feedback(Gc*Gp, 1)
Gcl = 5 s + 10 -------------- s^2 + 7 s + 10 Continuous-time transfer function.
step(Gcl, 5)
And the output of the PI controller, is given by
Gu = feedback(Gc, Gp)
Gu = 5 s^2 + 20 s + 20 ----------------- s^2 + 7 s + 10 Continuous-time transfer function.
step(Gu, 5)
  1 个评论
Sam Chak
Sam Chak 2022-9-16
For the controller output, or in s-domain, we know the compensator transfer function,
... or .
To find the closed-loop transfer function relating the controller output to the input
we start from , and we need to find the error :
.
From the plant transfer function , we know that
.
Substituiting it back to , we get
.
Similarly, substituiting it back to , we get
Separating at one side and on another side
.
Rearranging that yields
This implies that is on the feedback loop, and thus, it can be obtained with the following syntax:
Gu = feedback(Gc, Gp)

请先登录,再进行评论。

更多回答(2 个)

Paul
Paul 2022-9-17
I suggest using interconnection functions to build a single system model that has the control input to the plant as one of the outputs from the overall system model
One approach, for example:
Define the plant
sysp = tf(1,[1 0],'InputName','u','OutputName','y');
Define the controller
sysc = tf(1,1,'InputName','e','OutputName','u');
Unitfy feedback to form the closed loop system. Specify the outputs from the closed loop system as the output and input to the plant
sysclosed = connect(sysc,sysp,sumblk('e = r - y'),'r',{'y' 'u'});
Now we can plot the step (or any other response)
step(sysclosed)
Also, sysclosed can then be connected to other systems to build a large model if desired.

ojonugwa adukwu
ojonugwa adukwu 2022-9-16
Oh really? Many thanks.
But why is it the transfer function (tf) of Gu and not GC? Because for simulink, it is the transfer function of the controller.
Many thanks
  1 个评论
Sam Chak
Sam Chak 2022-9-16
You are welcome, @ojonugwa adukwu. If you find the solution in MATLAB code is helpful, please consider accepting ✔ and voting 👍 the Answer. Thanks!
I have added an explanation in the comment under my Answer. It's almost the same argument of why use to get the system output , but not the plant itself.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Stability Analysis 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by