buck电路数字控制

一、建模

 原理图:

        

交流小信号建模:

L\frac{d\hat{i}(t)}{dt}=D\hat{v}_g(t)-\hat{v}(t)+\hat{d}(t)V_g

C\frac{d\hat{v}(t)}{dt}=\hat{i}(t)+\frac{\hat{v}(t)}{R}

进而可以推得占空比d与电感电流i的传递函数:

G_{id}(s) = \frac{V_g(Cs+\frac{1}{R})}{LCs^2+\frac{L}{R}s+1}

二、电流环

采用PI控制器,计算代码如下:

%说明:该内容用于计算buck电路电流环参数%
%日期:2023年11月6日
clear;clc;
format long
syms Kip Kii w
Vg=50;
Vo=12;
L=19e-6;
C=1000e-6;
R=0.6;
% buck matlab求解PI控制器参数
fc=5e3;%5kHz
w=2*pi*fc;%穿越频率
D=Vo/Vg;
PM=75;
Vm=200;%载波幅值
s=w*1j;
%% 参数求解过程
G1PI=(Kip*s+Kii)/(s);
Gid=Vg*(C*s+1/R)/(Vm*(L*C*s^2+(L/R)*s+1));
a1=Gid

a=sqrt((Kip*w)^2+(Kii)^2)/w
b=atan(Kip*w/Kii)-pi/2

ab=abs(a1)
an=angle(a1)

exp1=[ab*a==1,b+an==-(180-PM)/(180/pi)]
solu=vpasolve(exp1,[Kip,Kii])
[solu.Kip,solu.Kii]

%% 波特图绘制
num1=[double(solu.Kip) double(solu.Kii)];
den1=[1 0];%电流环pi

Gpi=tf(num1,den1)
num2=[Vg*C Vg/R];
den2=[L*C L/R 1];
G1=tf(num2,den2)
Gopen=Gpi/Vm*G1;
%bode(PIi,Iden,[100,10e6]);
bode(Gpi,G1,Gopen);

legend('Gpi','G1','Gopen');
grid

三、电压环

电感电流i到输出电压的传递函数为:

G_{vi}(s)=\frac{R}{RCs+1}

用Matlab计算电压环控制对象:

(Kip*R*Vg*s + Kii*R*Vg)/(C*L*R*Vm*s^3 + (L*Vm + C*Kip*R*Vg)*s^2 + (Kip*Vg + R*Vm + C*Kii*R*Vg)*s + Kii*Vg)

% 说明:
% 该内容用于计算buck电压环控制对象
clear;clc;
format long
syms Kip Kii w Kvp Kvi Vg C L R T K s Vo D Vm Dp
%% 电流环内容
GiPI=(Kip*s+Kii)/(s);
Gid=Vg*(C*s+1/R)/(Vm*(L*C*s^2+(L/R)*s+1));
Gvi=R/(R*C*s+1);
%% 电压环内容
GvPI=(Kvp*s+Kvi)/(s);

G1=Gid*GiPI
G2=G1/(1+G1)
G3=G2*Gvi
%整理,以s为未知数合并同类项
collect(G3,s)

用Matlab计算电压环的控制参数:

%% calculate buck v-loop
clear;clc;
format long
syms Kvp Kvi w
Vg=50;
Vo=12;
L=19e-6;
C=1000e-6;
R=0.6;
% buck matlab求解 buck 电压环PI控制器参数
fc=1e3;
w=2*pi*fc;%穿越频率
D=Vo/Vg;
Dp=1-D;
PM=75;
Vm=200;%载波幅值
s=w*1j;

Kip=2.18;
Kii=18586;
%% 参数求解过程
GiPI=(Kip*s+Kii)/(s)
Gid=Vg*(C*s+1/R)/(Vm*(L*C*s^2+(L/R)*s+1));
Gvi=R/(R*C*s+1);
GvPI=(Kvp*s+Kvi)/(s);

a1=(Gvi*Gid*GiPI)/(1+Gid*GiPI);
%a1=collect((Gvi*Gid*GiPI)/(1+Gid*GiPI),s);
ab=abs(a1)                      %a1的模
an=angle(a1)                    %a1的相角
a=sqrt((Kvp*w)^2+(Kvi)^2)/w     %pi控制器的模
b=atan(Kvp*w/Kvi)-pi/2          %pi控制器的相角

%解方程组
exp1=[ab*a==1,b+an==-(180-PM)/(180/pi)]
solu=vpasolve(exp1,[Kvp,Kvi])
[solu.Kvp,solu.Kvi]

%% 波特图绘制
num1=[double(solu.Kvp) double(solu.Kvi)];
den1=[1 0];%电流环pi

Gpi=tf(num1,den1)
% 电压环
% (Kip*R*Vg*s + Kii*R*Vg)/(C*L*R*Vm*s^3 + (L*Vm + C*Kip*R*Vg)*s^2 + (Kip*Vg + R*Vm + C*Kii*R*Vg)*s + Kii*Vg)
num2=[Kip*R*Vg   Kii*R*Vg];
den2=[C*L*R*Vm  (L*Vm + C*Kip*R*Vg)  (Kip*Vg + R*Vm + C*Kii*R*Vg) Kii*Vg];
G1=tf(num2,den2)
Gopen=Gpi*G1;
%bode(PIi,Iden,[100,10e6]);
bode(Gpi,G1,Gopen);

legend('Gpi','G1','Gopen');
grid

四、电压环改成MPPT用的Vpv

电感电流平均值为输出电流io,io又与PV电流成比例关系

       i_{pv}=i_o*D

观察IV曲线,

\Delta v = \Delta i*k

在最大功率点处 k≈1,在两端k从很大到很小。我们取k=1.

那么

v_{pv}=i_L*D*k

电压控制环

D为占空比

k为光伏板IV特性曲线(注意:此处k<0,为计算方便可以先假设k是正值然后再在程序里将Vref-Vo变成Vo-Vref即可)。

用Matlab计算电压环控制对象:

(C*Kip*R*Vg*k_solar*D*s^2 + (Kip*Vg*k_solar*D + C*Kii*R*Vg*k_solar*D)*s + Kii*Vg*k_solar*D)/(C*L*R*Vm*s^3 + (L*Vm + C*Kip*R*Vg)*s^2 + (Kip*Vg + R*Vm + C*Kii*R*Vg)*s + Kii*Vg)

有了控制对象就可以用Matlab计算电压环控制参数。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值