Designing a discrete phase lag or phase lead compensator for specific transient response characteristics

46 views (last 30 days)
For a university assignment, we are designing and building a compensator for a buck-boost converter. I have worked out a sufficient transfer function for the plant that resembles the plant accurately enough. I have followed the design steps in my textbook (Digital control system analysis and design by L.Phillips) but the methods shown in the book does not show how to calculate the zero and pole location to get a specific response. The compensated step response does show a lot of improvement but the settling time I need is about 2ms. Is there a better way to approach this design where I can calculate the zero and pole based on the characterstics I need? We were specifically told we are not allowed to used tuning methods and most MATLAB built in designers.
s = tf('s');
% Parmeters
V_in = 30;
D = 0.5;
C = 33e-6;
r_C = 1.65;
R_L = 128;
L = 1100e-6;
% Auxilary equations
G_do = V_in/(1-D);
W_z1 = 1/(r_C*C);
W_z2 = (((1-D)^2)*R_L)/(D*L);
W_0 = (1-D)/sqrt(L*C);
Q = ((1-D)*R_L)/(sqrt(L/C));
% Transfer function
G_dv = (G_do)*(((1+s/W_z1)*(1-s/W_z2))/(1+s/(Q*W_0)+s^2/W_0^2))
G_dv = -1.202e13 s^2 + 4.786e17 s + 1.284e22 ------------------------------------- 3.108e13 s^2 + 7.359e15 s + 2.141e20 Continuous-time transfer function.
% Step response
step(0.5*G_dv);
stepinfo(G_dv);
margin(G_dv);
T = 9e-6;
gz = c2d(G_dv, T);
a0 = 1;
z = tf('z');
WW1 = 2.75e3 % at 230 deg
WW1 = 2750
Gain = 52.9; % at 230 deg
G_jWw1 = 10^(Gain/20);
WWO = 0.1*WW1;
WWP = (0.1*WW1)/(a0*G_jWw1);
K_d = a0*((WWP*(WWO+2/T))/(WWO*(WWP+2/T)));
Z0 = ((2/T)-WWO)/((2/T)+WWO);
Zp = ((2/T)-WWP)/((2/T)+WWP);
D_Z = K_d*(z-Z0)/(z-Zp);
compensatedTF = D_Z*gz;
step(0.5*compensatedTF)
hold on
xlim([0 20])
ylim([0 40])
hold off

Answers (1)

Altaïr
Altaïr on 29 May 2025
Hey @Wynand,
The Control System Designer app could be really useful for this task. It lets you design controllers interactively using Bode plots, root locus, and Nichols charts, allowing you to easily add, adjust, or remove poles, zeros, and gains. You can check out more details here:
To get started, run this command to open the app with your system:
controlSystemDesigner(G_dv)
Steps to design your controller:
1. Set design requirements: Right-click on the plot → Design Requirements → New. Configure:
  • Settling Time: 0.002 seconds
  • Percent Overshoot: <5% (adjust if needed)
2. Add a lead compensator: Right-click → Add Pole/Zero → Lead
3. Tune the compensator: Drag poles/zeros on the root locus or Bode plot until the requirements are satisfied.
The final compensator transfer function will be visible in the Controllers and Fixed Blocks panel.
  1 Comment
Sam Chak
Sam Chak on 29 May 2025
The 3 steps are indeed helpful for novice control designers (typically students) to get started. However, particularly in Step 3, it does not explain in which specific direction the designer should drag the pole(s) and zero(s) of the compensator.
Most students become frustrated because, although a powerful design tool is available, they cannot use it effectively. They tend to prefer that the design tool "smartly" places the pole(s) and zero(s) once the performance requirements are specified in Step 1, arguing that control design theory should be integrated directly into the tool rather than requiring the designer to manually calculate the pole(s) and zero(s) on paper and then place them in the tool to check whether the requirements are satisfied.

Sign in to comment.

Products


Release

R2024b

Community Treasure Hunt

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

Start Hunting!