Deadbeat control Space-State System

47 views (last 30 days)
Pablo Graale
Pablo Graale on 31 May 2023
Answered: Ashok on 11 Feb 2025 at 9:39
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?

Answers (1)

Ashok
Ashok on 11 Feb 2025 at 9:39
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:');
disp(K);
% 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:

Categories

Find more on Get Started with Control System Toolbox in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!