Boost电路电压环(单闭环)控制计算、仿真与设计(提供Psim与Simulink版本、涵盖PI参数计算方法、穿越频率选取的经验法则)
如此高的占空比,对于Boost电路而言,势必会导致输出电压快速上升,采样电压就会远小于参考电压,因此可以看到红色误差信号波形出现几乎为0的情况,这时输出的PWM波占空比达到最小,因为误差电压几乎小于三角波斜坡期间的电压值,在此期间输出基本为低电平。在后文中,我们将会看到补偿前的开环传递函数,相位裕度严重不足,这就会使得系统不稳定,因此就是需要加入补偿器将相位裕度补偿至稳定的数值,例如相位裕度大于4
Boost电路电压环设计
必备的前置知识
\hspace{2em} 关于控制环路的设计,基本认为是开关电源设计的难题之一。在经过前几期的学习之后,我们应该是具备一定的能力,可以开始尝试简单闭环控制系统的设计了。本文中为什么选取Boost电路进行分析,主要是Boost电路中存在右半平面零点,会使得系统产生-90°的相移容易使得系统不稳定,因此补偿起来会相对有些难度。关于Boost电路为什么存在右半平面零点?在 连续模式Buck、Buck-Boost、Boost电路的传递函数推导(状态空间平均法+小信号扰动)这一期中,推导的占空比至输出传递函数的结论可以得出右半平面零点的位置:
G p ( s ) = v o ( s ) d ( s ) = D ′ V o ( 1 − s L D ′ 2 R ) D ′ 2 + s L R + s 2 L C G_p(s)=\frac{v_o(s)}{d(s)}=\frac{D'V_o(1-\frac{sL}{D'^2R})}{D'^2+s\frac{L}{R}+s^2LC} Gp(s)=d(s)vo(s)=D′2+sRL+s2LCD′Vo(1−D′2RsL)
零点的位置,即为传递函数分子为零时的根,因此存在有右半平面零点:
s L = D ′ 2 R → f r = D ′ 2 R 2 π L sL=D'^2R\rightarrow f_r=\frac{D'^2R}{2\pi L} sL=D′2R→fr=2πLD′2R
在时域中,右半平面零点表现的物理意义就是能量的存储,在开关周期中存在能量存储阶段的典型拓扑除了Boost电路以外,还有Buck-Boost、flyback等拓扑,它们都存在能量存储的过程,因此这些拓扑都存在右半平面零点。而Buck电路是直接通过斩波加上LC滤波得到的输出,因此不存在能量存储的过程,自然也就没有右半平面零点,在使用状态空间平均法推导的最终结论中确实也不存在右半平面零点。
\hspace{2em} 得到功率回路的传递函数,是设计闭环控制的前提。在获得 G p ( s ) G_p(s) Gp(s)的表达式之后,我们要明确知道,需要补偿什么?为什么要补偿?补偿的目的,肯定是为了使得系统稳定,那么有哪些目标值是需要我们考虑的,也就是需要补偿至什么程度才认为系统是稳定的?那这就需要各位读者掌握这一期的内容穿越频率、相位裕度和增益裕度剖析。如果读者掌握系统稳定性判断的方法,那么就会明白需要补偿什么了。在后文中,我们将会看到补偿前的开环传递函数,相位裕度严重不足,这就会使得系统不稳定,因此就是需要加入补偿器将相位裕度补偿至稳定的数值,例如相位裕度大于45°就认为足够稳定,关于更详细的稳定性判断的方法,如果有不明确的地方,读者请务必查看前几期的内容。
\hspace{2em} 为了体现文章更新的连续性与关联性,本期使用的Boost电路的器件参数,与之前的完全相同如图1所示,对于Boost电路不太了解的读者亦可参考这一期内容 Boost电路。
补偿前闭环控制框图与开环传递函数
\hspace{2em} 为了清晰的展示补偿前后的差异,我们先设计没有补偿器的闭环控制系统进行观察。通常除去补偿器之后,最简单的开关电源闭环控制系统如图2所示包括,采样回路、调制回路、功率回路。功率回路的传递函数即为 G p ( s ) G_p(s) Gp(s),不过需要注意这里的 G p ( s ) G_p(s) Gp(s)是用于仿真研究,实际的电路中还需考虑ESR、ESL等寄生参数引入的零极点,功率传递函数可能会发生变化。对于电压环控制而言,采样回路通常由简单的电阻分压电路,将输出电压采集后并分压至较低电压可以与参考电压进行比较,其传递函数比较简单,就是电阻分压公式电阻构成的系数 K K K。而调制回路的传递函数,我们在这里做进一步的分析,给出为什么其传递函数是 1 / V m 1/V_m 1/Vm的原因。
调制器通常是由锯齿波或三角波进行调制的,调制的目的就是产生PWM波。观察调制器 G G G,可以看到其输入是参考电压与采样电压(输出电压经过分压)的误差信号 V e r r o r ( s ) V_{error}(s) Verror(s),而输出则是占空比 d ( s ) d(s) d(s),然后功率回路则是输入为占空比 d ( s ) d(s) d(s),输出为 v o ( s ) v_o(s) vo(s)构成的功率传递函数 G p ( s ) Gp(s) Gp(s)。注意,采样电压高于参考电压或者远小于参考电压时,其误差电压数值为负值或超过1,但为了避免出现非线性的情况,通常会在调制器之前加入限幅器,用于保证系统是线性的。图2中没有给出限幅器框图的原因是限幅器只是给定了占空比的边界范围限制在0到1,保证系统工作在线性范围内,本身不影响系统传递函数的列写。
\hspace{2em} 那么误差信号是如何改变占空比的?由于限幅器的存在,假设当前输出的采样电压低于(或高于)参考电压,那么误差电压将会上升(或下降),这时再将误差信号与调制波进行比较输出,就可以使得占空比在合适的方向上增大(或下降),产生正确的PWM波,从而可以校正输出电压。这么描述可能略显抽象,我们具体观察一下波形:
正如上述分析的那样,系统刚启动时,输出基本为0,误差信号非常大,但是由于存在限幅器(这里设置下限为0.1,上限为0.9,这里上限不设置为1是为了避免输出电压趋向无穷大),最大不超过1,即波形查看窗口上栏中的红色波形。而上栏的蓝色波形为调制波,这里设置其峰峰值为1,根据比较器的工作原理可知,此时输出的PWM波(下栏蓝色波形)占空比达到最大。因为在三角波斜坡期间,误差电压几乎大于三角波的电压值,在此期间输出基本为高电平。如此高的占空比,对于Boost电路而言,势必会导致输出电压快速上升,采样电压就会远小于参考电压,因此可以看到红色误差信号波形出现几乎为0的情况,这时输出的PWM波占空比达到最小,因为误差电压几乎小于三角波斜坡期间的电压值,在此期间输出基本为低电平。之后,由于占空比很小,输出电压开始下降,下降至采样电压低于参考电压附近时,误差信号又会增加,然后由于没有补偿器,误差信号就会在一定范围内来回调节,这时的输出就不可靠,会在一定电压范围内来回振荡。
\hspace{2em} 总而言之,经过上述的分析过程,我们可以得出一个规律,那就是占空比的大小与误差信号大小呈现正比关系。参考占空比的定义,占空比是导通时间 t o n t_{on} ton和周期 T T T之间的比值,占空比与导通时间存在正比关系,比例系数由周期的倒数决定,这是占空比从时间的角度出发得到的关系式。现在,同理将时间转换为电压,不难得出,误差信号 V e r r o r V_{error} Verror(如果存在补偿器,这里即为控制信号 V c V_c Vc)就等同于导通时间,周期是开关周期中的最大时间节点,对应着调制波开关周期中的最大电压值,即峰峰值 V m V_m Vm。因此,可以得到占空比的表达式为:
t o n T = D = V c V m \frac{t_{on}}{T}=D=\frac{V_c}{V_m} Tton=D=VmVc
由此,即可推出调制器的小信号传递函数:
G = d ( s ) v c ( s ) = 1 V m G=\frac{d(s)}{v_c(s)}=\frac{1}{V_m} G=vc(s)d(s)=Vm1
根据图2的闭环控制框图,由梅森公式可以得到系统未补偿的开环传递函数:
H ( s ) = G ⋅ K ⋅ G p ( s ) H(s)=G\cdot K\cdot G_p(s) H(s)=G⋅K⋅Gp(s)
接下来,我们实际看看仿真电路,然后将选取的仿真参数通过MATLAB绘制Bode图进行观察:
使用MATLAB绘制开环传递函数的Bode图:( V m 取 1 ,所以代码中省略了该项 Vm取1,所以代码中省略了该项 Vm取1,所以代码中省略了该项)
clc
clear
close all
%%
R=10;L=5.064e-6;C=58.33e-6;%定义器件参数
D=0.583;Dn=1-D;Vo=12;%占空比和输出电压
R3=100e3;R4=71.43e3;%分压器参数
K=R4/(R3+R4);%采样回路传递函数
%% 开环传递函数如下(未加入补偿器)
num = [-K*Vo*L/(Dn*R),K*Dn*Vo]; % K*Dn*Vo-s*K*Vo*L/(Dn*R)
den = [L*C,L/R,Dn^2]; % Dn^2+sL/R+LC*s^2
T = tf(num, den);
[mag,phase,w]=bode(T);
fz=R*Dn^2/(2*pi*L);
f=w/(2*pi);
%% 绘制Bode图并分析稳定性
figure
phase = phase - 360;
semilogx(f, squeeze(phase));
hold on
semilogx(f, squeeze(20*log10(mag)));
grid on
title('补偿前');
[Gm1, Pm1, Wcg1, Wcp1] = margin(T); % 获取增益裕度、相位裕度
fprintf('-------------------补偿前----------------------\r\n');
fprintf('增益裕度:%.4fdB\r\n相位裕度:%.4f°\r\n-180°频率:%.4f\r\n穿越频率:%.4f\r\n右半零点:%.4f\r\n',20*log10(Gm1),Pm1,Wcg1/(2*pi),Wcp1/(2*pi),fz);
hold off
MATLAB代码的运行结果中,会出现一个警告,这个警告就是提示我们闭环控制系统不稳定,此时相位裕度甚至为负。系统极其不稳定,在图4中设定的Vstep1信号就是为了模拟负载突变时,输出电压的变化情况,设定在20ms处突变,图6为仿真电路输出波形。
因此,电路必需要补偿,补偿的目标就是将相位提升,使得相位裕度大于45°以上。常用的控制补偿方式,就是PID控制,但是在开关电源常用PI控制。在模拟控制中,还有各种不同类型的补偿器,例如I、II、III型补偿器,其实也是PID控制的变形,本质就是引入零极点配置,使得达到相位提升、抑制高频噪声等功能,后文主要是介绍PI补偿器。
PI补偿器与零极点在Bode图中的表现
\hspace{2em} 前文提到,未补偿的Boost闭环控制系统存在相位裕度不足的问题。那么就需要使用某种方法将相位进行提升,可以使得相位提升的方法就是引入左半平面零点。零极点的不同类型是如何影响增益和相位的,在Bode图中如何表现?这里可以做一个总结:
左半平面零点:增益 + 20 d B / d e c ,相位提升 + 90 ° ( 0 ° → + 90 ° ) 左半平面零点:增益+20dB/dec,相位提升+90°(0°\rightarrow+90°) 左半平面零点:增益+20dB/dec,相位提升+90°(0°→+90°)
左半平面极点:增益 − 20 d B / d e c ,相位降低 − 90 ° ( 0 ° → − 90 ° ) 左半平面极点:增益-20dB/dec,相位降低-90°(0°\rightarrow-90°) 左半平面极点:增益−20dB/dec,相位降低−90°(0°→−90°)
右半平面零点:增益 + 20 d B / d e c ,相位降低 − 90 ° ( + 180 ° → + 90 ° ) 右半平面零点:增益+20dB/dec,相位降低-90°(+180°\rightarrow+90°) 右半平面零点:增益+20dB/dec,相位降低−90°(+180°→+90°)
右半平面极点:增益 − 20 d B / d e c ,相位提升 + 90 ° ( − 180 ° → − 90 ° ) 右半平面极点:增益-20dB/dec,相位提升+90°(-180°\rightarrow-90°) 右半平面极点:增益−20dB/dec,相位提升+90°(−180°→−90°)
可以用MATLAB绘制四种零极点的情况,观察Bode图验证以上结论:
clc
clear
close all
%% 左半零点
num = [1,1]; % s+1
den = [0,1]; % 1
T = tf(num, den);
[mag,phase,w]=bode(T);
f=w/(2*pi);
%% 绘制Bode图
figure
phase = phase;
semilogx(f, squeeze(phase));
hold on
semilogx(f, squeeze(20*log10(mag)));
grid on
hold off
title('左半零点')
%% 右半零点
num = [1,-1]; % s-1
den = [0,1]; % 1
T = tf(num, den);
[mag,phase,w]=bode(T);
f=w/(2*pi);
%% 绘制Bode图
figure
phase = phase;
semilogx(f, squeeze(phase));
hold on
semilogx(f, squeeze(20*log10(mag)));
grid on
hold off
title('右半零点')
%% 左半极点
num = [0,1]; % 1
den = [1,1]; % s+1
T = tf(num, den);
[mag,phase,w]=bode(T);
f=w/(2*pi);
%% 绘制Bode图
figure
phase = phase;
semilogx(f, squeeze(phase));
hold on
semilogx(f, squeeze(20*log10(mag)));
grid on
hold off
title('左半极点')
%% 右半极点
num = [0,1]; % 1
den = [1,-1]; % s-1
T = tf(num, den);
[mag,phase,w]=bode(T);
f=w/(2*pi);
%% 绘制Bode图
figure
phase = phase;
semilogx(f, squeeze(phase));
hold on
semilogx(f, squeeze(20*log10(mag)));
grid on
hold off
title('右半极点')
除了上述四种典型的零极点以外,还有共轭零极点、原点零极点等,这里就不单独展开说明了,其变化规律基本也是符合上述四种情况。
\hspace{2em} 从以上四种零极点对相位影响的角度分析,由于右半平面极点会引起系统振荡,应该避免出现,所以能够提升相位的选择只有左半平面零点,引入一个左半平面零点至多可提升+90°相位,因此Boost电路在电压控制模式下,存在右半平面零点相移最大-270°,只采用PI补偿是存在局限性的,这点在后文会有更详细的阐述。对于典型的PI补偿器,由比例项( K P K_P KP)和积分项( K I / s K_I/s KI/s)构成,其在s域的表达式如下:
G P I ( s ) = K P + K I s = K I ⋅ 1 + s K P / K I s G_{PI}(s)=K_P+\frac{K_I}{s}=K_I\cdot\frac{1+sK_P/K_I}{s} GPI(s)=KP+sKI=KI⋅s1+sKP/KI
从PI补偿器的表达式中可以得知,除了引入左半平面零点提升相位以外,还引入一个原点极点。该极点在时域中表现为积分器,其作用是对误差信号进行积分,用于消除稳态误差。
补偿后闭环控制框图与开环传递函数
\hspace{2em} 将PI补偿器引入到整个闭环控制系统中,其闭环控制框图如图8所示:
加入PI补偿器之后,可得到闭环系统的开环传递函数如下:( H ( s ) H(s) H(s)的表达式见前文)
T ( s ) = G P I ( s ) ⋅ H ( s ) T(s)=G_{PI}(s)\cdot H(s) T(s)=GPI(s)⋅H(s)
接下来就是如何求解 K P K_P KP和 K I K_I KI,目标是使得系统的相位裕度 P M PM PM达到45°以上,因此根据穿越频率(0dB点)和相位裕度(穿越频率对应相位与-180°的差值)的定义,可得两个方程式,进行求解即可取得 K P 、 K I K_P、K_I KP、KI:
T d B ( f c ) = G p i d B ( f c ) + H d B ( f c ) = 0 d B T_{dB}(f_c)=Gpi_{dB}(f_c)+H_{dB}(f_c)=0~~dB TdB(fc)=GpidB(fc)+HdB(fc)=0 dB
P M = 180 ° + ∠ T ( f c ) = 180 ° + ∠ G P I ( f c ) + ∠ H ( f c ) PM=180°+\angle T(f_c)=180°+\angle G_{PI}(f_c)+\angle H(f_c) PM=180°+∠T(fc)=180°+∠GPI(fc)+∠H(fc)
式中下角标带有 d B dB dB的表达式,代表取 20 l o g 10 20log_{10} 20log10,具体的求解过程我们交给数学软件Mathcad进行处理:
我们取出Mathcad求解的结果,在MATLAB中进行验证:
%% 加入PI补偿器设计
Kp_v=0.007;
Ki_v=13.484;
H=tf([Kp_v,Ki_v],[1,0]);
[mag,phase,w]=bode(T.*H);
f=w/(2*pi);
%% 绘制Bode图并分析稳定性
figure
phase = phase - 360;
semilogx(f, squeeze(phase));
hold on
semilogx(f, squeeze(20*log10(mag)));
grid on
title('补偿后');
[Gm, Pm, Wcg, Wcp] = margin(T.*H); % 获取增益裕度、相位裕度
fprintf('-------------------补偿后----------------------\r\n');
fprintf('增益裕度:%.4fdB\r\n相位裕度:%.4f°\r\n-180°频率:%.4f\r\n穿越频率:%.4f\r\n',20*log10(Gm),Pm,Wcg/(2*pi),Wcp/(2*pi));
hold off
可见最终验证结果与Mathcad目标值非常接近,日志警告也消失了,说明闭环控制系统是稳定的。
\hspace{2em} 不过,在上述求解的过程中,关于穿越频率如何选取,这是一个问题。穿越频率的选择依赖多方面的设计因素和约束条件,这里作者根据《Switch-Mode Power Supplies Spice Simulations and Practical Designs》(【法】:克里斯托夫 ⋅ \cdot ⋅巴索)一书总结了5条选取穿越频率范围的经验公式:
根据图11的计算结果,可以看到本案例中Boost变换器存在右半平面零点并且也存在尖峰频率(共轭极点),这两条经验法则存在冲突,假设舍弃尖峰频率的这条经验法则,穿越频率的选取范围即为:
2.183 K H z ≤ f c ≤ 16.4 K H z 2.183KHz\leq f_c\leq 16.4KHz 2.183KHz≤fc≤16.4KHz
不过,最终发现要获得48°相位裕度的目标值,选取的穿越频率几乎就会落在尖峰频率 f m a x f_{max} fmax附近,一方面是此处的增益本来就比较大,容易做到相位裕度在45°以上,另一方面是包含右半平面零点的变换器,相位滞后太多,PI补偿器相位提升效果有限,+90°的相移对于其余频率点的补偿不足。因此,仅采用电压环PI控制对Boost电路进行补偿是有局限性的,可以引入电流环避开右半平面零点,采用双闭环控制策略就可以把穿越频率的位置选择远离尖峰频率,从而避免系统出现振铃现象。所以,当输出负载发现变化时(或外界扰动),可以预测输出会有振铃现象。
仿真结果
从输出波形可以看到,当负载在20ms处切换时,会产生振铃现象。但是,PI参数选取是合理的,补偿前上电瞬间超调严重,补偿后超调基本消失;补偿前负载切换有较大的振荡,补偿后负载切换虽然有较小的振铃,但经过PI控制后很快就趋向稳定。考虑到部分读者可能使用的是Simulink,这里也提供Simulink仿真电路图与输出结果:
由于本案例开关频率选择较高,Powergui的采样时间选取为 1 / 500 k / 1000 1/500k/1000 1/500k/1000,Simulink仿真速度较慢,为了较少运算量,因此没有添加模拟负载突变的功能,各位读者可自行尝试添加,思路与Psim是一样的。本文的分析就到此结束了,希望对各位读者能够有所帮助和提升。由于作者水平有限,所阅读的资料有限,文章中难免有疏漏和不妥之处,望各位读者批评指正!

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)