Skip to content

15.4 打通 CCM 和 DCM 的统一仿真模型

上一节我们算出来的那个漂亮的一阶模型,有一个前提:我们假设变换器老实呆在 DCM 模式里。但现实是残酷的——或者说是丰富多彩的。

只要负载电流足够低,任何带二极管整流器的变换器都会滑入 DCM 模式。而在实际工况中,负载是会变的,输入电压也会晃动。这就意味着,你的变换器很可能在某一时刻还在 CCM(连续导通模式)里优哉游哉,下一秒因为负载突然变轻,就掉进了 DCM 的坑里。

问题来了:如果我们要仿真这种「双面人」,难道还要手动切换模型吗?

15.4.1 统一之路:有效占空比 μ

回顾一下我们的武器库。 对于 CCM,我们在第 14 章推导出了理想变压器模型,其变比是 d:d(这里 d=1d)。 对于 DCM,我们在 15.2 节推导出了无损电阻(LFR)模型,输入端看起来像个电阻,输出端像个受控功率源。

这两个模型长得完全不一样。能不能把它们揉成一个?

能。只要我们引入一个新的概念:有效开关转换比 μ(t)

类比 1:万能转接头 你可以把 μ(t) 想象成一个「万能转接头」。 在 CCM 模式下,这个转接头的设定是固定的,完全听命于控制信号 d(t),就像一根刚性连杆。 但在 DCM 模式下,转接头开始打滑,它的实际转速不仅取决于控制信号,还取决于外部的负载阻力(电压和电流)。

我们的目标是构建一个通用的平均开关模型,无论在 CCM 还是 DCM,它都长成同一个样子——一个变压器。 但是,这个变压器的变比是 1μ:μ,其中的 μ 是个变量。

规则一:CCM 区域(刚性连接)

如果在 CCM 下运行,事情很简单。开关网络的转换比完全由控制器决定。

μ=d

没有任何商量余地。

规则二:DCM 区域(受控连接)

如果在 DCM 下运行,μ 就不能随便等于 d 了。我们必须让这个通用模型的端口特性,去拟合那个复杂的 DCM「无损电阻模型」。

来看看 DCM 的 LFR 模型是怎么规定的:

  1. 端口 1(输入):平均电压 v1(t)Ts=Rei1(t)Ts
  2. 端口 2(输出):平均功率等于输入功率,即 v2(t)Tsi2(t)Ts=v1(t)Tsi1(t)Ts

现在看看我们的通用模型,它本质上是一个变压器:

v1v2=1μμv1=1μμv2

且功率守恒:v1i1=v2i2

为了让它们在端口 1 看起来一样,我们令通用模型的 v1 等于 DCM 模型的 v1

1μμv2Ts=Rei1Ts

这里 Re 就是我们在 15.2 节里定义的有效电阻 Re=2Ld2Ts

现在我们可以解出 DCM 下的 μ 了:

1μμ=Rei1Tsv2Tsμ=11+Rei1Tsv2Ts

你可以去验证一下,如果你匹配端口 2 的特性,得到的解也是这一模一样的公式。

回到那个万能转接头 这里就是「揭示距离」的时候了。 真实的 DCM 物理机制并不是真的有个变阻器。实际上,是因为电感电流回落到了零,导致二极管提前关断。 我们这里用 μRe 构造的这个代数关系,是对那个复杂物理过程的一个数学拟合。它抓住了本质:在 DCM 下,开关的有效转换比不再单纯是你按下的按钮(d),而是负载和电压的函数。

回到万能转接头:验证 如果负载完全开路,i1(t)Ts=0,会发生什么? 公式告诉我们 μ=1/(1+0)=1。 变压器变成了 0:1,这意味着输入电压直接怼到了输出端(当然还要乘以变换器固有的拓扑增益)。 这和我们在第 5 章里分析的 DCM 极限情况完全一致:空载时,输出电压会飘到最高。

仲裁逻辑:怎么选?

现在我们有两个公式:

  • CCM 公式μ=d
  • DCM 公式μ=11+Rei1v2

仿真器怎么知道该用哪一个? 如果在边界上,这两个公式算出来的 μ 是相等的(都是 d)。 当负载电流减小(进入 DCM),i1 减小,DCM 公式分母变小,算出的 μ 会变大,甚至超过 d

所以结论很简单:谁大听谁的。 正确有效的开关转换比 μ,应该是取这两个计算结果中的较大值

15.4.2 上号:SPICE 子电路实现 (CCM-DCM1)

理论讲完了,现在把它变成仿真器能跑的代码。我们把这个「万金油」模型写成原理图和 SPICE 网表。

这个子电路被命名为 CCM-DCM1。它有 5 个接口脚,和我们之前用过的 CCM1 之类的完全兼容:

  1. 漏极
  2. 源极
  3. 二极管阴极
  4. 二极管阳极
  5. 占空比控制输入 (d)

核心逻辑拆解

拆开这段网表代码,我们干了这几件事:

  1. 端口特性实现 (Et,Gd)

    • Et(压控电压源):实现了端口 1 的关系。它根据内部节点 u 的电压 μ,生成 v1,2
    • Gd(流控电流源):实现了端口 2 的关系,保证了电流变比符合 μ
  2. 大脑:计算 μ (Eu)

    • 节点 u 的电压值就代表 μ
    • Eu 是一个查表源(Table),它的输入是一个 MAX 函数。
    • 这个 MAX 函数正是我们在上一段推导的「仲裁逻辑」。它比较输入的 d(节点 5 的电压)和根据 DCM 公式算出来的值,取大的那个。
    • 公式里的 Re 这里写成了 2*L*fs*v(5)*v(5) 的形式(注意代码里的对应关系)。
  3. 防呆机制 (Ga,Va,Ra)

    • 这是一个辅助电路。为了防止仿真器在数值求解时算出负电流(比如瞬态震荡),我们用 Ga 把电流限制在必须大于 0。这保证了物理意义正确:i1 必须是正的。

参数设定: 子电路需要知道电感 L 和开关频率 fs 来计算 Re。代码里给了默认值 L=100μH,fs=100kHz,你在调用时可以根据实际情况覆盖。

15.4.3 实战演练 1:SEPIC 的双面人生

光有模型不行,得验货。我们拿一个 SEPIC 变换器开刀。 参数如下:Vg=120V, D=0.4, fs=100kHz。 电感 L1=500μH, L2=100μH

CCM/DCM 边界判定: 根据 SEPIC 的特性,这个边界条件大约是 R46Ω(当等效电感为 L1L2 时)。

我们选两个负载电阻跑一下仿真:

  1. R = 40 Ω(小于 46Ω):应该工作在 CCM。
  2. R = 50 Ω(大于 46Ω):应该工作在 DCM。

搭一个仿真测试台来验证它。 注意那个 Xswitch,调用的就是我们刚才写的 CCM-DCM1。 其中参数 L 设为了 83.3μH,这正是 L1L2 的并联值(50010083.3)。

频率响应对比(AC 分析): 跑一下 AC 扫描,看看控制到输出的传递函数 Gvd

  • 实线 (DCM, R=50Ω): 你看这条曲线,非常「干净」。低频有个主极点,后面是一对高频极点和零点。 这就是 DCM 的典型特征:一阶主导,乖乖听话。

  • 虚线 (CCM, R=40Ω): 这条线看起来就「暴躁」多了。这是四阶系统! 两对高 Q 值的复数极点在低频段就开始震荡,甚至还有右半平面(RHP)零点在 50kHz 附近准备搞破坏。

这就是坑点: 如果你只按照 DCM 的模型去设计补偿器,结果负载一重,变换器突然切入 CCM,你的环路增益瞬间暴涨,相位裕度瞬间跌成负数,系统直接炸机。 这个仿真直观地告诉我们:设计控制器时,必须考虑到这种模式切换带来的剧烈变化。

15.4.4 实战演练 2:Buck 变换器的环路稳定性测试

再来个更贴近工程的例子。第 9 章我们设计过一个 Buck 变换器电压调节器。现在我们要把这个调节器完整地放在 SPICE 里跑瞬态和环路分析。

模型细节

  • CCM-DCM1 替代了 MOSFET 和二极管。
  • 用压控源 Epwm 模拟了 PWM 调制器(设 Vm=4V,并把占空比限制在 0.1 到 0.9 之间)。
  • 补偿器和采样网络是用运放 LM324 搭的实电路。
  • 给定了一个 .nodeset 命令。这玩意儿很重要,因为强反馈电路的直流工作点很难收敛,我们得「推」仿真器一把,告诉它大概的电压在哪里(比如 v(3)15V)。

环路增益测试(Middlebrook 注入法): 我们要测环路增益 T(s)。按照 9.6 节的方法,在补偿器输出和 PWM 输入之间(节点 6 和 7 之间)注入一个交流电压源 vz

T(s)=v(6)v(7)

我们测两组数据:

  1. 重载 (R=3Ω):工作在 CCM。
  2. 轻载 (R=25Ω):工作在 DCM。

结果分析

  • CCM (R=3Ω):穿越频率 fc=5.3kHz,相位裕度 47。这和我们在 9.5.4 节的设计预期(5kHz, 52度)几乎完美吻合。
  • DCM (R=25Ω):穿越频率暴跌到了 390Hz!相位裕度变成了 55。 虽然相位裕度变大了(看似更稳),但带宽损失太大了。这意味着环路的响应速度变得非常慢。

音频敏感度(Line-to-Output): 再看看输入扰动抑制。 在 100Hz 处,闭环增益:

  • CCM: -38dB(非常好)
  • DCM: -34dB(变差了,约 20mV 输出波动) 这证实了我们的担忧:在轻载(DCM)下,调节器的性能显著下降。

瞬态响应: 上狠活——负载阶跃。负载电流从 1.5A 瞬间跳到 5A。

  • 开环:输出电压惨不忍睹,跌了 2V 以上,还要在那儿震荡半天。
  • 闭环:虽然有个 0.2V 的凹陷,但迅速拉回来了,纹波很小。

本章小结

我们这一章走了一段漫长的路,从 DCM 的物理直觉开始,建立了无损电阻模型,推导了有效电阻 Re,最后把它和 CCM 模型「强行」融合在了一起。

回到开头那个困惑:为什么我们不能只用简单的平均模型? 因为 DCM 的本质变了。电感不再总是存储能量,它变成了一种「受控的能量传递媒介」。这种机制的改变,让我们在面对环路设计时,必须时刻警惕两种模式之间的鸿沟。

现在手里有了 CCM-DCM1 这个仿真器,你就有了一个可靠的「数字沙盘」。下次当你设计一个可能跨越 CCM/DCM 边界的变换器时,别光盯着稳态曲线,一定要在 SPICE 里跑一圈 AC 分析,看看那条相位曲线是不是在某个时刻突然给你来个九十度急转弯。

💡 为什么是 MAX() 而不是判电流正负? 你可能会问:判断 DCM 不就是看电感电流有没有归零吗,仿真器为啥要用「两个公式取大」这种绕弯路的仲裁?答案藏在收敛性里。直接用「if iL0 则切 DCM」是一个硬切换,它在边界上不连续,牛顿迭代法碰到不连续点会原地打转、直接不收敛。而「μ=max(d, μDCM)」把两段曲线缝成了一条处处连续且光滑的曲线——边界上两条公式本来就相等(都等于 d),往两边走才分叉。仿真器最喜欢的就是这种「软切换」。这也是为什么工程仿真里,能用平滑函数表达的,绝不用 if-else。


参考说明:参考自 geqianQWQ 同学阅读《Fundamentals of Power Electronics》的笔记,仅作理解线索;本文为结合自己理解重新整理的学习笔记,不涉及对原书的复制或翻译。

面向嵌入式学习者的硬件学习笔记