1. 峰值电流模式CCM BUCK传递函数推导的完整思路拆解
1.1 为什么峰值电流模式的控制到输出传递函数值得单独推导
搞电源的人迟早会碰到一个问题:电压模式BUCK的传递函数推导资料满天飞,但换成峰值电流模式(Peak Current Mode, PCM),能找到的完整推导过程就少了一大截。原因不复杂——电压模式只有一个环路,补偿网络设计相对直观;而峰值电流模式引入了内环电流环,电感电流不再是一个独立状态变量,整个系统的阶数、极点分布、右半平面零点都跟电压模式完全不一样。
我在实际做数字电源的时候,最开始也是拿电压模式的模型去套峰值电流模式,结果补偿器怎么调都不对,相位裕度死活上不去。后来老老实实把传递函数从头推了一遍,才发现问题出在采样增益和斜坡补偿对低频增益的影响上。所以这篇内容就是把我自己推导峰值电流模式CCM BUCK传递函数的完整过程整理出来,包括每一步的假设、近似、参数计算,以及推导完之后怎么验证。
适合谁看?如果你正在做数字电源的环路补偿设计,或者用Simulink搭BUCK的平均模型发现仿真和实测对不上,又或者你只是想把电力电子的控制理论从课本落到实际,这篇内容应该能帮到你。不需要你是控制理论专家,但至少得知道什么是传递函数、什么是极点零点、BUCK电路的基本工作原理。
1.2 峰值电流模式与电压模式的核心差异
先把这个差异说清楚,不然后面推导容易迷路。
电压模式控制:占空比d直接由补偿器输出决定,电感电流iL是一个独立的状态变量。整个功率级是一个二阶系统,有两个极点(由LC滤波器决定),以及一个由ESR引入的左半平面零点。
峰值电流模式控制:占空比不再直接由补偿器输出决定,而是由补偿器输出一个电流参考值ic,然后每个开关周期内,当电感电流上升到ic时,开关管关断。这就形成了一个内环电流环。结果是电感电流不再是独立状态变量,而是跟随ic变化。整个系统从二阶降为一阶,主极点由输出电容和负载电阻决定。
这个降阶特性是峰值电流模式最大的优势——补偿器设计大大简化,相位裕度容易做。但代价是引入了采样效应、斜坡补偿的影响,以及在高频段模型不再准确的问题。
1.3 推导的整体框架与关键假设
我推导的时候遵循了以下几个关键假设,这些假设在大多数工程场景下是成立的:
- CCM模式:电感电流在整个开关周期内始终大于零,不进入断续模式。这是推导的前提,DCM下模型完全不同。
- 小信号近似:所有变量在稳态工作点附近做微小扰动,忽略二阶及以上高阶项。
- 开关频率远高于穿越频率:这样可以用平均模型代替开关模型,忽略开关纹波。
- 斜坡补偿斜率匹配:假设斜坡补偿斜率Se与电感电流下降斜率Sf满足一定关系,这个后面会详细说。
- 忽略寄生参数:除了输出电容ESR之外,忽略其他寄生参数。
推导路线是这样的:先从时域的平均模型出发,写出电感电流和输出电压的动态方程;然后引入峰值电流模式的采样保持效应,把电感电流用ic表示;最后消去中间变量,得到从控制量到输出电压的传递函数。
2. 峰值电流模式CCM BUCK的核心细节解析与实操要点
2.1 功率级平均模型的建立
先从最基本的BUCK电路平均模型开始。CCM下,一个开关周期内,电感电压的平均值为:
VL_avg = D * (Vin - Vout) + (1-D) * (-Vout) = D*Vin - Vout电感电流的动态方程:
L * diL/dt = D*Vin - Vout输出电容节点的电流方程:
C * dVout/dt = iL - Vout/R这两个方程就是BUCK功率级的平均模型。在稳态时,diL/dt = 0,dVout/dt = 0,可以得到:
Vout = D*Vin iL = Vout/R这是大家熟知的稳态关系。但注意,这是电压模式下的模型,因为D是独立变量。在峰值电流模式下,D不是独立的,它由电感电流峰值决定。
2.2 峰值电流模式的采样效应与电感电流表达式
峰值电流模式的核心机制是:每个开关周期开始时,开关管导通,电感电流上升;当电感电流达到控制信号ic时,开关管关断。所以电感电流的峰值等于ic。
在CCM下,电感电流的平均值iL_avg与峰值iL_pk的关系是:
iL_avg = iL_pk - (1/2) * ΔiL其中ΔiL是电感电流纹波峰峰值:
ΔiL = (Vin - Vout) * D * Tsw / L = Vout * (1-D) * Tsw / L这里Tsw是开关周期。所以:
iL_avg = ic - (1/2) * ΔiL但这里有个关键点:ic是控制信号,而ΔiL与D有关,D又与ic有关。所以iL_avg并不是简单地等于ic减去一个常数。
更准确地说,峰值电流模式下的电感电流平均值可以表示为:
iL_avg = ic - (1/2) * m1 * D * Tsw其中m1是电感电流上升斜率:
m1 = (Vin - Vout) / L这个表达式说明,电感电流平均值与控制信号ic之间有一个由D决定的偏移量。这个偏移量在小信号分析中会引入一个额外的增益项。
2.3 斜坡补偿的影响与采样增益
实际电路中,为了防止占空比大于50%时的次谐波振荡,通常会加入斜坡补偿。斜坡补偿的斜率Se会叠加到电流检测信号上,等效于改变了控制信号与电感电流峰值的关系。
加入斜坡补偿后,电感电流平均值与控制信号的关系变为:
iL_avg = ic - (1/2) * m1 * D * Tsw - Se * D * Tsw / m1这个表达式看起来复杂,但在小信号分析中,我们可以把它线性化。定义采样增益Ri为:
Ri = 1 / (1 + Se/Sn)其中Sn = m1是电感电流上升斜率。当Se = 0时,Ri = 1;当Se增大时,Ri减小。这个Ri就是峰值电流模式中电流环的等效采样增益。
在实际工程中,通常取Se = 0.5 * Sf到1.0 * Sf之间,其中Sf是电感电流下降斜率:
Sf = Vout / L这样可以在保证稳定性的同时,不至于过度降低电流环增益。
注意:斜坡补偿的斜率选择直接影响传递函数的低频增益和相位裕度。我实测下来,Se取0.7*Sf左右是一个比较稳妥的折中。
2.4 小信号扰动与传递函数推导
现在开始小信号分析。对所有变量做扰动:
D = D0 + d^ iL = IL0 + iL^ Vout = Vout0 + vout^ ic = Ic0 + ic^ Vin = Vin0 + vin^代入平均模型方程,忽略二阶项,得到小信号方程:
电感电流方程:
L * d(iL^)/dt = D0*vin^ + Vin0*d^ - vout^输出电容方程:
C * d(vout^)/dt = iL^ - vout^/R峰值电流模式的关系式:
iL^ = Ri * ic^ - (1/2) * m1 * Tsw * d^ - (1/2) * D0 * Tsw * (d(m1)/dt) * ...这里需要小心处理。实际上,峰值电流模式下,电感电流平均值的小信号表达式为:
iL^ = Ri * ic^ - k * d^其中k是一个与工作点有关的系数:
k = (1/2) * m1 * Tsw * (1 - Se/Sn) + ...更精确地,经过推导可以得到:
iL^ = Ri * ic^ - (1/2) * Tsw * (m1 - Se) * d^这个表达式说明,电感电流平均值受到控制信号ic和占空比d的双重影响。这是峰值电流模式与电压模式最大的区别——电感电流不再是独立变量,而是由ic和d共同决定。
把iL^代入输出电容方程:
C * d(vout^)/dt = Ri * ic^ - (1/2) * Tsw * (m1 - Se) * d^ - vout^/R同时,从电感电流方程可以得到d^的表达式:
d^ = (L * d(iL^)/dt - D0*vin^ + vout^) / Vin0把iL^的表达式代入,经过一系列代数运算,最终可以得到从ic^到vout^的传递函数:
Gvc(s) = vout^(s) / ic^(s) = Ri * R / (1 + s * R * C) * (1 - s * L / (Ri * R * Vin0) * ...)这个表达式看起来有点乱,但核心结构是清晰的:一个主极点由RC决定,一个高频零点由电感电流纹波引入。低频增益为RiR。
更常见的标准形式是:
Gvc(s) = Ri * R / (1 + s / ωp)其中ωp = 1/(R*C)是主极点。这个一阶模型在低频段非常准确,但在接近开关频率的一半时,采样效应会导致模型失效。
2.5 采样效应的修正与高频模型
上面的一阶模型忽略了采样效应。实际上,峰值电流模式存在采样保持效应,会在开关频率的一半处引入一对共轭极点。这个效应在穿越频率接近开关频率的1/10到1/6时开始显著。
修正后的模型为:
Gvc(s) = Ri * R / (1 + s / ωp) * 1 / (1 + s/(ωn*Q) + s^2/ωn^2)其中ωn = π * fsw是采样频率对应的角频率,Q = 1/(π * (Se/Sn + 0.5))是品质因数。
这个修正项在高频段非常重要。我在实际调试时发现,如果不考虑这个采样极点,补偿器在高频段的相位裕度会估计过高,导致实际系统振荡。
实操心得:当穿越频率超过开关频率的1/10时,必须考虑采样极点的影响。否则相位裕度至少会差10度以上。
3. 实操过程与核心环节实现
3.1 参数计算与工作点确定
推导传递函数之前,先把工作点参数算清楚。以一个典型的同步BUCK为例:
- 输入电压Vin = 12V
- 输出电压Vout = 3.3V
- 输出电流Iout = 10A
- 开关频率fsw = 500kHz
- 电感L = 1μH
- 输出电容C = 220μF
- ESR = 5mΩ
- 负载电阻R = Vout/Iout = 0.33Ω
先算占空比:
D = Vout / Vin = 3.3 / 12 = 0.275电感电流纹波:
ΔiL = Vout * (1-D) * Tsw / L = 3.3 * 0.725 * 2e-6 / 1e-6 = 4.785A电感电流上升斜率:
m1 = (Vin - Vout) / L = (12 - 3.3) / 1e-6 = 8.7e6 A/s电感电流下降斜率:
Sf = Vout / L = 3.3 / 1e-6 = 3.3e6 A/s取斜坡补偿Se = 0.7 * Sf = 2.31e6 A/s。
采样增益:
Ri = 1 / (1 + Se/Sn) = 1 / (1 + 2.31/8.7) = 1 / 1.2655 = 0.79主极点频率:
ωp = 1 / (R * C) = 1 / (0.33 * 220e-6) = 13774 rad/s fp = ωp / (2π) = 2.19kHz采样极点频率:
ωn = π * fsw = 3.1416 * 500e3 = 1.57e6 rad/s fn = fsw / 2 = 250kHz品质因数:
Q = 1 / (π * (Se/Sn + 0.5)) = 1 / (π * (0.2655 + 0.5)) = 1 / (π * 0.7655) = 0.416这些参数算出来之后,传递函数就确定了。
3.2 传递函数的完整表达式与Simulink建模
把上面的参数代入修正后的传递函数:
Gvc(s) = 0.79 * 0.33 / (1 + s/13774) * 1 / (1 + s/(1.57e6*0.416) + s^2/(1.57e6)^2)化简:
Gvc(s) = 0.2607 / (1 + s/13774) * 1 / (1 + s/653120 + s^2/2.465e12)在Simulink中建模时,可以用Transfer Fcn模块直接输入分子分母系数。分子为[0.2607],分母为两个环节的卷积。
第一个环节的分母:[1/13774, 1] = [7.26e-5, 1] 第二个环节的分母:[1/2.465e12, 1/653120, 1] = [4.06e-13, 1.53e-6, 1]
卷积后得到完整分母。在Simulink中可以用conv函数计算:
den1 = [7.26e-5, 1]; den2 = [4.06e-13, 1.53e-6, 1]; den = conv(den1, den2); num = [0.2607]; Gvc = tf(num, den); bode(Gvc);这样就能看到波特图了。低频增益为20*log10(0.2607) = -11.7dB,主极点在2.19kHz,采样极点在250kHz附近。
注意:Simulink中如果直接用平均模型,需要确保开关频率足够高,否则仿真结果与理论推导会有偏差。我一般会把仿真步长设为开关周期的1/100以下。
3.3 补偿器设计与闭环验证
有了功率级传递函数,接下来设计补偿器。峰值电流模式通常用Type II补偿器(一个极点、一个零点、一个积分器)。
目标穿越频率取开关频率的1/10,即50kHz。但注意,主极点在2.19kHz,所以补偿器需要在2.19kHz处提供足够的增益提升。
Type II补偿器的传递函数:
Gc(s) = ωi * (1 + s/ωz) / (s * (1 + s/ωp))其中ωi是积分增益,ωz是零点频率,ωp是高频极点频率。
设计步骤:
- 把零点放在主极点附近,即ωz = ωp_power = 13774 rad/s
- 把高频极点放在采样极点的一半处,即ωp = ωn/2 = 785000 rad/s
- 调整积分增益ωi,使穿越频率为50kHz
在50kHz处,功率级增益约为:
|Gvc(j*2π*50000)| = 0.2607 / (50000/2190) = 0.2607 / 22.8 = 0.0114需要补偿器提供1/0.0114 = 87.7倍的增益。在50kHz处,补偿器的增益约为:
|Gc(j*2π*50000)| = ωi / (2π*50000) * (50000/2190) / (1) = ωi * 22.8 / (2π*50000)令其等于87.7,解得ωi = 87.7 * 2π * 50000 / 22.8 = 1.21e6 rad/s。
这样补偿器就设计好了。在Simulink中把功率级和补偿器连成闭环,跑一下阶跃响应,看看超调量和调节时间是否满足要求。
3.4 实测验证与波形分析
理论推导和仿真都过了之后,最后一步是实测。我一般会用一个简单的负载阶跃测试来验证相位裕度。
具体做法:让负载电流从5A跳到10A,观察输出电压的恢复波形。如果相位裕度在45度以上,波形应该是单调恢复或者只有很小的过冲。如果看到明显的振铃,说明相位裕度不足。
实测中我发现一个现象:理论推导的穿越频率是50kHz,但实测的负载阶跃响应显示系统带宽只有30kHz左右。排查后发现是电流检测电路的带宽限制了实际电流环的响应速度。电流检测运放的带宽只有1MHz,在500kHz开关频率下,电流环的延迟不可忽略。
这个坑很典型——理论推导假设电流环是理想的,但实际电路中电流检测、比较器、驱动都有延迟。这些延迟在低频段影响不大,但在高频段会显著降低相位裕度。
实操心得:如果实测带宽明显低于理论值,先检查电流检测电路的带宽和延迟。我一般会选带宽至少10MHz的电流检测运放,比较器延迟小于50ns。
4. 常见问题与排查技巧实录
4.1 传递函数推导中容易搞错的几个点
第一个坑:采样增益Ri的定义。不同教材对Ri的定义不一样,有的把Ri定义为1,有的定义为1/(1+Se/Sn)。我建议统一用Ri = 1/(1+Se/Sn),这样物理意义清晰——Ri就是电流环的等效增益衰减因子。
第二个坑:电感电流平均值的表达式。很多人直接写iL_avg = ic,忽略了纹波项。在CCM下,iL_avg = ic - ΔiL/2,这个ΔiL/2在小信号分析中会引入一个与D有关的项,不能随便丢掉。
第三个坑:采样极点的频率。采样极点不是出现在开关频率处,而是出现在开关频率的一半处。这是因为峰值电流模式本质上是一个采样系统,采样频率等于开关频率,根据采样定理,采样效应在fsw/2处开始显现。
第四个坑:斜坡补偿的符号。斜坡补偿是加在电流检测信号上的,等效于降低了控制信号的有效值。所以Ri = 1/(1+Se/Sn)是小于1的,不是大于1。
4.2 仿真与实测对不上的排查思路
| 现象 | 可能原因 | 排查方法 |
|---|---|---|
| 仿真带宽高于实测 | 电流检测延迟 | 测量电流检测运放带宽和比较器延迟 |
| 仿真相位裕度高于实测 | 采样极点未考虑 | 检查传递函数是否包含采样极点修正项 |
| 低频增益对不上 | 斜坡补偿过大 | 检查Se/Sn比值,确认Ri计算正确 |
| 高频段增益异常 | ESR零点未考虑 | 在传递函数中加入ESR零点 |
| 阶跃响应振铃 | 补偿器零点位置不对 | 调整零点频率,使其接近主极点 |
这个表是我在实际调试中总结出来的,基本上覆盖了80%以上的问题。剩下的20%通常是PCB布局、接地、噪声耦合等非理想因素导致的,那些就需要用示波器和频谱仪慢慢查了。
4.3 数字电源中的离散化实现要点
如果做的是数字电源,传递函数还需要离散化。常用的方法有双线性变换(Tustin)和零极点匹配法。
双线性变换的公式:
s = (2/Ts) * (1 - z^-1) / (1 + z^-1)其中Ts是采样周期。把s代入连续传递函数,整理后得到z域传递函数。
我一般用MATLAB的c2d函数直接做离散化:
Ts = 1/500e3; Gvc_d = c2d(Gvc, Ts, 'tustin');离散化之后,注意检查离散系统的极点是否都在单位圆内。如果有个别极点在单位圆外,说明采样频率太低或者连续模型本身有问题。
数字电源还有一个坑:计算延迟。从ADC采样到PWM更新,通常有一个开关周期的延迟。这个延迟在连续模型中表现为e^(-s*Ts),在离散模型中表现为z^-1。设计补偿器时必须把这个延迟考虑进去,否则实际相位裕度会比理论值低很多。
注意:计算延迟对相位裕度的影响在穿越频率处约为360 * f_c * Ts度。如果穿越频率是50kHz,开关频率是500kHz,延迟就是360 * 50000 * 2e-6 = 36度。这个影响非常大,必须补偿。
4.4 多相BUCK中的传递函数变化
如果做的是多相交错BUCK,传递函数会发生变化。多相BUCK的等效开关频率是单相的N倍(N是相数),所以采样极点频率也提高到N * fsw / 2。同时,等效电感变为L/N,等效输出电容不变。
这意味着多相BUCK的带宽可以做得更高,动态响应更好。但代价是每相的电流检测和均流控制需要额外设计。
我在做一个4相BUCK的时候,一开始直接套用单相传递函数,结果补偿器设计出来带宽只有单相的水平。后来把等效电感改成L/4,采样极点改成2MHz,重新设计补偿器,带宽才提上去。
4.5 常见问题速查表
| 问题 | 排查方向 | 解决方法 |
|---|---|---|
| 系统振荡 | 相位裕度不足 | 降低穿越频率或调整补偿器零点 |
| 次谐波振荡 | 斜坡补偿不足 | 增大Se,使Se/Sn > 0.5 |
| 负载阶跃恢复慢 | 带宽太低 | 提高穿越频率,但注意采样极点限制 |
| 输出电压纹波大 | 输出电容不够 | 增大C或降低ESR |
| 轻载效率低 | 进入DCM | 考虑DCM模式下的传递函数或加入跳周期模式 |
| 高频噪声大 | 采样极点未补偿 | 在补偿器中加入高频极点 |
| 数字控制延迟大 | 计算延迟未补偿 | 在补偿器中加入相位超前或降低穿越频率 |
这个表可以贴在工位上,调试的时候随时对照。
5. 从推导到落地的几个关键决策点
5.1 什么时候用一阶模型,什么时候用二阶修正模型
一阶模型(只有主极点)在穿越频率低于开关频率的1/20时足够准确。比如开关频率500kHz,穿越频率25kHz以下,一阶模型完全够用。
但如果穿越频率做到50kHz以上,就必须用二阶修正模型,把采样极点考虑进去。否则相位裕度估计会偏高10到20度,实际系统可能振荡。
我的经验是:穿越频率取开关频率的1/10是一个比较激进的方案,需要精确的模型和良好的电流检测电路。如果电流检测延迟较大,建议取1/15到1/20。
5.2 斜坡补偿的工程选择
斜坡补偿Se的选择是一个折中:
- Se太小:占空比大于50%时次谐波振荡
- Se太大:电流环增益降低,低频增益下降,动态响应变慢
理论最优值是Se = Sf,此时Ri = 1/(1+1) = 0.5,电流环增益减半。但实际中我一般取Se = 0.5Sf到0.7Sf,这样Ri在0.59到0.67之间,兼顾稳定性和动态响应。
如果输入电压范围很宽,比如Vin从8V到20V变化,那么Sn和Sf都会变化,Se需要按照最恶劣情况设计。最恶劣情况是Vin最大时,此时Sn最大,Se/Sn最小,最容易发生次谐波振荡。所以Se应该按照Vin_max来设计。
5.3 电流检测方案对传递函数的影响
电流检测方案直接影响Ri和采样延迟。常见的方案有:
- 电阻检测:在低侧开关管源极串联一个检测电阻。优点是简单、便宜;缺点是损耗大,有共模噪声。
- 电感DCR检测:利用电感直流电阻上的压降检测电流。优点是无损;缺点是精度低,温度漂移大。
- 电流互感器:适用于高侧检测。优点是隔离、损耗小;缺点是体积大、成本高。
- MOSFET Rds(on)检测:利用开关管导通电阻检测电流。优点是无损;缺点是精度极差,温度系数大。
我一般用电阻检测做低侧检测,因为简单可靠。检测电阻取10mΩ到50mΩ之间,太小了信噪比不够,太大了损耗大。
检测电阻上的电压经过运放放大后送到比较器。运放的带宽和压摆率直接影响电流环的响应速度。我选运放的时候,带宽至少10MHz,压摆率至少50V/μs。
5.4 从连续域到数字域的完整流程
数字电源的完整设计流程:
- 确定功率级参数(Vin, Vout, Iout, fsw, L, C)
- 计算工作点(D, ΔiL, m1, Sf)
- 选择斜坡补偿Se,计算Ri
- 写出连续传递函数Gvc(s)
- 设计连续补偿器Gc(s)
- 用c2d离散化,得到Gc(z)
- 在数字信号处理器中实现差分方程
- 实测验证,调整参数
这个流程我走过很多遍,每一步都有坑。最大的坑是第6步和第7步之间的量化效应。数字信号处理器的定点运算会引入量化噪声,如果补偿器的极点靠近单位圆,量化噪声会被放大。所以离散化之后,最好用浮点仿真验证一下,再在定点数字信号处理器上实现。
实操心得:数字电源的补偿器系数不要用太高阶的,Type II就够了。高阶补偿器对量化噪声更敏感,而且调试起来麻烦。
6. 我个人在实际操作中的体会
峰值电流模式CCM BUCK的传递函数推导,说难不难,说简单也不简单。核心就是抓住三点:电感电流平均值与峰值的关系、斜坡补偿对采样增益的影响、采样极点的高频修正。把这三点搞清楚,传递函数自然就出来了。
我踩过最大的坑是忽略了电流检测延迟。理论推导和仿真都很好,一上电就振荡。后来用示波器看电流检测运放的输出,发现比理想波形延迟了200ns。200ns在500kHz开关频率下就是36度的相位损失,直接把相位裕度吃光了。换了运放之后问题解决。
另一个坑是斜坡补偿的斜率选择。一开始按照教材取Se = Sf,结果动态响应很慢。后来改成Se = 0.5*Sf,动态响应明显改善,而且没有次谐波振荡。所以教材上的最优值不一定适合你的应用,还是要根据实际情况调整。
最后分享一个小技巧:推导传递函数的时候,先把所有参数用符号表示,最后再代入数值。这样如果参数变了,只需要重新代入数值,不用重新推导。而且符号表达式能让你看清楚每个参数对传递函数的影响,方便优化设计。