
1. 为什么峰值电流模式BUCK的传递函数值得手推一遍搞电源的人迟早会撞上这个问题环路补偿做完了相位裕度看着也够但一上电动态响应就是不对劲负载跳变时振铃大得离谱。这时候如果你只会拿仿真软件跑个AC扫描大概率会陷入“改补偿参数—重跑—还是不对”的死循环。根子往往在于你并不真正理解峰值电流模式CCM BUCK的传递函数是怎么来的也就不知道哪个极点、哪个零点在捣乱。峰值电流模式Peak Current ModePCM的BUCK变换器在CCM连续导通模式下的传递函数推导是电源工程师从“会抄电路”到“会设计环路”的分水岭。它不像电压模式那样直观——电压模式的功率级就是一个二阶LC滤波器加一个ESR零点推导过程教科书上写得明明白白。峰值电流模式引入了一个内环电流环把电感电流的斜坡直接反馈到PWM比较器整个系统的动态特性发生了质变功率级从二阶降为一阶但同时又引入了采样保持效应带来的高频双极点、斜坡补偿带来的额外影响以及占空比大于50%时的次谐波振荡风险。这篇文章面向的是已经做过BUCK电路、但想彻底搞明白峰值电流模式传递函数推导过程的工程师。我会从最基本的电感电流波形出发一步步推到控制到输出的传递函数再补充采样效应的建模、斜坡补偿的影响最后给出实际环路补偿时的注意事项。整个过程不跳步每个近似条件都会说清楚为什么可以这样近似。你跟着推一遍以后调环路就不会再靠运气了。2. 从电感电流波形到PWM比较器的控制逻辑2.1 CCM下电感电流的上升与下降斜率先回到最基础的BUCK拓扑。CCM意味着电感电流在整个开关周期内始终大于零不会降到零后停滞。一个开关周期内电感电流分为两段开关管导通期间电感两端电压为输入电压减去输出电压电流线性上升开关管关断期间电感通过续流管续流两端电压为负的输出电压电流线性下降。设输入电压为 ( V_g )输出电压为 ( V_o )电感量为 ( L )开关周期为 ( T_s )占空比为 ( D )。导通期间电感电流上升斜率为[ m_1 \frac{V_g - V_o}{L} ]关断期间电感电流下降斜率为[ m_2 \frac{V_o}{L} ]稳态时一个周期内电流的净变化为零所以 ( m_1 D T_s m_2 (1-D) T_s )这直接给出 ( V_o D V_g )。这个关系后面推导传递函数时会反复用到。峰值电流模式的核心在于PWM比较器不再只比较误差放大器的输出与固定锯齿波而是比较误差放大器输出与电感电流采样信号。当电感电流上升到误差放大器输出对应的阈值时开关管关断。这就意味着误差放大器的输出直接控制了电感电流的峰值而不是直接控制占空比。2.2 峰值电流控制的内在逻辑电感电流峰值跟随误差信号理解峰值电流模式的关键是认识到它把电感电流变成了一个受控电流源。在低频段远低于开关频率电感电流的平均值近似等于峰值减去一半的纹波。而峰值由误差放大器输出 ( v_c ) 决定[ i_{L,pk} \frac{v_c}{R_i} ]其中 ( R_i ) 是电流采样增益比如采样电阻阻值或者电流互感器的等效增益。那么电感电流平均值近似为[ i_L \approx \frac{v_c}{R_i} - \frac{1}{2} m_1 D T_s ]这个式子说明误差放大器输出 ( v_c ) 通过控制电感电流峰值间接控制了电感电流平均值。而电感电流平均值又决定了输出电流输出电流与负载电流的差值对输出电容充放电最终决定输出电压。这就是峰值电流模式功率级传递函数推导的主线。但这里有一个微妙之处( v_c ) 到 ( i_L ) 的传递关系并不是简单的 ( 1/R_i )因为占空比 ( D ) 本身也出现在表达式中。当 ( v_c ) 变化时( D ) 会变化而 ( D ) 的变化又会影响 ( m_1 D T_s ) 这一项。所以需要更仔细地建立小信号模型。2.3 一阶近似为什么低频段功率级像单极点系统在低频段可以忽略采样效应和斜坡补偿的影响先建立一个简化模型。对上述电感电流平均值表达式做小信号扰动分析。设 ( v_c ) 有微小扰动 ( \hat{v}_c )引起占空比扰动 ( \hat{d} )进而引起电感电流扰动 ( \hat{i}_L )。从峰值控制关系出发电感电流峰值扰动为 ( \hat{i}_{L,pk} \hat{v}_c / R_i )。而电感电流平均值扰动为[ \hat{i}L \hat{i}{L,pk} - \frac{1}{2} m_1 T_s \hat{d} - \frac{1}{2} D T_s \hat{m}_1 ]其中 ( \hat{m}_1 (\hat{v}_g - \hat{v}_o)/L )。这个式子看起来复杂但可以进一步简化。在推导控制到输出传递函数时通常假设输入电压恒定即 ( \hat{v}_g 0 )那么 ( \hat{m}_1 -\hat{v}_o/L )。另一方面从电感电流与输出电压的关系来看电感电流扰动 ( \hat{i}_L ) 流入输出网络输出电容和负载并联输出阻抗为 ( Z_o R_L \parallel (1/sC) )。所以 ( \hat{v}_o \hat{i}_L Z_o )。把这两个关系联立可以解出 ( \hat{v}_o / \hat{v}_c )。经过整理会得到一个一阶传递函数的形式[ G_{vc}(s) \frac{\hat{v}_o}{\hat{v}_c} \frac{R_L}{R_i} \cdot \frac{1}{1 s R_L C} ]这个结果非常漂亮峰值电流模式在低频段把功率级变成了一个单极点系统极点由输出电容和负载电阻决定即 ( \omega_p 1/(R_L C) )。这就是为什么峰值电流模式的环路补偿比电压模式容易——电压模式有两个极点LC谐振峰值电流模式只有一个主导极点。但要注意这个一阶近似只在低频段成立而且忽略了斜坡补偿和采样效应。实际设计中开关频率附近的高频特性会偏离这个简单模型需要进一步修正。3. 采样保持效应与斜坡补偿如何改写传递函数3.1 电流环的采样本质开关频率处的双极点从哪来上一节的一阶模型在低频段很好用但一旦频率接近开关频率的一半就会出问题。原因是峰值电流模式本质上是一个采样系统电感电流只在开关周期内的特定时刻被采样通常是开关管关断瞬间然后与误差信号比较。采样过程会引入相位延迟在频域表现为一对高频双极点。这个采样效应的建模经典的方法是Ridley在1991年提出的模型。他把电流环的采样保持效应等效为一个采样增益 ( H_e(s) )其表达式为[ H_e(s) \frac{s T_s}{e^{s T_s} - 1} ]这个函数在低频时近似为1但在高频时引入相位滞后。当频率达到 ( f_s/2 ) 时相位滞后达到180度等效为一对共轭极点位置大约在 ( f_s/\pi ) 附近。对于实际设计这意味着环路带宽不能太接近开关频率的一半否则采样效应会导致相位裕度急剧下降。我自己的经验是峰值电流模式的环路穿越频率一般取开关频率的1/10到1/6。比如开关频率500kHz穿越频率设在50kHz到80kHz比较稳妥。如果硬要推到100kHz以上采样双极点带来的相位滞后会让相位裕度很难做。3.2 斜坡补偿改变了什么从次谐波振荡到传递函数修正峰值电流模式有一个众所周知的痛点当占空比大于50%时如果没有斜坡补偿电感电流扰动会逐周期放大导致次谐波振荡。斜坡补偿的做法是在电流采样信号上叠加一个固定斜率的补偿斜坡 ( m_a )或者从误差信号中减去补偿斜坡。斜坡补偿不仅解决了稳定性问题还直接改变了传递函数。在Ridley模型中斜坡补偿的影响体现在两个地方一是修改了电流环的等效增益二是引入了一个额外的零点或极点。具体来说定义补偿斜率与电感电流下降斜率之比为 ( \alpha m_a / m_2 )。在Ridley的模型里控制到输出的传递函数中会出现一个因子 ( (1 \alpha) ) 在分母上同时采样增益 ( H_e(s) ) 也会被修正。当 ( \alpha ) 增大时电流环的增益下降功率级的等效带宽降低但稳定性变好。实际设计中斜坡补偿量通常取 ( m_a \geq 0.5 m_2 )这样即使占空比接近100%也不会出现次谐波振荡。但补偿太多会降低电流环的响应速度所以需要在稳定性和动态响应之间折中。我一般取 ( m_a 0.5 m_2 ) 到 ( m_a 1.0 m_2 ) 之间具体看占空比范围和动态要求。3.3 完整的控制到输出传递函数把各环节拼起来把前面的分析整合起来峰值电流模式CCM BUCK的控制到输出传递函数可以写成[ G_{vc}(s) \frac{R_L}{R_i (1 \alpha)} \cdot \frac{1}{1 s R_L C} \cdot H_e(s) \cdot F_h(s) ]其中 ( H_e(s) ) 是采样保持效应( F_h(s) ) 是高频修正项通常包含一个右半平面零点来自电感电流采样和一个高频极点。右半平面零点大约在 ( f_s/2 ) 附近它会带来相位滞后进一步限制带宽。这个传递函数的低频行为由 ( R_L / [R_i (1\alpha)] ) 决定主极点由 ( 1/(R_L C) ) 决定高频行为由采样效应和右半平面零点主导。实际环路补偿时误差放大器的补偿网络需要在这个传递函数的基础上设计通常采用Type II补偿一个极点、一个零点、一个原点极点把穿越频率设在主极点和采样双极点之间。4. 从传递函数到环路补偿实际设计中的取舍4.1 穿越频率怎么定不是越高越好拿到传递函数之后下一步就是设计补偿网络。很多新手会本能地想把穿越频率做高觉得响应快。但在峰值电流模式BUCK里穿越频率受限于两个因素采样双极点和右半平面零点。采样双极点的位置大约在 ( f_s/\pi )右半平面零点大约在 ( f_s/2 )。为了保证足够的相位裕度穿越频率一般不超过 ( f_s/6 )。如果输出电容的ESR较大ESR零点可能会在较低频率出现这时候可以适当提高穿越频率但也不能超过上述限制。我通常的做法是先根据负载跳变要求估算需要的带宽。比如负载从满载跳到半载允许的输出电压跌落为 ( \Delta V )那么需要的带宽大约为 ( f_c \approx I_{step} / (2 \pi C \Delta V) )。算出来的带宽再和 ( f_s/6 ) 比较取较小的那个作为设计目标。4.2 补偿网络参数计算一个具体例子假设一个峰值电流模式BUCK输入12V输出3.3V开关频率500kHz电感10μH输出电容100μFESR 5mΩ负载电阻1Ω电流采样增益 ( R_i 0.1 \Omega )斜坡补偿 ( \alpha 0.5 )。先算主极点( f_p 1/(2\pi R_L C) 1/(2\pi \times 1 \times 100\mu) \approx 1.6kHz )。低频增益( G_0 R_L / [R_i (1\alpha)] 1 / (0.1 \times 1.5) \approx 6.67 )即16.5dB。穿越频率目标取 ( f_c 50kHz )。在 ( f_c ) 处功率级增益大约为 ( G_0 \times f_p / f_c 6.67 \times 1.6k / 50k \approx 0.213 )即-13.4dB。所以补偿网络需要在 ( f_c ) 处提供约13.4dB的增益。采用Type II补偿误差放大器跨导为 ( g_m )补偿网络为 ( R_c ) 串联 ( C_c )再并联 ( C_p )。零点设在主极点附近 ( f_z 1.6kHz )极点设在采样双极点之前 ( f_p 100kHz )。根据这些条件可以算出 ( R_c )、( C_c )、( C_p ) 的值。具体计算过程这里不展开但思路是先满足 ( f_c ) 处的增益要求再放置零极点位置。4.3 实测验证仿真和实际波形对不上的常见原因理论推导再漂亮最终还是要看实测。我见过很多次仿真环路裕度很好但实际板子一上电就振荡的情况。常见原因有几个第一电流采样信号被噪声污染。峰值电流模式对电流采样噪声非常敏感尤其是采样电阻上的尖峰。如果采样信号没有经过足够的滤波PWM比较器可能会提前翻转导致占空比抖动。解决办法是在采样信号上加RC滤波但滤波时间常数不能太大否则会引入额外相位滞后。第二斜坡补偿不足或过多。补偿不足会导致次谐波振荡表现为开关波形一宽一窄交替补偿过多会降低电流环增益导致动态响应变慢。实测时可以用示波器观察电感电流波形如果看到明显的交替脉动就是补偿不够。第三输出电容的ESR和实际值偏差大。电解电容的ESR随频率和温度变化很大如果按标称值设计补偿实际可能会偏。建议用LCR表实测电容的ESR和容值再代入计算。第四PCB布局引入的寄生参数。功率回路的寄生电感会在开关瞬间产生电压尖峰影响电流采样。尽量缩短功率回路采样电阻用开尔文连接减少寄生电感的影响。5. 数字电源中的离散化从s域到z域的落地5.1 为什么数字电源不能直接套用模拟传递函数现在越来越多的电源设计转向数字控制用DSP或MCU实现环路补偿。但数字控制有一个根本区别它是离散时间系统采样、计算、更新PWM占空比都有延迟。直接把模拟的s域传递函数拿过来用会发现相位裕度比预期差很多。数字控制引入的延迟主要包括三部分ADC采样和转换时间、控制算法计算时间、PWM更新延迟。这些延迟加起来通常是一个到两个开关周期。在频域上一个开关周期的延迟等效为 ( e^{-sT_s} )在穿越频率处会带来额外的相位滞后。如果穿越频率是 ( f_s/10 )一个周期的延迟带来36度相位滞后两个周期就是72度这足以吃掉大部分相位裕度。所以数字电源设计时要么降低穿越频率要么在补偿网络中提前加入相位超前补偿这个延迟。5.2 双线性变换与零极点匹配两种离散化方法的取舍把s域传递函数离散化的常用方法有两种双线性变换Tustin和零极点匹配。双线性变换的公式是 ( s \frac{2}{T_s} \frac{z-1}{z1} )它把s平面的左半平面映射到z平面的单位圆内稳定性保持。但双线性变换会引入频率畸变高频段的频率对应关系非线性需要在设计时做预畸变。零极点匹配法是直接把s域的零点和极点映射到z域( z e^{sT_s} )。这种方法在低频段和双线性变换结果接近在高频段更准确但计算稍复杂。实际工程中如果穿越频率远低于开关频率比如 ( f_c f_s/20 )两种方法差别不大用双线性变换就够了。如果穿越频率较高建议用零极点匹配或者用双线性变换加预畸变。5.3 数字补偿器的实现细节量化误差和计算延迟离散化之后得到z域传递函数接下来要在MCU或DSP上实现。通常写成差分方程的形式[ y[n] b_0 x[n] b_1 x[n-1] b_2 x[n-2] - a_1 y[n-1] - a_2 y[n-2] ]其中 ( x[n] ) 是误差信号( y[n] ) 是控制输出。实现时要注意几个问题第一系数量化。定点DSP的系数位宽有限量化误差会改变零极点位置。如果零极点靠近单位圆量化误差可能导致不稳定。建议用至少16位系数或者用浮点DSP。第二计算延迟。从ADC采样到PWM更新中间的计算时间会引入额外延迟。如果计算时间超过一个开关周期等效延迟增加相位裕度进一步下降。优化代码、提高主频、用硬件加速器都可以减少计算延迟。第三积分饱和。数字补偿器通常包含积分项启动或大信号跳变时积分器可能饱和。需要加抗饱和逻辑比如积分分离或反计算抗饱和。6. 几个容易搞混的概念CCM/DCM、同步/异步、峰值/平均电流6.1 CCM和DCM的传递函数差异有多大前面推导的都是CCM下的传递函数。如果负载电流降到临界值以下电感电流在关断期间会降到零并停滞进入DCM。DCM下功率级的传递函数完全不同它不再是单极点系统而是包含一个低频极点和一个高频极点而且直流增益与负载电流有关。DCM下的峰值电流模式传递函数推导更复杂因为电感电流峰值和平均值的关系不再是线性的。实际设计中如果负载范围宽可能会在轻载时进入DCM这时候环路特性会变化。解决办法是保证在最低负载电流时仍然处于CCM或者接受轻载时带宽下降但确保稳定性。我一般会在设计时留够电感量让额定负载的20%以上仍然处于CCM。如果实在做不到就在轻载时切换补偿参数或者用DCM下的传递函数重新设计补偿。6.2 同步整流和异步整流对传递函数的影响同步BUCK用MOSFET代替续流二极管导通电阻更低效率更高。从传递函数的角度看同步和异步的主要区别在于续流期间的压降不同。异步BUCK的续流二极管有固定压降 ( V_f )而同步BUCK的续流MOSFET压降为 ( I_L R_{ds(on)} )与电流有关。这个区别在推导传递函数时会影响下降斜率 ( m_2 )。异步BUCK的 ( m_2 (V_o V_f)/L )同步BUCK的 ( m_2 V_o/L )忽略导通电阻。下降斜率不同斜坡补偿的需求也不同。同步BUCK的 ( m_2 ) 略小所以需要的补偿斜坡也略小。另外同步BUCK在轻载时可能进入DCM或者强制PWM模式这会影响轻载效率但不改变CCM下的传递函数形式。6.3 峰值电流模式和平均电流模式的传递函数对比峰值电流模式控制的是电感电流峰值平均电流模式控制的是电感电流平均值。两者的传递函数有相似之处也有重要区别。平均电流模式需要一个电流误差放大器把电感电流平均值与参考值比较输出控制占空比。这个内环的带宽通常比峰值电流模式低但抗噪声能力更强。传递函数上平均电流模式的功率级更接近电压模式有两个极点但电流环把其中一个极点推向高频。峰值电流模式的优势是响应快、自动均流多相并联时但抗噪声差。平均电流模式的优势是抗噪声好、适合高功率应用但响应稍慢。选择哪种模式取决于具体应用对动态响应和噪声环境的要求。7. 推导过程中那些容易被忽略的假设条件7.1 小信号近似的前提扰动不能太大整个传递函数推导都基于小信号近似即假设扰动幅度远小于稳态值。如果负载跳变幅度很大比如从空载跳到满载小信号模型就不再准确。这时候需要考虑大信号行为比如电感电流的斜率限制、误差放大器的摆率限制等。实际调试时如果发现大负载跳变下的响应和用小信号模型预测的差很多不要怀疑传递函数推错了而是要考虑大信号效应。解决办法是在误差放大器输出加钳位限制最大占空比变化率或者用非线性补偿。7.2 忽略寄生参数带来的误差推导中忽略了电感的直流电阻、电容的ESR和ESL、PCB走线电阻等寄生参数。这些寄生参数在低频段影响不大但在高频段会改变零极点位置。比如输出电容的ESL会在很高频率产生一个零点如果穿越频率接近这个零点相位裕度会受影响。一般来说如果穿越频率低于 ( f_s/10 )寄生参数的影响可以忽略。如果穿越频率较高建议在仿真中把这些寄生参数加进去看看实际裕度。7.3 电流采样增益的非线性推导中假设电流采样增益 ( R_i ) 是常数。实际中如果用采样电阻阻值随温度变化如果用电流互感器磁芯可能饱和如果用MOSFET的 ( R_{ds(on)} ) 采样导通电阻随温度和电流变化。这些非线性因素会导致实际电流环增益与设计值偏差。解决办法是留足够的增益裕度或者在电路中加温度补偿。对于高精度应用建议用低温漂的采样电阻或者用电流互感器加温度补偿。8. 我在实际项目中踩过的坑和总结的经验第一次独立设计峰值电流模式BUCK时我按照教科书上的公式算了补偿参数仿真看着完美结果板子一上电就啸叫。用示波器看电感电流波形发现一宽一窄交替典型的次谐波振荡。当时占空比大约60%斜坡补偿只加了很小一点以为够了。后来把补偿斜坡加大到 ( m_a 0.8 m_2 )振荡消失。这件事让我明白斜坡补偿不能抠宁可多补一点牺牲一点响应速度也要保证稳定。还有一次是数字电源项目用DSP实现补偿器。s域设计好了双线性变换离散化系数算出来直接写进代码。结果实测相位裕度只有20度和仿真的60度差远了。排查了很久才发现ADC采样到PWM更新之间有两个开关周期的延迟这个延迟在s域仿真里没加进去。后来在补偿网络里加了一个超前零点把相位补回来裕度恢复到50度以上。第三个坑是电流采样噪声。有一版板子为了省成本采样电阻没有加RC滤波结果PWM比较器被开关噪声误触发占空比抖动严重。后来在采样信号上加了一个时间常数约50ns的RC滤波问题解决。但滤波时间常数不能太大否则会引入额外相位滞后影响环路稳定性。这些经验归结起来就是传递函数推导是基础但实际设计要考虑采样延迟、噪声、寄生参数、非线性等一堆因素。理论指导方向实测验证结果两者缺一不可。对于想深入学习峰值电流模式传递函数的同行我的建议是先自己手推一遍简化模型理解每个零极点的物理意义然后用仿真软件验证推导结果看看AC扫描曲线是否和理论一致最后在实际电路上测试对比理论、仿真和实测的差异分析差异来源。这个过程走一遍比看十篇文章都管用。