1. 开篇:先搞清楚双闭环在忙什么
干电源这行的人都清楚,非隔离 DC-DC 变换器(Buck、Boost、Buck-Boost)做控制设计,绝大多数绕不开 PI 调节器。单电压环看着简单,真到负载突变、输入电压波动、输出动态跌落要求高的时候,单环往往压不住。这时候就得把电流环也拉进来,组成电压外环、电流内环的双闭环结构,也就是标题里说的这套东西。
双闭环到底解决什么问题?我自己的理解是三层。第一,电流内环把电感电流变成了一个受控量,外环只要发电流指令就行,不用再直接跟 LC 二阶环节搏斗,系统被“降阶”了,整定难度大幅下降。第二,内环带宽高,响应快,输入电压扰动还没传到输出,先在内环就被抵消掉大半,这是纯电压单环做不到的。第三,多了一个天然限流手段,内环指令一钳位,峰值电流就受限,短路保护和过流保护实现起来非常顺手。
今天这篇是应用篇,不讲太多“从零推导状态空间平均方程”的数学,重点放在三件事:被控对象的传递函数怎么拿、内环和外环的 PI 参数分别怎么算、以及从仿真到样机调试会遇到哪些坑。适合已经开始做电源控制、但一调环路就“凭感觉试探”的工程师朋友,也适合研究生阶段做数字电源控制课题的同学拿来当作业参考。
先说一句大实话:参数整定这件事,十分钟可以讲完,十年也说不完。因为拓扑不同、工作模态不同、数字实现延迟不同,同样的 PI 值在这个板子上稳如老狗,换一块板子就可能啸叫。所以看完文章别急着背公式,要把思路带走——知道每个参数是在跟系统的什么“性格”打交道,比记住一组数值重要得多。
2. 整定之前:把被控对象的传递函数理清楚
很多人一上来就调 PI,调了半天没头绪,问题就出在没搞清楚“我在控制一个什么样的对象”。双闭环里有两个被控对象需要分别面对:占空比到电感电流的传递函数(内环用),以及电流指令到输出电压的传递函数(外环用)。这两个对象的特性差得很远。
以最常见的 Buck 电路为例,忽略寄生参数、假设工作在连续导电模式(CCM),用小信号线性化可以推出从占空比扰动 \hat d 到电感电流扰动 \hat i_L 的传递函数为:
G_id(s) = Vin × (1 + sRC) / [sL(1 + sRC) + R]
看着复杂,但在电流环设计关心的频段(开关频率的 1/10 到 1/5 附近),分母里的 sL 项远大于其他项,这个传递函数可以简化成:
G_id(s) ≈ Vin / (sL)
也就是说,高频段下电感电流对占空比扰动基本就是个纯积分环节。这在物理上很好理解:电感两端电压近似等于 Vin 乘占空比变化量,电流自然就是电压对时间的积分。积分环节的相频特性是恒定的 -90 度,这给内环补偿提供了很大的便利——我们只要用 PI 调解器的零点去“托住”这个积分斜率,相位裕度就不难看。这也是为什么电流内环整定通常比电压外环整定要省心的根本原因。
从占空比到输出电压的传递函数则不同:
G_vd(s) = Vin / [1 + sL/R + s²LC]
这是一个典型的二阶环节,在谐振频率 f_LC = 1/(2π√(LC)) 附近,相位从 0 度急剧掉到 -180 度,幅频特性出现一个很高的谐振峰。如果不加电流内环,直接让电压环路去跟这个二阶环节对抗,补偿网络必须非常小心地设计,否则很容易在谐振点附近出现环路振荡。加了电流内环之后,这个二阶特性就被“藏”到内环里面了,电压外环面对的是一个近似一阶的对象,整定难度立刻降了一个量级。
Boost 和 Buck-Boost 的情况要更麻烦一些。这两种拓扑在连续模式下的控制到输出传递函数里,有一个右半平面零点,频率大约是:
f_RHPZ = R(1-D)² / (2πL)
这个零点的可怕之处在于:它提供的是相位滞后,而不是普通零点的相位超前。也就是说,环路增益曲线过了这个频率之后,相位会额外往 -90 度方向掉,而且这个频率随着负载变轻、电感变大而降低。很多人在 Boost 电路上调环路,明明按照常规 PI 设计算出来带宽和相位裕度都还行,实际一上电却低频振荡,多半就是没把右半平面零点考虑进去。处理原则是:电压外环带宽必须明显低于右半平面零点频率,一般取 1/3 到 1/5。负载越轻,零点越低,环路带宽就得跟着降,这在设计指标阶段就要想清楚,否则后面怎么调 PI 都白搭。
说了这么多理论,实际操作时还有一个更可靠的手段:直接测。现在不少实验室有条件用环路分析仪(频率响应分析仪)搭配注入变压器,在一台贴着实际的样机上直接扫出被控对象的 Bode 图。注入点通常选在误差放大器输出到 PWM 比较器输入之间,注入变压器串进去,从误差放大器输出端反着看进去就是补偿网络加被控对象的开环传递函数。具体测出来的是整个环路的增益曲线,其中包括了功率级、PWM 调制器、采样环节和补偿网络,比纯靠公式推算更贴近真实情况——公式里忽略的寄生参数、驱动延迟、采样保持相位滞后,全部都会真实地反映在这条曲线上。我的习惯是:第一版参数按公式算,样机到手后先测量,再用测得的数据反过来校准模型参数,两轮下来手里这套模型就非常“可信”了,之后做任何改动都能用模型快速预判。
3. 电流内环的 PI 参数整定:快是第一要务
3.1 平均电流模式下的环路结构与增益推导
电流内环做得好不好,核心只有一个字:快。内环带宽必须远高于外环带宽,才能保证外环设计时可以把内环近似成一个理想电流源。工程上常用的准则是内环带宽取开关频率的 1/10 到 1/5,数值控制里因为存在运算延迟,还要在此基础上再砍一点。如果内环带宽落到了开关频率的 1/10 以下,其实也不是不能用,但外环带宽会跟着受限,动态性能就不好看了。
以平均电流模式、模拟 PI 调节器为例,电流环的开环传递函数可以写成:
T_i(s) = C_i(s) × F_m × G_id(s) × R_s
其中 C_i(s) 是电流补偿器(PI)的传递函数,F_m 是 PWM 调制器增益,等于三角波峰峰值的倒数,R_s 是电流采样电阻的等效增益(包括放大倍数)。假设三角波幅值 V_pp,则 F_m = 1/V_pp。把上节的 G_id(s) ≈ Vin/(sL) 代进去,得到:
T_i(s) ≈ C_i(s) × Vin × F_m × R_s / (sL)
假设 PI 调节器为 C_i(s) = Kp_i + Ki_i/s,也就是 Kp_i×(1 + ω_z/s),ω_z 为 PI 零点角频率。在穿越频率 f_ci 处,如果 PI 零点取得足够低,PI 在穿越频率附近的增益基本等于 Kp_i,于是穿越频率处的环路增益可以近似为:
|T_i| ≈ Kp_i × Vin × F_m × R_s / (2π f_ci L)
令环路增益等于 1,就可以解出:
Kp_i = 2π f_ci L / (Vin × F_m × R_s)
至于 Ki_i,则根据期望的 PI 零点位置来确定。零点一般放在穿越频率的 1/10 到 1/5 处,目的是在穿越频率附近提供足够的相位提升。常用的取法是 f_z = f_ci/10,于是:
Ki_i = 2π f_z × Kp_i
3.2 内环带宽与 PI 参数的定量计算
光有公式不够,我们拿一组实际参数走一遍。假设某型 Buck 变换器:输入电压 Vin = 12V,输出 5V,电感 L = 10μH,输出电容 C = 100μF,开关频率 f_sw = 100kHz,电流采样电阻等效增益 R_s = 0.1V/A,PWM 三角波幅值 V_pp = 4V(对应 F_m = 0.25)。
先定内环穿越频率。开关频率的 1/10 是 10kHz,我们取 f_ci = 10kHz。代入 Kp_i 公式:
Kp_i = 2π × 10000 × 10×10⁻⁶ / (12 × 0.25 × 0.1) = 0.628 / 0.3 = 2.09
PI 零点取 1kHz,即 ω_z = 2π × 1000 = 6283 rad/s,于是:
Ki_i = 2π × 1000 × 2.09 = 13134
把这两个值放进仿真里看内环开环 Bode 图,理想情况下穿越频率就在 10kHz 附近,相位裕度在 60 度上下。为什么这么理想?因为内环面对的是近似积分环节,PI 调节器在穿越频率附近贡献的相位接近 0 度(零点远低于穿越频率),系统相位裕度主要取决于 G_id 的 -90 度加上 PI 带来的小量相位滞后,再扣除采样和延迟的相位,最后余量通常还有 50 度以上。所以内环一般不会出现“不知道怎么给相位裕度”的困境,难的是实现层面——采样滤波会把相位拖下来,计算延迟会把相位拖下来,电流检测的共模噪声也可能导致 PWM 比较器误动作。后面第 5 部分我会专门说这些坑。
3.3 峰值电流模式的参数等效处理
顺带提一句峰值电流模式。如果采用峰值电流控制,内环通常不是显式的 PI 调节器,而是一个比较器加 RS 触发器,电流误差直接比较。这种情况下“PI 整定”这个说法不太严格,更常见的操作是调斜坡补偿的斜率。斜坡补偿的目的有两个:一是防止占空比超过 0.5 时出现次谐波振荡,二是改变电流环的有效采样增益。工程上的粗调原则是:补偿斜坡斜率取电感电流下降斜率的 0.5 到 1 倍之间。斜率太小,次谐波压不住;斜率太大,电流环响应会变慢。峰值电流模式的内环动态可以等效成一个一阶惯性环节,等效电流采样增益大约是 R_s×(1 + 斜坡补偿系数),如果你非要把它换算成“等效 PI 参数”来理解,可以认为峰值模式的内环是一个比例控制为主、带宽极高的通道——它本身已经“很快”,电压外环设计时直接把它当理想电流源看就行。
初学阶段我还是建议先练平均电流模式。因为它的每个环节都能显式建模,参数和环路特性的对应关系非常清晰,有助于建立直觉。等你把平均电流模式玩熟了,再去做峰值电流模式,很多概念是相通的。
4. 电压外环的 PI 参数整定:稳才是硬道理
4.1 把内环看成等效“压控电流源”
电流内环整定完毕之后,电压外环的设计对象变了。我们要控制的已经不再是“占空比到电压”这个二阶环节,而是“电流指令到输出电压”。如果内环带宽足够高,电感电流能够快速跟踪电流指令,那么从外环的角度看,功率级等效为一个受控电流源,输出电流等于 i_ref / R_s(R_s 只是电流采样增益的归一化系数)。这个受控电流源直接给输出电容和负载充电,于是从电流指令到输出电压的传递函数简化为:
G_vc(s) = [Z_load(s)] / R_s = [R_load / (1 + s R_load C)] / R_s
在一个周期平均的意义下,这就是一个一阶 RC 网络对电流源的积分响应。相位从 0 度逐渐降到 -90 度,没有谐振峰,没有 -180 度突变,比直接控制占空比的二阶环节温和太多了。这也就是双闭环“降阶”作用的直观体现。
电压外环的带宽受内环带宽约束,经验上取内环带宽的 1/5 到 1/10。以我们上面的例子,内环 10kHz,外环取 1kHz 到 2kHz 比较合适。如果取得太高,外环开始跟内环的相位延迟发生耦合,整个环路会出现“双峰”或低频振荡,这在 Bode 图上表现为相位裕度曲线在穿越频率附近出现非单调变化,很难看懂。
4.2 外环被控对象与 PI 参数计算
继续沿用上面的例子。负载电阻按额定输出 2A、输出 5V 算,R_load = 2.5Ω,输出电容 C = 100μF。外环的“被控对象”为 R_load 与 C 的并联阻抗,穿越频率设 2kHz。在穿越频率附近,由于 2kHz 远高于负载极点 f_p = 1/(2π × 2.5 × 100×10⁻⁶) ≈ 636Hz,电容阻抗起主导作用,被控对象近似为 1/(sC)。
电压外环开环传递函数近似:
T_v(s) ≈ C_v(s) × [1/(2π f R_s C)]
在穿越频率 f_cv 处令环路增益为 1:
Kp_v = 2π f_cv × C × R_s
代入数值:
Kp_v = 2π × 2000 × 100×10⁻⁶ × 0.1 = 0.1257
电压环 PI 零点放在穿越频率的 1/5 到 1/10 处,用来提升低频增益、消除稳态误差。取 f_zv = 400Hz:
Ki_v = 2π × 400 × 0.1257 = 316
到这里,内环 Kp_i = 2.09、Ki_i = 13134,外环 Kp_v = 0.1257、Ki_v = 316,一组初始参数就出来了。你把它放进仿真里看整机开环 Bode 图,通常会发现实际穿越频率会比预期略低,相位裕度也可能比计算值少 10 度左右。这是因为我们在推导过程做了近似,把内环当成理想电流源(实际内环有相位滞后),而且输出电容的 ESR 零点、采样滤波延迟都没有计入。如果仿真结果的穿越频率和相位裕度偏差不大(穿越频率偏差在 30% 以内、相位裕度不小于 45 度),这组参数就可以上板子试了。
这里有个容易忽略的细节:输出电容 ESR 产生的零点。普通电解电容 ESR 可能到几十毫欧甚至上百毫欧,会在几 kHz 到几十 kHz 之间制造一个零点,理论上这个零点能提升相位,对稳定性是好事。但 ESR 零点位置受温度、电容老化影响,并不稳定,你不能把它当成一个可靠的相位裕度来源。反过来,陶瓷电容 ESR 极低,零点推到很高频,等于没有这个零点。设计时应该按“没有 ESR 零点”的保守情况去核算,实际多出来的相位就当是白送的。
4.3 数字控制器里的等效延迟修正
上面这套计算在模拟环路里基本够用,但如果你做数字电源,事情还要再修正一档。数字控制里至少有三个延迟躲不掉:ADC 采样保持延迟、运算执行时间、PWM 寄存器更新延迟。假设开关频率 100kHz,控制周期 10μs,如果程序在中断里采完样、算完 PI、再更新 PWM 比较值,整个过程大约要吃掉半个到一个开关周期,也就是 5μs 到 10μs。在 2kHz 的外环穿越频率上,5μs 延迟对应的相位滞后大约是:
相位滞后 = 360° × 2000 × 5×10⁻⁶ ≈ 3.6 度
单看不大。但要命的是内环,如果内环穿越频率取 10kHz,同样的 5μs 延迟带来的相位滞后就是:
360° × 10000 × 5×10⁻⁶ ≈ 18 度
这 18 度加上采样滤波、比较器延迟、驱动死区,内环相位裕度从设计的 60 度跌到 40 度以下是常有的事。所以数字电源里有两个常见对策:一是做“PWM 更新延迟补偿”,在环路模型里显式加入一个 e^(-sT_d) 环节,然后根据实测 Bode 图校准 T_d;二是把内环带宽从 1/5 开关频率下调到 1/10,用带宽换相位裕度。我自己做数字电源,内环一般取开关频率的 1/8 左右,然后通过实测相位裕度再微调,很少硬上到 1/5。
5. 从仿真到样机:整定流程和调试作业指导
5.1 在仿真里先把参数“跑顺”
我拿到一个新拓扑、新指标,流程永远是:建模计算、平均模型仿真、开关模型仿真、样机实测,四步走。平均模型仿真是最容易被人跳过但最值得做的一步。所谓平均模型,就是把开关管和二极管用受控源替代,只保留功率级的平均动态特性,仿真步长可以取得很大,跑得极快。在平均模型里,你可以直接把前面计算的双环 PI 参数写进去,观察启动波形、负载突变波形和环路增益曲线,几秒钟就能迭代一轮参数。这个阶段的核心目的是验证“参数方向是否正确”,而不是追求 5% 以内的精确度。
等平均模型仿真确认系统稳定、动态响应符合预期之后,再切换成开关级模型。开关级模型里能看到电感电流纹波、输出电压纹波、PWM 比较器输出波形,这里要重点观察三件事:电感电流纹波是否正常、PWM 占空比有没有出现抖动、电流采样信号上有没有明显的噪声尖峰。很多“仿真不稳定”其实不是环路参数的问题,而是采样瞬间刚好落在开关噪声尖峰上,把比较器带跑了。这种情况在理想平均模型里根本看不出来,只有开关模型会暴露。
5.2 样机上的环路增益实测
样机到手,先别急着接闭环。第一步做开环测试:固定占空比(用信号发生器直接给比较器一个直流电平,或临时断开反馈回路),确认输出电压稳定、电感电流连续、开关波形干净。开环通过之后再闭合成电流内环,此时把电压外环断开,手动给一个固定电流指令,观察电感电流是否精确跟随、是否存在低频波动。内环确认没有问题,再接上电压外环。
上环路分析仪测开环 Bode 图的注入点,我习惯选在电压误差放大器的输出端,也就是电压环输出电流指令的节点。这里要注意一个问题:注入变压器的输出阻抗和被测节点的阻抗要匹配合适,否则注入信号会被节点阻抗分压,测出来的增益曲线在低频段会“掉下去”,不是真实的环路增益。另一个常见问题是共模干扰。注入变压器跨接在反馈节点两侧时,如果示波器探头的地线夹子形成接地环路,扫频结果会在某些频率出现莫名其妙的毛刺。解决方法是把探头地线尽量缩短,或者用隔离探头。
实测曲线到手之后,我不会只看穿越频率和相位裕度这两个数。我还会盯三个地方:低频增益是不是足够高(对应负载调整率)、中频段斜率是不是-20dB/dec 左右(说明补偿斜率合理)、高频段有没有异常尖峰(可能是采样滤波谐振或 PCB 布局串扰)。这三处有任何异常,都比穿越频率偏了一点点更值得警惕。
5.3 抗积分饱和与软启动的处理
参数整定得没问题,系统还可能在启动时炸给你看。经典的坑就是积分饱和。假设输出电压还没来得及建立,电压误差很大,电压环积分器拼命往上积分,电流指令被打到限幅上限。等输出电压冲上来,误差反向,但积分器还停留在饱和状态,需要好几个毫秒才能“消化”掉这一大坨积分电荷,于是输出出现明显的过冲甚至震荡。解决手段说起来很简单:让积分器在限幅期间停下来或反向回退。模拟实现里给运放加积分钳位;数字实现里用条件积分——判断输出指令饱和时,不再累加误差,或者把积分结果钳制在限幅值附近。这属于“调完 PI 之后必须要做”的工程处理,不做这个,前面参数算得再准也白搭。
软启动则是另一道必做的工序。输出电压目标值从零开始按斜坡爬升,或者误差放大器参考电压按斜坡爬升,同时把限幅值也做一个斜坡展开,避免启动瞬间电流指令直接打到最大。我做过不少电源板,出过不少“一上电就灌电流把输入电压拉垮”的事故,根源都是启动阶段环路还没进入线性工作区,积分器和比例项在疯狂输出指令。软启动加抗饱和之后,这类问题基本绝迹。
5.4 阶段性调试顺序建议
做一张自检清单放在手边,DEBUG 阶段非常管用。按照“开环→内环→外环→动态→极限”的顺序推进:开环阶段确认主电路和驱动正常;内环阶段用固定电流指令验证电流跟随;外环阶段验证电压调节和稳态精度;动态阶段做负载阶跃和输入阶跃,观察恢复时间与过冲量;最后再做轻载、满载、低压、高压的极限组合扫一遍,特别关注轻载下电流是否进入断续模式——CCM/DCM 切换时的小信号特性完全不同,在 DCM 下仍保持稳定是双闭环设计里很容易被忽略、但现场最容易出问题的一环。
6. 常见故障现象与排查思路
参数整定和调试过程中,我踩过的坑不少,整理成一个速查表,按现象排查,可以省很多时间。
| 故障现象 | 可能原因 | 排查思路与对策 |
|---|---|---|
| 输出电压周期振荡,频率在几 kHz 到几十 kHz | 外环相位裕度不足,穿越频率附近增益曲线斜率太陡 | 降低外环带宽,把 PI 零点往低频移,检查内环是否有额外相位滞后 |
| 轻载时出现打嗝或抖动,负载加重后消失 | CCM/DCM 模式切换导致被控对象变化,环路在 DCM 下相位裕度骤降 | 单独在轻载下测 Bode 图,必要时降低外环增益;或采用强制 CCM 工作在轻载下 |
| 电感电流波形在占空比接近 0.5 时抖动 | 峰值电流模式下的次谐波振荡 | 增加斜坡补偿斜率,补偿斜率调到下降斜率的一半以上 |
| 输出瞬态响应过冲大,恢复时间长 | 电压环带宽太低,或电流指令限幅太小 | 提高外环带宽;检查电流限幅值是否限制了负载阶跃期的大电流提供能力 |
| 启动时输出过冲超过 10% | 积分饱和、软启动缺失 | 增加软启动斜坡,加积分钳位或条件积分 |
| 用环路分析仪测出来的曲线低频段朝下掉 | 注入变压器输出阻抗与被测节点阻抗不匹配 | 减小注入变压器输出串联电阻,或检查注入点选择是否正确 |
| 电流采样波形上有明显尖峰,PWM 偶尔跳变 | 采样电阻上的开关噪声被误采,或采样滤波器带宽太高 | 调整采样时刻避开开关瞬态,增加 RC 滤波,检查采样电路地线布局 |
| 负载突变时输出出现高频振铃(几百 kHz 级别) | 内环带宽过高或电流采样环路延迟过大,出现次谐波或采样振荡 | 降低内环 PI 比例增益,检查 PWM 更新延迟,必要时加采样保持补偿 |
这个表只覆盖了最常见的情况,实际遇到的故障组合往往更刁钻。比如说,“输出电压稳定但负载调整率差到 2% 以上”,这种问题通常不是带宽不够,而是电压采样回路的地线取错了位置,采到了功率地上的压降。又比如说,“空载正常但满载啸叫”,大概率是电感本体发出机械噪声,电流纹波激励了电感线圈和磁芯的机械谐振,和环路参数本身关系不大,却被很多人误当成环路问题调了半天。判断的方法是拿示波器看电感电流波形,如果电流波形稳定但噪声大,先怀疑磁性元件;如果电流波形本身在低频包络上振荡,再回头看环路。
还有一类问题是“实测 Bode 图和仿真差得很远”。这种情况十有八九是模型里漏了东西:功率 MOS 管的输出电容 Coss、电感 DCR、PCB 走线寄生电感、电流采样滤波器的相位滞后、PWM 比较器的传播延迟,每一项单看都不大,但叠加起来足以让穿越频率偏移 30% 以上。我自己吃过很大一次亏,某次做同步 Buck,仿真里相位裕度 58 度,上电实测直接振荡,排查到半夜才发现是同步管的下管体二极管反向恢复电流在采样电阻上形成了一个比预期大得多的尖峰,而这个尖峰没有被采样滤波器滤掉,等于往电流环里注入了一个高频强扰动。从那以后,我再也不敢过度相信公式和仿真了,每个关键寄生参数都要尽量在样机上实测确认。
7. 最后再分享一点个人心得
双闭环 PI 参数整定这件事,说到底是跟一个多变量、强耦合、非线性的系统打交道。公式和仿真能帮你定位到大致的参数范围,但最后的落脚点永远是实测和迭代。我自己做了这么多电源项目,最深的体会是:设计时理念要“稳”,调试时动作要“慢”——每次只调一个参数,调完就测一组 Bode 图加一组负载阶跃波形,记录下来再动下一个量。很多人一调环路就急躁,Kp、Ki 同时变,波形一不对劲就推翻重来,结果越调越乱。
给大家一个我认为最实用的闭环调参顺序:先把内环 Kp_i 从计算值的一半开始加,观察电流阶跃响应是否快速跟随且无明显振荡;再把 Ki_i 从零开始加,观察稳态误差能否消除;内环稳定后,同样的套路给外环——先 Kp_v 后 Ki_v,每一步都实测、记录、留档。如果最后相位裕度不够,优先动 Ki 而不是动 Kp,因为降低 Kp 会让响应变慢,而压低 Ki 主要影响低频增益,对动态性能的伤害往往更小。
最后分享一个小技巧:自己在仿真模型里故意留几个可控的寄生参数(采样滤波电容、驱动延迟),做一个“参数不确定性扰动按钮”,调好一组 PI 后随机波动这些参数,再看系统能不能维持稳定。这实际上是用蒙特卡洛的思路做鲁棒性预算,比单纯看一组 Bode 曲线的相位裕度可靠得多。做一次这样的鲁棒性检查,胜过盲调一整天的参数。