State-Space Matrix Closed Loop System C Matrix issue

61 次查看(过去 30 天)
Hi, I'm trying to obtain the same output I get with the following commands on Matlab on Simulink.
In Matlab I have the following
% Sistema
A = [-1.15 -0.155 -0.005;1 0 0;0 1 0];
B = [1; 0; 0];
C=[0 0 0.3];
%Espacio de Estados
sys=ss(A,B,C,0);
%% Ecuación deseada
Ps= [1 2 1.5 0.5];
Ed=roots(Ps)
k2 = acker(A,B,Ed)
%% Lazo cerrado
Af=A-B*k2;
%% Calculando los autovalores del sistema en lazo cerrado
eig(Af);
%Condicion inicial
x0=[1 0 1];
%Sistema con realimentación en espacio de estados
slc=ss(Af,B,C,0);
%Respuesta del sistema
figure
subplot(211)
initial(sys,x0)
title('Lazo Abierto (CI)');
subplot(212)
initial(slc,x0)
title('Lazo Cerrado (CI)')
So I obtain the open loop and closed loop responses. In Simulink I've got the open loop answer by inserting a unit step followed by a derivative block.
But here comes the problem, the C matrix is [0 0 0.3] but as I have to introduce the gain, then the dimension of the matrixes on the State Space block have to match. I don't know how to set it up, in order to get the same answer I get from Matlab.
Any idea on how to get that block diagram on Simulink?

采纳的回答

Sam Chak
Sam Chak 2023-5-30
编辑:Sam Chak 2023-5-30
The output of the state-space system is . Your Ackermann's controller is full state-feedback, not output-feedback.
Thus, the equivalent Simulink model would look something like the configuration shown in Figure 2.
  • The state-space slc requires modifications in the C and D matrices.
  • Set the Multiplication: Matrix(K*u) in the Gain block K2.
  • This Reference input is essentially zero, not a Step signal (because it is not shown in your equation)
% Sistema
A = [-1.15 -0.155 -0.005;
1 0 0;
0 1 0];
B = [1;
0;
0];
C = [0 0 0.3];
% Espacio de Estados
sys = ss(A, B, C, 0);
% step(sys)
Ps = [1 2 1.5 0.5];
Ed = roots(Ps);
k2 = acker(A,B,Ed)
k2 = 1×3
0.8500 1.3450 0.4950
% Lazo cerrado
Af = A - B*k2;
% Calculando los autovalores del sistema en lazo cerrado
eig(Af);
% Condicion inicial
x0 = [1 0 1];
% Sistema con realimentación en espacio de estados
slc = ss(Af, B, C, 0);
%Respuesta del sistema
figure
subplot(211)
initial(sys, x0), grid on
title('Lazo Abierto (CI)');
subplot(212)
initial(slc, x0), grid on
title('Lazo Cerrado (CI)')
Figure 1: Results from MATLAB.
Figure 2: Simulink model.
Figure 3: Results as seen in Simulink Scope.

更多回答(2 个)

Askic V
Askic V 2023-5-30
This is how I would simulate similar system in simulink.
First of all this is the simulation in Matlab script:
% Transfer function G = 1/((s+1)(s+2)(s+3))
num = 1;
den = conv([1 1],conv([1 2],[1 3]));
% convert to state space
[A,B,C,D] = tf2ss(num, den);
% State space model
sys = ss(A,B,C,D);
% Gain to place closed loop poles at -3,-4,-5
K = acker(A,B,[-3; -4; -5])
K = 1×3
6 36 54
% Close loop matrix A
Af = A-B*K;
%eigenvalues of Af are desired pole locations
eig(Af);
%Initial condition
x0 = [1 0 2];
% State space model of closed loop system
slc = ss(Af,B,C,D);
% Plot responses
figure
subplot(211)
initial(sys, x0)
title('Open loop');
grid on
subplot(212)
initial(slc, x0)
title('Closed loop')
grid on
in order
In order to make Simulink simulation, you need to have state feednack controller, i.e. each gain in the K vector should mulitpy corresponding state variable. However, from the state space Simulink model, you have only output. In my example C vector is [0 0 1], so state variables can be chosen as: x3 = y, x2 = dy/dt, x1 = d2y/dt.
The simulation would look like this:
Please note that in the ss model of the closed loop system, i used Af = A-B*K matrix instead of A.
The outputs are very similar though not the same. I guess it is because of the numerical calculations of derivative blocks in the state feedback loop. To make something more realistic, you should design observer for this system that will have one input (y) and three oututs or output 3x1 (state variables x), and then use gain vector K to construct state feedback loop.
I hope I was able to, at least, give you some useful hints how to proceed further.

Pablo Graale
Pablo Graale 2023-5-31
Thank you! It has been very helpful and clarifying to learn from you!

类别

Help CenterFile Exchange 中查找有关 General Applications 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by