Deadbeat control Space-State System

71 visualizaciones (últimos 30 días)
Pablo Graale
Pablo Graale el 31 de Mayo de 2023
Respondida: Sam Chak el 26 de Nov. de 2025 a las 9:51
Hi, I'm trying to test a deadbeat control (I'm a learner so please explain if you find conceptual issues as well :) ). To do that I found the gain with the acker command by setting all desired rooths in z=0. I believe this controller is used only in discrete systems. I just used it thanks to the Zero-order holder in Simulink.
Is that fine? Or is there any other fancier way to get the answer of the controller?

Respuestas (2)

Altaïr
Altaïr el 11 de Feb. de 2025
The idea of placing poles at the origin of the z-plane for designing a deadbeat controller is indeed correct. It's important to remember that the origin of the z-plane corresponds to the point at negative infinity along the x-axis in the s-plane.
Therefore, it's essential to calculate the discrete open-loop system formed by the continuous plant and zero-order hold first, and then perform pole placement in the discrete domain. To convert the continuous system into a discrete one the c2d function can be used.
Additionally, the acker function, which uses Ackerman's formula for pole placement, has been replaced by the place command in more recent MATLAB versions. Here's and example snippet and model:
% Define the continuous-time system (example)
A_cont = [0 1; -2 -3];
B_cont = [0 1; 1 0];
C_cont = [1 0; 0 1];
D_cont = [0 0; 0 0];
% Define the sampling time
Ts = 0.1; % Sampling time in seconds
% Convert the continuous-time system to a discrete-time system
sys_cont = ss(A_cont, B_cont, C_cont, D_cont);
sys_disc = c2d(sys_cont, Ts, 'zoh');
% Extract the discrete-time matrices
A_disc = sys_disc.A;
B_disc = sys_disc.B;
% Define the desired poles at the origin of the z-plane
desired_poles = [0, 0];
% Compute the state feedback gain using the place function
K = place(A_disc, B_disc, desired_poles);
% Display the feedback gain
disp('State feedback gain K:');
State feedback gain K:
disp(K);
-0.9500 8.5583 9.9834 0.4750
% Closed-loop system matrices
A_cl = A_disc - B_disc * K;
sys_cl = ss(A_cl, B_disc, C_cont, D_cont, Ts);
% Plot the step response
figure;
step(sys_cl);
title('Step Response of the Closed-Loop System');
xlabel('Time (seconds)');
ylabel('Amplitude');
grid on;
To know more about the functions used in the above snippet kindly refer the following pages:
  1 comentario
Andrei Markovits
Andrei Markovits el 26 de Nov. de 2025 a las 5:51
Exelent!
Natural inteligence is superior to AI

Iniciar sesión para comentar.


Sam Chak
Sam Chak el 26 de Nov. de 2025 a las 9:51
A deadbeat control system refers to the design of a controller that enables the system to produce a response resembling a deadbeat step response. Naturally, we expect the closed-loop system to exhibit deadbeat characteristics, specifically characterized by Hurwitz polynomials that yield deadbeat responses. Deadbeat control systems always outperform critically damped systems of the same order with identical natural frequencies in terms of settling time.
% 2nd-order deadbeat system
G2 = tf(1, [1, 1.65, 1]) % compared to tf(1, [1, 2, 1])
G2 = 1 ---------------- s^2 + 1.65 s + 1 Continuous-time transfer function.
% 3rd-order deadbeat system
G3 = tf(1, [1, 1.95, 2.25, 1]) % compared to tf(1, [1, 3, 3, 1])
G3 = 1 --------------------------- s^3 + 1.95 s^2 + 2.25 s + 1 Continuous-time transfer function.
% 4th-order deadbeat system
G4 = tf(1, [1, 2.20, 3.50, 2.80, 1]) % compared to tf(1, [1, 4, 6, 4, 1])
G4 = 1 ----------------------------------- s^4 + 2.2 s^3 + 3.5 s^2 + 2.8 s + 1 Continuous-time transfer function.
% plot results
figure
step(G2, G3, G4), grid on
legend({'$G_{2}(s)$', '$G_{3}(s)$', '$G_{4}(s)$'}, 'interpreter', 'latex', 'location', 'east', 'fontsize', 12)
Control Design Example:
% A critically-damped 2nd-order state-space (with all measurable states)
sys = ss([0, 1; -1, -2], [0; 1], eye(2), 0)
sys = A = x1 x2 x1 0 1 x2 -1 -2 B = u1 x1 0 x2 1 C = x1 x2 y1 1 0 y2 0 1 D = u1 y1 0 y2 0 Continuous-time state-space model.
% desired deadbeat poles (eigenvalues)
p2 = eig(G2) % the designer needs to know how a deadbeat transfer function looks like
p2 =
-0.8250 + 0.5651i -0.8250 - 0.5651i
% engage pole-placement
K = place(sys.A, sys.B, p2)
K = 1×2
0 -0.3500
<mw-icon class=""></mw-icon>
<mw-icon class=""></mw-icon>
% compensated system
csys= ss(sys.A - sys.B*K, [0; 1], eye(2), 0)
csys = A = x1 x2 x1 0 1 x2 -1 -1.65 B = u1 x1 0 x2 1 C = x1 x2 y1 1 0 y2 0 1 D = u1 y1 0 y2 0 Continuous-time state-space model.
% check transfer function
G = tf(csys)
G = From input to output... 1 1: ---------------- s^2 + 1.65 s + 1 s 2: ---------------- s^2 + 1.65 s + 1 Continuous-time transfer function.
% plot results
figure
step(sys, csys), grid on
legend('sys (critically-damped)', 'csys (deadbeat)', 'location', 'east', 'fontsize', 12)

Productos


Versión

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by