Skip to content

第 18 章 电流程序控制:当电感失去独立人格

18.1 简单一阶模型

有一类问题,表面上看是精度问题,实际上是复杂度问题。

我们在前面几章里,一直都在玩同一个游戏:调节占空比 D。这是经典的电压模式控制(Voltage Mode Control)。在这个世界里,你想控制输出电压,就得通过调整 PWM 的脉宽来改变电感上的平均电压。听起来很完美,对吧?只要数学算得准,输出电压就会乖乖听话。

但现实世界喜欢在这个完美假设上打脸。当输入电压剧烈抖动,或者负载突然短路,电感电流会瞬间冲上云霄——或者跌到谷底。单纯的电压环反应太慢了,因为它只能看着电压结果来反推,根本不知道中间发生了什么。

于是工程师们就想:如果我们不再「间接控制」电流,而是直接给电感电流立个规矩呢?

这就是本章要讲的主角——电流程序控制。我们在这一章会构建一个新的世界观:在这个世界里,电感不再是独立的储能元件,它变成了一个听话的「电流傀儡」。

但为了理解这个系统的脾气,我们必须先回到最简单的起点。

18.1.1 代数推导法:Buck-Boost 示例

在深入细节之前,让我们先确立目标:我们要为这个新的控制系统建立一个小信号模型。没有这个模型,设计反馈环路就是盲人摸象。

在第 7 章里,我们已经推导过 Buck-Boost 变换器在标准占空比控制下的状态方程。那是地基,我们现在要在这块地上盖新房子。

对于 Buck-Boost 电路,其小信号平均方程(式 7.44)是这样的:

Ldi^L(t)dt=Dv^g(t)+Dv^(t)+(VgV)d^(t)Cdv^(t)dt=Di^L(t)v^(t)R+ILd^(t)i^g(t)=Di^L(t)+ILd^(t)

写成拉普拉斯变换域(设初始条件为 0),就是我们熟悉的复频代数方程:

sLi^L(s)=Dv^g(s)+Dv^(s)+(VgV)d^(s)sCv^(s)=Di^L(s)v^(s)R+ILd^(s)i^g(s)=Di^L(s)+ILd^(s)

现在的局面是:我们有三个方程,但多了一个变量关系——i^Ld^ 之间不再是单纯的状态导数关系,而是通过那个神秘的「黑盒子」——电流程序控制器——绑在了一起。

在这里,我们要引入本章最核心、也是最大胆的一个假设:

「在电流程序控制下,电感电流的平均值完全听从控制信号 ic(t) 的指挥。」

也就是说,我们假设控制器足够强力,以至于电感电流纹波小到可以忽略,或者控制系统足够稳定,以至于我们可以认为:

i^L(s)i^c(s)

这个式子是整个「简单一阶模型」的灵魂。只要这个假设成立,电感电流就不再是独立的状态变量,它变成了一个受控源。

好了,现在我们把 i^L(s) 替换成 i^c(s),代入上面的第一个方程(电感电压方程),看看会发生什么。

sLi^c(s)Dv^g(s)+Dv^(s)+(VgV)d^(s)

注意到了吗?这时候,只有 d^(s) 是未知的(因为我们想表达的是控制信号 i^c 对占空比的调制逻辑)。我们把 d^(s) 解出来:

d^(s)=sLi^c(s)Dv^g(s)Dv^(s)(VgV)

这一步非常关键。

这不仅仅是代数变换。这个式子揭示了电流程序控制器的本质行为:占空比 d^ 不仅仅取决于你给的控制信号 i^c,它还被迫要「补偿」输入电压 v^g 和输出电压 v^ 的扰动。 控制器在背后默默地干了很多活,而我们这个方程只是把它大白话说出来了。

现在我们手里有了 d^(s) 的表达式,就可以把它扔回原来的方程组里,把 d^ 彻底消掉。我们代入第二个和第三个方程:

sCv^(s)=Di^c(s)v^(s)R+IL[sLi^c(s)Dv^g(s)Dv^(s)(VgV)]i^g(s)=Di^c(s)+IL[sLi^c(s)Dv^g(s)Dv^(s)(VgV)]

看起来有点乱?没关系,我们来整理一下。利用稳态关系式(比如 V=DDVgIL=VDR),我们可以把这些直流项替换掉,简化成标准形式。经过一番并不算复杂的代数折磨,我们得到了一组清爽的方程:

sCv^(s)=(sLDDRD)i^c(s)(DR+1R)v^(s)(D2DR)v^g(s)i^g(s)=(sLDDR+D)i^c(s)(DR)v^(s)(D2DR)v^g(s)

这就是 CPM 下 Buck-Boost 变换器的小信号「宪法」。

我们可以把这两个方程画成电路。为什么是电路?因为电路工程师看方程头疼,看电路图亲切。

对于方程 (18.8)(输出端方程),sCv^(s) 是流过电容的电流。

  • i^c(s) 项:这是一个受控电流源。
  • v^(s)/R 项:这是负载电阻的电流。
  • v^(s)D/R 项:这等效于一个电阻,阻值是 R/D
  • v^g(s) 项:这是一个依赖输入电压的受控电流源。

对于方程 (18.9)(输入端方程),描述的是输入电流 i^g(s)

  • 同样包含一个受控于 i^c(s) 的电流源。
  • 还有一个受控于 v^(s) 的电流源。
  • 最有意思的是 v^g(s) 这一项:系数是 D2/DR。这代表了一个负电阻

把这些元件拼在一起,我们就得到了一个双口网络模型。


模型的回报:传递函数

现在模型建好了,回报来了。我们终于可以算一下这个系统的核心指标:控制到输出传递函数 Gvc(s)。这决定了我们电压环怎么设计。

为了求这个,我们把输入扰动 v^g 设为 0(短路)。解这个电路其实就是一个简单的节点电流法,结果直接列出来:

G_{vc}(s) = \frac{\hat{v}(s)}{\hat{i}_c(s)} \bigg|_{\hat{v}_g=0} = \frac{f_2 (r_2 \parallel R \parallel \frac{1}{sC})}

代入 Buck-Boost 的参数(f2=Dr2=DR/D2),我们算出:

Gvc(s)=RD1sDLD1+sRC

停下来盯着这个式子看十秒钟。

发现了什么?

  1. 极点消失了:原本应该是二阶的系统(两个极点:一个在电感,一个在电容),现在只剩下一个由电容和负载电阻决定的一阶极点 (1+sRC)。电感极点去哪了?因为它不再是独立状态变量了,它变成了电流源的附属品。
  2. 零点还在:那个令人讨厌的右半平面零点 (1sDL/D) 还在。这是拓扑结构决定的,电流控制也救不了它。
  3. 增益变了:直流增益变成了 R/D,直接和负载电阻挂钩。

这就是「一阶模型」的含义。系统从二阶降维成一阶,设计电压环补偿器瞬间变得简单了许多。

那输入对输出的抑制能力呢?来看看 线电压到输出传递函数 Gvg(s)

把控制输入 i^c 设为 0(开路),解电路得:

G_{vg}(s) = \frac{\hat{v}(s)}{\hat{v}_g(s)} \bigg|_{\hat{i}_c=0} = \frac{g_2 (r_2 \parallel R \parallel \frac{1}{sC})}

代入参数:

Gvg(s)=D2D2(1+D)11+sRC

同样,它也是一阶的。虽然这里的简单模型预测它不为零(更精确的模型会进一步抑制它),但相比电压模式控制,它已经被大幅削减了。


18.1.2 平均开关模型法:物理直观

代数推导虽然严谨,但有时候让人「知其然而不知其所以然」。我们换一种思路——平均开关模型——来重新审视一下这个东西。这种方法能把物理本质拍在你脸上。

还是看最经典的 Buck 变换器。我们在第 14 章学过,怎么把开关网络变成一个受控源。对于 CCM 模式下的 Buck 变换器,开关网络的端口平均电压电流关系是这样的:

v2(t)Ts=d(t)v1(t)Tsi1(t)Ts=d(t)i2(t)Ts

这里 v1 是输入电压,v2 是输出电压(指开关网络端口),i1 是输入电流,i2 是输出电流。

现在,我们再次祭出那个核心假设:电流程序控制让电感电流(也就是端口电流 i2)死死咬住控制信号 ic

i2(t)Tsic(t)Ts

把这个代入上面的方程。注意,我们要把占空比 d(t) 消掉,因为它现在是个中间变量,不再是直接控制量了。

i1(t)Ts=d(t)ic(t)Ts

又因为 d(t)=v2/v1,所以:

i1(t)Ts=v2(t)Tsv1(t)Tsic(t)Ts

稍微变换一下形式:

i1(t)Tsv1(t)Ts=ic(t)Tsv2(t)Ts

这不就是功率守恒吗?左边是开关网络输入端的吸收功率,右边是输出端(电流源)释放的功率。这说明电流程序控制的开关网络,本质上是一个无损功率传输器

于是,我们就得到了一个极其优雅的等效电路:

  • 输出端口:是一个电流源,值就是 ic(t)。很简单,我们要它流多少,它就流多少。
  • 输入端口:是一个功率汇。它从电源吸取的功率,严格等于输出端口电流源发出的功率。

为什么会有负电阻?

现在的模型是非线性的(因为有乘积项)。为了设计反馈环路,我们需要对它进行线性化(Perturbation & Linearization)。

设直流工作点为 V1,I1,V2,Ic,叠加上小信号扰动 v^1,i^1 等。

对于输出端电流源:

i^2(s)=i^c(s)

线性化结果很简单,就是一个受控电流源。

但对于输入端的功率源特性(Pin=Pout):

(V1+v^1)(I1+i^1)=(Ic+i^c)(V2+v^2)

展开并舍去高阶小信号项(v^i^),分离直流项和交流项。 直流部分验证了功率平衡:V1I1=IcV2

关键来了,看交流部分:

I1v^1+V1i^1=Icv^2+V2i^c

我们想求输入端口的小信号阻抗,也就是 i^1v^1 的关系。把 i^1 解出来:

i^1=V2V1i^c+IcV1v^2I1V1v^1

利用稳态关系 V2=DV1I1=DIc,这一坨东西可以化简为:

i^1=Di^c+DRv^2D2Rv^1

注意这里 v^1 的系数是负的(移项后看)。这意味着什么? 这意味着 v^1 增加时,i^1 反而减小。这正是一个负电阻的特性!那个功率源特性曲线的斜率,就是负增量电阻的来源。

物理直觉:因为你要维持输入功率恒定(等于输出功率),如果输入电压升高了,输入电流就必须减小。这天然就构成了一种负阻抗特性。

继续推导,我们可以把 v^2 写成 v^+v^L,最终整理出完整的功率级小信号模型。

你会发现,这个模型里,电感 L 确实还在那里,但它和受控源 i^c 串联。对于计算输出电压 v^ 来说,电感上的电压只是内务,不改变流进电容的电流平均值(因为电流源已经定死了)。这就是为什么在传递函数 Gvc 中,电感极点消失的物理原因。

踩坑提醒:电感极点「消失」是句话术,不是真的消失。它只是被推到了一个高频位置(后面 18.4 节会算出来,那个高频极点大约就落在开关频率 fs 附近)。所以一阶模型是有「有效期」的:只要你的电压环带宽远低于这个高频极点,它就靠谱;一旦你想把带宽推到接近 fs,这个被藏起来的极点就会跳出来咬你。新手最爱犯的错,就是拿着一阶模型算出来的「无脑宽带宽」方案直接上板子,然后在示波器上看到莫名其妙的振铃。

本章小结

本节我们建立了一个「一阶模型」,它基于一个大胆的假设:iLic

这个模型虽然简单,但它已经揭示了电流程序控制最迷人的几个特质:

  1. 极点消除:系统从二阶变一阶,电压环设计变得简单。
  2. 前馈效应:控制器会自动调整占空比来抵消输入电压波动。
  3. 负阻抗:从输入端看进去,变换器表现得像一个负电阻。

但模型太简单也是有代价的。我们扔掉了一些细节——比如电感电流的纹波,比如那个在占空比大于 0.5 时会出来捣乱的「次谐波振荡」。这些问题,我们在下一节里再谈。


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

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