Hi all,
I am working on simulating a Totem-Pole Bridgeless PFC on Simulink. I have developed the control system and need to tune the PI values for the PI controller.
Since the video is for a Boost PFC, the control system is a little different when compared to a Totem-Pole PFC.
I tried the tuning with help of sisotool by find the transfer function using small signal analysis ,and found the kp and ki but the desired response is not coming.The transfer function is shown below as a code
% the controller transfer function
clc;
clear all;
s=tf('s');
Vin=230;
V0=400;
d=0.1868;
L=2.0634e-4;
C1=0.0042;
R=48.48;
fs=65000;
Ts=1/fs;
%Gid=(Vin*(2+R*C1*s))/(R*(1-d^3)*((C1*L*s^2)/((1-d)^2)+((L*s)/R*((1-d)^2))+1));
Gid=V0/(1+s*L*R);
Gvd=(Vin*R)/(2*V0*(s*R*C1 +1));
I have attached my simulation file ,Please Help me guys
%the parameters which I used
clc
clear all;
Vin=input("Enter the value ")
fline=50;
Vinpeak=sqrt(2)*Vin;
V0=400;
V0_min=380;
Po=3300;
n=0.95;
t_holdup=10e-3;
Iin=Po/(n*Vin);
fsw=65000;
D=(1-(Vinpeak/V0));
deliin=Iin*0.30;
delvo=0.025*V0;
L=(Vinpeak*D)/(fsw*deliin);
Cpower=Po/(2*pi*fline*delvo*V0);
Choldup=(2*Po*t_holdup)/(V0^2-V0_min^2);
cap=max(Cpower,Choldup);
Ts = 1/(100*fsw); % Sampling time for the plant [sec]
Tsc = 1/(50*fsw); % Sampling time for the controller [sec]
Iinpeak = 2*(Po/(n*0.01))/Vinpeak;

6 commentaires

Not expert, but what are the desired responses expected from the outputs of and ?
s = tf('s');
Vin = 230;
V0 = 400;
d = 0.1868;
L = 2.0634e-4;
C1 = 0.0042;
R = 48.48;
fs = 65000;
Ts = 1/fs;
% Gid = (Vin*(2+R*C1*s))/(R*(1-d^3)*((C1*L*s^2)/((1-d)^2)+((L*s)/R*((1-d)^2))+1))
Gid = V0/(1 + s*L*R)
Gid = 400 ---------- 0.01 s + 1 Continuous-time transfer function.
Gvd = (Vin*R)/(2*V0*(s*R*C1 + 1))
Gvd = 1.115e04 ------------- 162.9 s + 800 Continuous-time transfer function.
Barath Narayanan
Barath Narayanan le 30 Sep 2022
Ok ,these are the open loop response which I also got ,but from this open loop response I tuned using sisotool in Matlab to get a tuned closed loop response But if I substitute the values of closed loop response in the simulation its not working
Sam Chak
Sam Chak le 30 Sep 2022
@Barath Narayanan, thanks for your reply.
However, I'm unsure if I understand your meaning of "not working"?
If the responses of and settle at 1 second, are they acceptable?
Barath Narayanan
Barath Narayanan le 30 Sep 2022
My requirement of Gid is phase margin 45-60 degree and crossover frequency is 10% of fsw ( switching frequency).This should have a faster response
Gvd the crossover frequency should be 2* line frequency and phase margin 90 degree
Based on this criteria I need a tuned response
Barath Narayanan
Barath Narayanan le 30 Sep 2022
Thanks for replying
Usman
Usman le 30 Juil 2023
do you have the example for multiphase buck converter control?

Connectez-vous pour commenter.

 Réponse acceptée

Sam Chak
Sam Chak le 30 Sep 2022
Modifié(e) : Sam Chak le 1 Oct 2022
I forgot to ask the PI values you obtained from sisotool. Please check if the performance requirements are satisfied for your Totem-Pole Bridgeless PFC:
s = tf('s');
Vin = 230;
V0 = 400;
d = 0.1868;
L = 2.0634e-4;
C1 = 0.0042;
R = 48.48;
fs = 65000;
fline = 50;
Ts = 1/fs;
Gid = V0/(1 + s*L*R)
Gid = 400 ---------- 0.01 s + 1 Continuous-time transfer function.
Gic = pidtune(Gid, 'PI', 0.1*fs)
Gic = 1 Kp + Ki * --- s with Kp = 0.14, Ki = 542 Continuous-time PI controller in parallel form.
Gcli = minreal(feedback(Gic*Gid, 1))
Gcli = 5579 s + 2.169e07 ----------------------- s^2 + 5679 s + 2.169e07 Continuous-time transfer function.
margin(Gic*Gid) % Requirements: Pm = 45°–60°, ωc = 10% of fs
step(Gcli)
Gvd = (Vin*R)/(2*V0*(s*R*C1 + 1))
Gvd = 1.115e04 ------------- 162.9 s + 800 Continuous-time transfer function.
kpv = 0.1*1.46087; % 10% of the previous designed kp value
kiv = 0.1*7.17463; % 10% of the previous designed ki value
Gvc = pid(kpv, kiv)
Gvc = 1 Kp + Ki * --- s with Kp = 0.146, Ki = 0.717 Continuous-time PI controller in parallel form.
Gclv = minreal(feedback(Gvc*Gvd, 1))
Gclv = 10 s + 49.11 --------------------- s^2 + 14.91 s + 49.11 Continuous-time transfer function.
margin(Gvc*Gvd) % Requirements: Pm = 90°, ωc = 10% of 2*fline
step(Gclv)

16 commentaires

Barath Narayanan
Barath Narayanan le 30 Sep 2022
I will try this and update you and thanks for the reply
Barath Narayanan
Barath Narayanan le 30 Sep 2022
Modifié(e) : Barath Narayanan le 1 Oct 2022
I forgot to update that Gvd crossover frequency is 10% of 2* fline And I will try this code and update you
how you found the Kpv and kiv values ?
Previous designed Kpv kiv based on Gvd transfer function How you determine that value?
Sam Chak
Sam Chak le 1 Oct 2022
Modifié(e) : Sam Chak le 1 Oct 2022
Thanks for your clarification.
For , since the desired phase margin is °, then the output response should somewhat look like a critically-damped response. Therefore, the original values of and were found through manual tuning that gave the "critically-damped" shape (2nd-order system but no overshoot, see , the closed-loop transfer function).
I didn't use sisotool for , but I think it is similar to the design procedure described in the Optimization Based Tuning method
where you need to manually adjust the region bounded by black line segments:
Well, since 10% of is required, I have updated the PI gains and in my Answer, just by multiplying the factor 0.1.
Thanks for your clarification
Another doubt I have is like for gid equation you applied pidtune command and found the kp and ki values ,this also used the optimization tuning method ?
since I want 90 degree phase margin you did this optimization method why cant we use the pidtune command for gvd
Hi
The pi values of Gvd which i substitute in the simulation f
The response which I got have attached as an image below
Is this correct ? It is just linear rising ?
it won't settle?
@Barath Narayanan, the pidtune algorithm attemps to tune the gains that achieves the target crossover frequency with a good phase margin as close to 60° as possible, by default.
I actually seldom use pidtune, and I just discovered that you use it by specifying the desired PhaseMargin. It returns the same PI values that I rounded up from my design:
kpv = 0.1460869565217391
kiv = 0.7174630506528914
s = tf('s');
Vin = 230;
V0 = 400;
d = 0.1868;
L = 2.0634e-4;
C1 = 0.0042;
R = 48.48;
fs = 65000;
fline = 50;
Ts = 1/fs;
Gvd = (Vin*R)/(2*V0*(s*R*C1 + 1))
Gvd = 1.115e04 ------------- 162.9 s + 800 Continuous-time transfer function.
opts = pidtuneOptions('PhaseMargin', 90, 'DesignFocus', 'reference-tracking');
[Gvc, info] = pidtune(Gvd, 'PI', 0.1*2*fline, opts)
Gvc = 1 Kp + Ki * --- s with Kp = 0.146, Ki = 0.717 Continuous-time PI controller in parallel form.
info = struct with fields:
Stable: 1 CrossoverFrequency: 10 PhaseMargin: 90
margin(Gvc*Gvd)
Sam Chak
Sam Chak le 1 Oct 2022
I don't know your input.
Logically, if the input is a ramp signal, then the output should rise linearly as well.
My input to the PI controller is
Sam Chak
Sam Chak le 1 Oct 2022
@Barath Narayanan, Thanks for the image.
I'm not sure, but I guess you probably put the PID block in the wrong position. Please check. Typically, the PID controller should be placed in a closed-loop like this:
To be honest, I'm no expert in the Totem system, but I learned a bit of applied math/calculus on differential equations. Only learned to use MATLAB extensively in projects in the last 6 months (see my profile), because it is free through my school's license.
Moreover, if your system is in discrete-time domain (see the 'z' variable), then you should carry out the design in the z-domain as well.
Hi @Sam Chak Thanks for the response
I will chech with these and I will update ypu
I am also a learner in Matlab and i had a good convo with you
hope It will continue.
no its actualy closed loop ,in order to avoid wire messiness , I used goto and from block
Sam Chak
Sam Chak le 1 Oct 2022
Modifié(e) : Sam Chak le 1 Oct 2022
@Barath Narayanan, have you done checking the closed-loop system?
Scope3 certainly does not look like any Goto block. Are you absolute sure that it is in the correct closed-loop configuration (block diagram arrangement) as shown in my previous comment?
Comparing apple-to-apple implies that 1 (Constant1 block) is the Reference r, and the output of 1/400 Gain block is the feedback y. From the original design, output of the Plant to return to the Sum block. But your output is factored by 1/400... This does not reflect in the original tuning of the PI gains.
You can also try checking with your research friends / group members / project manager, who are involved in the Totem project.
Barath Narayanan
Barath Narayanan le 1 Oct 2022
Modifié(e) : Barath Narayanan le 1 Oct 2022
You see the file you will get better a scope init
Sam Chak
Sam Chak le 1 Oct 2022
After opening the Simulink model, I don't see the transfer function , anything that is mathematically equivalent to it. Correct me if I'm wrong.
The output of the PI(z) block goes straight into one of the 2 input ports of the Product block.
What do the block components have to do the transfer function ?
If all the blocks make up to have the equivalent mathematical transfer function , and you place the PI(s) block in the correct position as shown above, then you should the converging step response.
However, I noticed there are other nonlinear blocks, so I don't think they are part of the transfer function . Perhaps, you would like to check with your research friends / group members / project manager, who are involved in the Bridgeless PFC project.

Connectez-vous pour commenter.

Plus de réponses (1)

Barath Narayanan
Barath Narayanan le 2 Oct 2022

0 votes

Ok type in the matlab command as ee_ totem_pole_pfc and see the control subsystem

3 commentaires

Sufi
Sufi le 23 Mai 2023
Hello Barath,
Did you figure a way out in finding the PI values for current and voltage controller. I am facing the same problems as you!
Barath Narayanan
Barath Narayanan le 23 Mai 2023
Ya tried a pI and pr simulation Instead of pi
Sufi
Sufi le 24 Mai 2023
How did you get the PI values and PR values? What procedure did you follow to get it correctly?

Connectez-vous pour commenter.

Produits

Version

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by