Deadbeat control Space-State System

72 ビュー (過去 30 日間)
Pablo Graale
Pablo Graale 2023 年 5 月 31 日
回答済み: Sam Chak 2025 年 11 月 26 日 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?

回答 (2 件)

Altaïr
Altaïr 2025 年 2 月 11 日
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 件のコメント
Andrei Markovits
Andrei Markovits 2025 年 11 月 26 日 5:51
Exelent!
Natural inteligence is superior to AI

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


Sam Chak
Sam Chak 2025 年 11 月 26 日 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)

製品


リリース

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by