news 2026/11/5 23:10:40

非隔离DC-DC双闭环PI参数整定:建模、计算与实测全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
非隔离DC-DC双闭环PI参数整定:建模、计算与实测全流程

做电源的同行应该都有体会,非隔离 DC-DC 变换器看上去只是“一个开关管加一个电感加一个电容”,可一旦上双闭环 PI 控制,参数整定就成了从理论到工程的一道分水岭。尤其是 Buck、Boost 这类拓扑里,电压外环和电流内环谁快谁慢、带宽放在哪、积分限幅怎么处理,直接决定你手里的板子是“稳如老狗”还是“一上电就啸叫”。这篇文章我就把“应用篇”的整定链路完整走一遍,从建模、参数计算,到实测调试、故障排查,一次性讲透。适合电源工程师、硬件岗位的年轻人,以及做数字电源嵌入式的朋友参考。

1. 整体思路拆解:为什么非隔离变换器偏爱双闭环 PI

1.1 电流内环绝对不只是“限流”

很多人以为内环就是限制电流,防止炸管子。这句话只对了一半。电流内环真正的价值在于“改造被控对象”。Buck 在 CCM 模式下,占空比到电感电流的传递函数是一个一阶环节,近似为 Gid(s) ≈ Vin/(sL),这个对象对控制来说非常干净,没有右半平面零点,也没有高 Q 谐振峰。而电压对占空比则是 LC 二阶对象,谐振峰受 Q 值影响,相位在谐振频率附近快速下拉。如果你只用单环去控制电压,你就不得不和这个谐振峰搏斗,相位裕度极难做够。电流内环等于把“难管的二阶对象”转换成了“好管的一阶对象”,外环看到的是一个电流源对电容和负载充电的简单场景。这就是双闭环的第一个核心思路:内环是整形器,外环才是真正的调压器。

所以电流内环的带宽要尽量快,快到它能把电感电流紧紧“按”在给定值上。实际设计中,内环穿越频率一般取开关频率的 1/10 到 1/5。太低,外环看到的不是干净的一阶对象,你的外环带宽也得跟着压低;太高,则受到数字控制延时和采样噪声的限制,相位裕度会掉得很快。以 100kHz 开关频率为例,电流内环穿越频率我习惯做到 15k~20kHz。

1.2 电压外环真正要“管”的其实是电容

电流内环收敛后,电压外环面对的被控对象可以近似为负载电阻与输出电容并联:Gvi(s) = R_load/(1 + s·R_load·C)。也就是说,电压环的极点不是由电感决定,而是由“负载电阻乘以输出电容”的时间常数决定。负载越轻,电阻越大,极点越低,电压环就越容易凑出足够的相位裕度;满载时极点往上移,穿越频率就得重新算。

这个点很多初学者会忽略,以为输出电容越大越稳定,实际结果是容值翻倍、带宽掉一半、动态响应变差,甚至满载工况下环路出现奇怪的振荡。电容大小不是“稳定保险”,它和外环参数是一对按带宽需求取舍的搭档。理解这一点,后面整定参数时就不会瞎试。

1.3 带宽分配的三条经验法则

双闭环参数整定第一条铁律就是“内快外慢”。到底慢多少,我习惯用这三条:

  • 电流内环穿越频率 fci 取开关频率的 1/10~1/5;
  • 电压外环穿越频率 fcv 取电流内环的 1/10~1/5,至少错开 5 倍以上;
  • 电压环PI零点放在负载极点附近,而不是随意放。

为什么外环必须明显慢于内环?因为外环看到的“电流源给电容充电”这个对象,只有在低于内环带宽的频段才成立。一旦频率高过内环带宽,电流内环的闭环相位滞后就会叠加到外环上,等于你设计电压环时面对的是一个“变了形”的对象,相位裕度被内环偷走一大截。工程上为了省事,会用 1/10 这个比例,稳定压倒一切。

2. 建模与补偿器设计:从开关波形到 PI 参数

2.1 简化小信号模型,不用每次都推导

双闭环的参数设计不需要把状态空间方程每个细节都写出来。工程整定用得最多的就是两个简化模型:电流内环用 Gid(s)≈Vin/(sL),电压外环用 Gvi(s)=R_load/(1+s·R_load·C)。这两个式子成立的前提是 CCM 和电流内环已闭合,如果负载轻到进入 DCM,模型就不准了,这点后面再讲。

以一块典型的 Buck 样机为例:输入 12V,输出 5V,额定 2A,电感 33μH,输出电容用两粒 22μF陶瓷电容并联,等效 44μF,开关频率 100kHz,负载电阻 R=2.5Ω。算一下基本工况:

  • 占空比 D = Vout/Vin ≈ 0.417;
  • 电感电流纹波 ΔIL = (Vin−Vout)·D/(L·fs) ≈ 0.88A,在 CCM 范围内;
  • 输出极点 fp = 1/(2π·R·C) ≈ 1.45kHz。

这个极点是电压外环的设计锚点,PI 零点要放在它附近,用零点对消负载带来的极点,这样开环的相位曲线在高频段才不会被拉下去太多。

2.2 穿越频率法反算 PI 参数,附计算实例

PI 参数不是拍脑袋试出来的。我的做法是“给定穿越频率,反算 Kp,再定 Ki”。

先算电流内环。期望 fci=20kHz,被控对象 Gid 在穿越频率处的幅值为 Vin/(2π·fci·L)。要让开环增益在此等于 1,并且穿越频率远高于 PI 零点时,主要由比例项贡献,所以:

Kp_i ≈ 2π·fci·L/Vin = 2π×20000×33μ/12 ≈ 0.35

Ki_i 则看 PI 零点放哪里。低于穿越频率的 1/10,也就是 2kHz 以下,取 fz=2kHz:

Ki_i = Kp_i × 2π×2000 ≈ 4400(连续域单位 rad/s)

这里注意,如果你把 PI 写成 Kp+Ki/s,那 Ki 就是每秒的积分增益。离散化以后要乘以控制周期 Ts 才是每次累加的系数,这个细节后面细说。

电压外环同理。期望 fcv=1kHz(约为内环带宽的 1/20,偏稳妥)。被控对象 Gvi 在 1kHz 处的增益为:

|Gvi(j2π×1k)| = 2.5 / sqrt(1 + (2π×1k×1.1e−4)²) ≈ 2.05

要让开环增益在此等于 1,Kp_v 大约等于 1/2.05 ≈ 0.5。零点放在负载极点 1.45kHz 附近,取 1.4kHz:

Ki_v = Kp_v × 2π×1400 ≈ 4400

这里出现一个有趣的现象:Kp 和 Ki 数值都和电流环相近,纯属巧合,但反过来提醒我们——参数值模一样不代表两个环可以互换,作用对象和限幅完全不同,别混用。

2.3 数字实现细节:离散化与采样时刻

连续域的 Kp、Ki 算完,最容易被忽视的是离散化这一步。我常用后向欧拉法,把积分项写成累加器:

// 电压环 PI,输出为电流内环参考值 v_err = v_ref - v_fb; v_p_term = Kp_v * v_err; v_i_acc += Ki_v * Ts * v_err; i_ref = v_p_term + v_i_acc; // 限幅,避免积分饱和 if (i_ref > I_MAX) i_ref = I_MAX; if (i_ref < 0) i_ref = 0;

这里的 Ki_v×Ts 才是每次中断里真正累加的量。如果 Ts=10μs,Ki_v=4400,那么每次累加系数是 0.044,也就是说,一个 0.1V 的稳态误差,要大约 200 多个周期才能把积分项推到接近 1A 的量级。这个数字心里有数,调试时就不会觉得积分响应“太慢”而乱加 Ki。

采样时刻同样关键。电流采样我坚持放在 PWM 计数周期的中心点,也就是三角载波的波峰或波谷处,因为这时开关管动作引起的电压电流尖峰已经衰减了,采到的才是电感电流的平均值附近。电压采样可以稍微滞后一点,但绝不能紧跟开关沿做同步采样,否则你相当于把最大的开关噪声当作反馈信号送进 PI 里。

3. 实测整定流程:从内环到外环的分步操作

3.1 先闭环电流环,断开电压环怎么操作

拿到板子别急着把双环都闭合。先只做电流内环。方法很简单:断开电压环的输出,让电流环的参考值 i_ref 直接来自软件里的一个可调常数,或者来自 DAC/开发板的电位器输入。保护电流设到一个安全值,比如 1.5A,然后给一个小阶跃,比如从 0.2A 跳到 1A,观察电感电流波形。

从 Kp_i=0、Ki_i=0 开始,先把 Kp_i 按计算值的 50% 设进去,再慢慢往上加。判断标准很简单:电流波形对阶跃响应是否一次到位,有没有明显振荡。如果 Kp_i 太大,电流波形会在阶跃前沿出现高频振铃,这就是相位裕度不足的早期信号。如果 Kp_i 合适但 Ki_i 太大,电流波形会呈大振幅低频“呼吸”状,周期大约在几毫秒到几十毫秒之间。

我实测下来,电流内环最容易犯的错是“Kp 给得很小,Ki 拼命堆”。这样做的结果是带宽起不来,外环一旦闭合,动态响应像老太太过马路。记住:带宽主要靠 Kp 撑,Ki 只用来消除稳态误差,Ki 太大对带宽贡献很小,还会把相位曲线往下拽。

3.2 电压外环接入的三种开机场景

电流内环收敛后,把电压环接上,i_ref 改为由电压环输出。这时我遇到过三种典型场景:

第一种,输出电压软趴趴上升,毫无过冲,但加载时电压塌陷明显。这是电压环 Kp_v 太小,或者零点位置偏高,环路增益不够。按计算值提升 Kp_v 即可。

第二种,上电瞬间输出电压直接冲过设置值,再回摆。这是积分饱和。电压误差在上电时很大,积分项迅速堆满,等到输出电压到达目标时,积分项还顶在限幅值上,把电流继续往下游推,于是过冲。解决办法有两个:一是参考电压用斜坡给定,二是积分项遇到输出限幅时冻结累加,也就是俗称的抗积分饱和。两者一起用效果最好,我后来所有项目都默认带上。

第三种,上电瞬间直接爆振荡,电流波形疯狂抖动。这多半是电压环带宽逼近甚至超过电流内环带宽,外环看到了内环的相位延迟。把 fcv 往低压就行,别舍不得带宽,稳定比动态指标重要得多。

3.3 用示波器验证稳定裕度

参数整定完不能只看“不振荡”就收工。我习惯用两种方法验证稳定裕度。第一种是时域小信号阶跃:在 i_ref 或 v_ref 上叠一个幅度为额定值 3%~5% 的小阶跃,观察响应波形有没有衰减振铃。二阶系统里,阻尼比和超调量、振荡次数可以直接估算相位裕度,具体经验是:一个明显的振荡周期且衰减很快,相位裕度大约在 45°左右;如果有两个以上的振荡周期,说明相位裕度已经掉到 40°以下,继续用会出问题。

第二种是用频率响应分析仪或扫频注入,直接测开环波特图。没有仪器的话,可以用数字控制器里注入正弦扰动,再通过串口把 ADC 采样值回传,算出幅度和相位,几百行代码就能实现一个简易扫频工具。我强烈建议做数字电源的人至少搭一次这个工具,它能一针见血地告诉你,你的穿越频率到底在哪、相位裕度到底还有多少,省掉无数“看起来好像稳定”的猜谜时间。

4. 常见问题与排查技巧实录

4.1 上电瞬间输出电压过冲或震荡

这个问题排在所有 Buck/Boost 调试问题的第一位。上电过冲的原因,我遇到的 90% 都是积分饱和,10% 是软启动时间太短。排查方法很简单:先把参考电压做成斜坡,斜率设置为输出电压的 1~2ms 内到达目标,再看过冲消失没有。如果过冲大幅减小,就是积分问题;如果依然存在,就要查电流内环的限幅和电感饱和电流了。

另外一个常被忽略的点是:电流内环参考值的下限。很多人只限制 i_ref 的最大值,不限制最小值,导致轻载或空载时电压环推一个负电流给内环,Buck 电路根本无法吸收负电流,于是输出电压来回振荡。把 i_ref 的下限钳到 0,问题立刻消失。如果你用的是同步 Buck(带续流管),左下桥可以传递反向电流,那另说,但如果用了二极管续流,必须把下限设成 0。

4.2 轻载下的低频振荡

板子在满载下好端端的,一带轻载甚至空载,输出电压出现低频起伏,或者干脆出现“音频啸叫”。原因在于轻载时电感电流进入 DCM,前面提到的 CCM 模型整体失效。DCM 下,从控制到输出的传递函数不仅变了极点位置,还多出了一个右半平面零点,按 CCM 整定出来的 PI 参数在 DCM 下往往相位裕度不足。

工程上的常见处理办法有三种:检测临界电流,切换到 PFM/突发模式,同时把数字 PI 切到一组专门给 DCM 用的参数;或者强制让变换器工作在 CCM,用一个小额定值的假负载(比如几百欧姆电阻)把电流抬高;再或者用电感电流反向检测,让同步整流管一直开通到电感电流真正过零后再关断。前两种最实际,第三种对单片机资源要求高一些。我的经验是:如果产品不允许空载损耗,就必须做模式切换,哪怕切换点附近有一点滞回也比振荡好。

4.3 数字滤波与采样延迟的相位代价

很多朋友为了抗开关噪声,在 ADC 前面加一阶 RC 滤波,或者软件里做移动平均。这两个操作都会引入相位延迟。一阶 RC 的截止频率如果是 10kHz,在 20kHz 处相位滞后约 63°;移动平均 N 点则等效于 N/2 个采样周期的纯延迟。你可能把滤波加下去,表面上看波形平滑了,但环路悄悄变成了“调节一下、慢半拍”,轻则相位裕度缩水,重则本来稳定的双环开始自激。

我的习惯是,ADC 前的模拟滤波截止频率至少放到内环带宽的 5 倍以上,软件滤波用去掉最大最小值之后取平均,或者干脆中值滤波,只滤尖峰,不改变平均相位。如果做了移动平均,必须把等效延迟补进环路模型里重新算一次相位裕度,别偷懒。

现象可能原因排查方法处理方向
上电输出电压过冲大电压环积分饱和软启动斜坡+冻结积分,逐个排除限制积分上限,加斜坡参考
轻载低频振荡或啸叫进入 DCM,CCM 模型失效看电感电流是否过零轻载切 PFM,或强制 CCM
电流波形高频振铃电流环 Kp 过大,相位裕度不足降低 Kp 或提高电流环零点降 Kp,重新算穿越频率
加载动态响应塌陷电压环增益不足或内环带宽太低阶跃加载看恢复时间提升 fcv,注意别超过内环 1/5
采样值毛刺导致 PWM 抖动采样时刻贴近开关沿用示波器同时看 PWM 和采样点采样移到载波中心,加中值滤波

我个人在实际操作中最深的体会是:双闭环 PI 参数整定,七分靠计算,三分靠调试,但这三分调试的功夫比七分计算更容易拉开差距。算出来的参数只是一个“大概率安全”的起点,真正让板子在各种工况、各种温度下都稳定,靠的是你对每个参数物理含义的理解——Kp 决定带宽也就是反应速度,Ki 负责消灭误差,采样时刻和滤波器延时不比这两个次要。最后再分享一个小技巧:调试现场没有频率分析仪的时候,直接给参考电压叠加一个 100Hz 到 5kHz 的小幅正弦扰动,用示波器的两个通道同时看参考信号和输出电压波形,李萨如椭圆或相位差法可以非常直观地估出当前带宽附近的相位行为,这个土办法我用了很多年,至今仍然觉得比单纯看阶跃波形有效得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 18:48:54

心流不是玄学:一套可复现的深度专注实操方法

做知识型工作的人&#xff0c;最宝贵也最难求的&#xff0c;可能就是那种“一坐下就进去了”的状态。你盯着屏幕&#xff0c;思路顺畅&#xff0c;手跟不上脑子的速度&#xff0c;两三个小时一晃而过&#xff0c;连水都顾不上喝&#xff0c;结束以后整个人是满足的&#xff0c;…

作者头像 李华
网站建设 2026/11/5 23:10:40

3DContainerPacking实战:从接入到装载优化避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 23:10:34

Unity古迹探险游戏成品:含场景流、对话树、解谜与存档系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/27 10:15:30

CRMEB PC前端模板V4.5跑通指南:环境配置与接口对接实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/30 11:31:13

PLC数据接入MQTT的工业级桥接实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华