CCM单电压环BUCK开关变换器传递函数理论分析与simulink估算对比
上周在https://ww2.mathworks.cn/help/ident/ug/estimating-transfer-function-models-for-a-boost-converter.html看到了一篇关于BOOST开关变换器传递函数估算的文章,觉得有一定实用性,于是对文章进行的翻译收藏,方便以后查阅:估算升压变换器的传递函数模型(通过Matlab&simulink)本文要
上周在https://ww2.mathworks.cn/help/ident/ug/estimating-transfer-function-models-for-a-boost-converter.html看到了一篇关于BOOST开关变换器传递函数估算的文章,觉得有一定实用性,于是对文章进行的翻译收藏,方便以后查阅:估算升压变换器的传递函数模型(通过Matlab&simulink)
本文要解决的问题是估算出来的传递函数是否正确,还是以最成熟最简单的CCM单电压环BUCK开关变换器作为实例进行一个对比。
理论分析
针对这一开关变换器传递函数的理论分析,我主要参考了《精通开关电源设计(第2版)》第12章节的内容,以下图为原型,对变换器的不同功能模块间传递函数进行理论分析,进而得到整个系统的传递函数:
这里,我们先忽略误差放大器补偿部分,而着重看开关变化器固有部分的传函。对放大器部分有兴趣可以跳至《开关电源中3型误差放大器参数设计及仿真(针对电压控制性CCMBUCK构架基于Pspice)》这篇文章对三型补偿网络的计算进行了介绍。
-
分压器:
在环路的分析中,我们主要对交流量(扰动量,变化量)进行分析,而分压器只对直流偏置有影响,因此不考虑分压器比例的影响,对于使用电压型误差放大器的系统,分压器的上臂电阻的阻抗对环路有影响; -
脉宽调制比较器
参考下图:
Gpwm = 1/Vramp -
功率部分
由CCM BUCK 输入到输出的传函为:
D = Vout / Vin
可得:
dD /dVout = dVin
因此,G功率 = dVout/dD = 1/Vin(Vin为常数) -
LC滤波器:
参考《开关电源闭环控制为啥需要补偿网络–3型运算放大器介绍》:
G l c = 1 L C S 2 + S L R L + 1 Glc = \frac{1}{LCS^2+S\frac{L}{RL}+1} Glc=LCS2+SRLL+11
这里暂时不考虑输出电容ESR的影响。
把以上四部分结合到一起可以得到系统的的开环传递函数:
G
(
s
)
=
V
i
n
V
r
a
m
p
∗
1
L
C
S
2
+
S
L
R
L
+
1
G(s) = \frac{Vin}{Vramp}* \frac{1}{LCS^2+S\frac{L}{RL}+1}
G(s)=VrampVin∗LCS2+SRLL+11
这里假设L为68uH,C为136uF,RL为5R,Vramp为1V,计算得:
G
(
s
)
=
12
∗
1
9248
∗
1
0
−
12
S
2
+
13.6
∗
1
0
−
6
S
+
1
G(s) = 12* \frac{1}{9248*10^{-12}S^2+13.6*10^{-6}S+1}
G(s)=12∗9248∗10−12S2+13.6∗10−6S+11
整理得:
G
(
s
)
=
1.3
∗
1
0
−
9
S
2
+
1470
S
+
1.08
∗
1
0
−
8
G(s) = \frac{1.3*10^{-9}}{S^2+1470S+1.08*10^{-8}}
G(s)=S2+1470S+1.08∗10−81.3∗10−9
Simulink模型估算
绘制如下simulink模型,命名为‘buck1’,在matlab界面运行如下脚本:
clear all;
clc
model = 'buck1';% 找到simulink仿真文件名
open_system(model);% 打开仿真文件
ios = [...
linio([model,'/Duty'],1,'input'); ...
linio([model,'/PS-Simulink Converter1'],1,'output')];
% 找到添加输入点和输出点
f = logspace(log10(10),log10(10000),10);% 确定扫频范围
in = frest.Sinestream('Frequency',f,'Amplitude',0.03, 'FreqUnits','Hz');
% 确定扫频值、扰动幅度、频率的单位
getSimulationTime(in)/0.02% 获取仿真需要的时间
[sysData,simlog] = frestimate(model,ios,in);% 开始频率响应仿真分析
bopt = bodeoptions;
bopt.Grid = 'on';% 打开栅格
bopt.PhaseMatching = 'on';% 打开相位匹配
bopt.FreqUnits = 'Hz';% 频率单位为Hz
% 以下为传递函数数算
Gp_s = tfest(sysData,2, 0) %这里假定有2个极点0个零点
figure, bode(sysData,'r*',Gp_s,bopt)% 绘制拟合的传递函数伯德图
运行结果如下:
ans =
37.3070
Gp_s =
From input "Duty" to output "PS-Simulink Converter1":
1.306e09
-----------------------
s^2 + 2666 s + 1.085e08
Continuous-time identified transfer function.
Parameterization:
Number of poles: 2 Number of zeros: 0
Number of free coefficients: 3
Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties.
Status:
Estimated using TFEST on frequency response data "sysData".
Fit to estimation data: 90.85%
FPE: 1.038, MSE: 0.7669
得到如下波特图:
与理论分析对比由些许差异,主要是由于simulink中我使用了物理模型,存在一些寄生参数,比如二极管的导通压降,导通阻抗等,而理论分析是纯理想状态下的分析。
我们把理论分析的传递函数的波特图一起画上去看看。
从上图可以看出,理论分析的传函和估算的传函还是十分接近的, simulink对传函的估算还是具有详单的参考价值。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)