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

조회 수: 51 (최근 30일)
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

답변 (1개)

Altaïr
Altaïr 2025년 5월 29일
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
Sam Chak
Sam Chak 2025년 5월 29일
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.

댓글을 달려면 로그인하십시오.

제품


릴리스

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by