- Settling Time: 0.002 seconds
- Percent Overshoot: <5% (adjust if needed)
Designing a discrete phase lag or phase lead compensator for specific transient response characteristics
46 views (last 30 days)
Show older comments
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))
% 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
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
0 Comments
Answers (1)
Altaïr
on 29 May 2025
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:
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
on 29 May 2025
Hi @Altaïr
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.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!