Skip to content

第 16 章 不仅仅是代数技巧

工程师和数学家看待电路的方式有一个根本的区别。

数学家看到一个电路图,看到的是节点方程,是矩阵,是最后解出来的那个精确到小数点后四位的数值答案。只要解出来了,事情就结束了。

但工程师不一样。你需要设计这个电路。你需要知道,如果把这里的电容换掉,带宽会怎么变;如果把那个寄生电阻考虑进去,系统会不会炸;或者,为什么仿真里好好的东西,焊到板子上就开始振荡。

这时候,光有一个「数值答案」是没用的。你需要洞察力。

这正是这一章要讲的东西——面向设计的分析方法。我们不教你如何解出那个繁琐的传递函数,我们要教你如何从旧系统的解出发,一眼看穿新元件加进去之后会发生什么。这其中的基石,就是 Middlebrook 的 额外元件定理

不要被名字吓到了。它不是什么黑魔法,它只是把你脑子里那个「如果……会怎样」的直觉,变成了严谨的数学形式。一旦你掌握了它,你会发现:原本需要重新列写一大堆方程才能解决的问题,现在只是观察一下阻抗的事儿。


16.1 额外元件定理

想象一下这个场景:你已经花了一整晚时间,终于把你那个复杂的线性电路给吃透了。你算出了它的传递函数 G(s),你画出了波特图,你知道它在哪儿稳定,在哪儿开始衰减。这时候,老板或者客户走过来,随手在电路图上加了一个阻抗 Z,说:「这儿补个电容,改善一下噪声。」

那一刻你的内心可能是崩溃的。因为你知道,加了这一个元件,刚才那个漂亮的传递函数可能就不成立了。为了知道新的传递函数长什么样,你可能不得不把那一堆繁复的方程重新推导一遍。

R. D. Middlebrook 教授提出的额外元件定理,就是为了终结这种痛苦。它告诉我们要如何在不重新求解整个系统的情况下,精确地算出这个新加的阻抗 Z(s) 会把传递函数变成什么样

这不仅仅是省事儿的问题。这个定理能让我们看清电路的哪些部分是敏感的,哪些部分是 robust 的。在第 17 章里,我们会用它来设计不会搞坏开关调节器环路特性的输入滤波器;在 22.4 节,我们会用它来分析负载电阻是如何影响谐振变换器的。

现在,让我们从最基本的推导开始,看看到底发生了什么。


16.1.1 核心结果

想象一个线性电路:左边是输入 vin(s),右边是输出 vout(s)。除此之外,它身上还引出了一个端口,目前是开路状态——也就是说,我们故意留了一个「接口」,但还没往上面接任何东西。

假设我们已经算出了这个原始电路的传递函数,把它记作 G(s)

G(s)|Z(s)=vout(s)vin(s)

这里写 |Z(s) 是为了强调,这个结果是在那个端口开路(即没接那个额外元件)的时候得到的。

现在,Middlebrook 问:如果我们在这个端口上接上一个阻抗 Z(s),新的传递函数会变成多少?

答案是:

G(s)=G(s)|Z(s)(1+Z(s)ZN(s)1+Z(s)ZD(s))

你看,新的 G(s) 是由旧的那个 G(s) 乘以一个修正因子得到的。这个因子就是那个长得很吓人的分数 1+Z/ZN1+Z/ZD

除了上面这种「端口本来开路」的形式,EET 还有一个「对偶」形式:原始电路的那个端口本来是短路的,对应的传递函数记作 G(s)|Z(s)0。当我们把那根短路线替换成一个阻抗 Z(s) 后,新的传递函数变成了:

G(s)=G(s)|Z(s)0(1+ZN(s)Z(s)1+ZD(s)Z(s))

你会发现,不管哪种形式,这两个讨厌的参数 ZN(s)ZD(s) 总是冒出来。而且很有意思的是,如果把上面这两个式子联立,还能得到一个很有用的关系式,叫互易关系

G(s)|Z(s)G(s)|Z(s)0=ZD(s)ZN(s)

这东西后面会有大用,但现在我们先不管它。现在的核心问题是:ZDZN 到底是个什么鬼?怎么求出来?

这两个阻抗不是随便定义的,它们有着非常明确的物理意义,而且可以在端口上直接「测」出来。

1. ZD(s):驱动点阻抗

ZD(s) 其实你很熟悉,它就是我们在端口看到的戴维南等效阻抗,或者叫驱动点阻抗

怎么求它?分两步:

  1. 把输入源 vin(s) 置零(对于电压源就是短路,电流源就是开路)。
  2. 从那个端口往里看,把看到的等效阻抗记为 ZD(s)
ZD(s)=v(s)i(s)|vin(s)=0

这步操作通常很简单,甚至不需要动笔,扫一眼电路就能看出来。

2. ZN(s):零值双注入阻抗

ZN(s) 就稍微有点反直觉了。这也是 Middlebrook 最初的贡献里最精妙的一步。

我们在端口上接一个电流源 i(s),同时保持输入 vin(s) 也在工作。现在的任务是:调节这个电流源 i(s) 的大小,强行让输出 vout(s) 变成零

在这个强制的零输出条件下,端口电压 v(s) 和注入电流 i(s) 的比值,就是 ZN(s)

ZN(s)=v(s)i(s)|vout(s)null0

踩坑提醒:这里有一个巨大的坑,千万别把「输出归零」当成「输出短路」

如果你直接把输出端短路到地上,电流会呼呼地流过那个短路线,导致电路里别的电阻、电感上产生压降。这时候电路内部的电流电压分布已经乱套了。

而「归零」完全不是这么回事。你并没有真的去短接输出端。你是通过同时调节输入 vin 和注入电流 i,用一种微妙的方式让输出电压刚好相互抵消,变成 0。这就像是做平衡手术,电路里的大部分信号并不会因为输出是零就乱跑。这也正是为什么计算 ZN 往往比算 ZD 还要简单——因为「零输出」这个条件会直接把电路里的一大堆变量也干掉了。

接下来的 16.2 节会有具体的例子,到时候你会真切地感受到这种「变魔术」般简化计算的感觉。


16.1.2 推导过程

工程师通常对推导过程没那么感兴趣,直接套公式多爽。但这里我要强烈建议你跟下来。因为这里的逻辑——叠加原理的应用——是理解整个 EET 的钥匙。

我们来看一个通用的线性系统,输入是 u(s),输出是 y(s)(这里用 uy 是为了说明它不限于电压,可以是任何信号)。端口起初是开路的,电流 i(s)=0。我们把原始传递函数记作 Gold(s)

Gold(s)=y(s)u(s)|i(s)=0

现在,我们要在端口上接一个阻抗 Z(s)。这时候端口上的电压 v(s) 和电流 i(s) 就满足欧姆定律了:

v(s)=i(s)Z(s)

为了把新的传递函数 G(s)=y(s)/u(s) 用旧的 Gold(s) 表达出来,我们在端口上做一个双注入实验:人为在端口上加一个独立的电流源 i(s)。现在系统有两个输入:u(s)i(s)。根据线性系统的叠加原理,输出 y(s) 和端口电压 v(s) 都可以写成这两个输入的线性组合:

y(s)=Gold(s)u(s)+Gi(s)i(s)v(s)=Gv(s)u(s)+ZD(s)i(s)

这里的四个系数定义如下:

  • Gold(s)=y/u (输入单独作用时的增益)
  • Gi(s)=y/i (电流源单独作用时的增益)
  • ZD(s)=v/i (输入置零时的端口阻抗,就是刚才说的驱动点阻抗)
  • Gv(s)=v/u (输入单独作用时,端口产生的电压)

我们的目标是求 G(s)=y/u。 因为接了 Z(s),端口上有约束 v(s)=i(s)Z(s)。我们可以把上面两个方程联立,消掉 vi,解出 y 关于 u 的表达式。中间过程略去不写,直接给你结果:

G(s)=y(s)u(s)=Gold(s)Gv(s)Gi(s)Z(s)+ZD(s)1

或者写成:

G(s)=Gold(s)Gv(s)Gi(s)Z(s)+ZD(s)Gold(s)

这个式子有点乱,因为它里面藏着 GvGi 这两个看着就很难算的传递函数。我们能不能把它们换掉?

这时候就需要那个「零输出」的思想实验了——就是前面求 ZN 时用的那套「双注入让输出归零」的玩法。

我们定义 ZN(s) 为:当输出 y(s) 被强制归零时,端口电压与注入电流的比值。

ZN(s)=v(s)i(s)|y(s)null0

要实现 y(s)=0,根据 y(s) 的方程 y=Goldu+Gii,我们可以反推出输入 u 和电流 i 必须满足的关系:

0=Gold(s)u(s)+Gi(s)i(s)u(s)i(s)|null=Gi(s)Gold(s)

现在把 v 的方程拿出来,代入上面这个 u/i 的关系,算一下这时候的 v/i(也就是 ZN):

ZN(s)=v(s)i(s)|null=Gv(s)u(s)+ZD(s)i(s)i(s)|null=Gv(s)(u(s)i(s)|null)+ZD(s)=Gv(s)(Gi(s)Gold(s))+ZD(s)=ZD(s)Gv(s)Gi(s)Gold(s)

妙啊! 看最后这一行。那个讨厌的 GvGi 乘积项出现了!我们可以把这一项解出来:

Gv(s)Gi(s)=(ZD(s)ZN(s))Gold(s)

现在,把这个结果代回到我们刚才那个乱糟糟的 G(s) 表达式里:

G(s)=Gold(s)(1ZD(s)ZN(s)Z(s)+ZD(s))=Gold(s)(Z(s)+ZD(s)(ZD(s)ZN(s))Z(s)+ZD(s))=Gold(s)(Z(s)+ZN(s)Z(s)+ZD(s))

最后,分子分母同除以 Z(s),就是我们要找的终极形式

G(s)=Gold(s)(1+ZN(s)Z(s)1+ZD(s)Z(s))

或者写成原始符号:

G(s)=G(s)|Z(s)(1+Z(s)ZN(s)1+Z(s)ZD(s))

这就推导完了。那个修正因子 1+Z/ZN1+Z/ZD 就是这样来的。


16.1.3 从公式到直觉:什么时候可以忽略它?

推导完了,现在我们来聊聊这东西怎么用。

EET 的威力不在于算出那个精确的 G(s)(虽然它也能算),而在于它给了我们一个判断标准,告诉我们什么时候那个新加的元件根本不重要。

这可是工程里最常见的场景:你设计了一个完美的滤波器,但实际焊接时,电容有个寄生电阻(ESR),或者走线有个寄生电感。你需要知道:这玩意儿会不会毁了我的设计?

根据 EET 的公式,如果那个修正因子约等于 1,那传递函数就基本没变。也就是说,只要满足:

Z(jω)ZN(jω)1Z(jω)ZD(jω)1

那么那个 (1+Z/ZN)/(1+Z/ZD) 就差不多是 1。

这就给了我们一个非常硬核的结论: 只要额外阻抗 Z 的模值,远远大于端口看进去的 ZNZD,这个元件就可以忽略。

这是对于「开路」情况。如果你是在一个短路端口上串联阻抗(对偶情况),不等号就得反过来:Z 必须远远小于 ZNZD

到底大多少才算「远远大于」?

这就是定量设计的问题了。 理论上说,越大越好。但实际工程里,我们要看容差。这其实可以画成一组很有用的「等高线」——把 Z/ZNZ/ZD 当成两个坐标轴,等高线标注的就是修正因子带来的幅度/相位偏差。

简单来说,如果 Z/ZNZ/ZD 的比值能大于 20dB(也就是 10 倍),那么修正因子带来的幅度偏差会被控制在 ±1dB 以内,相位偏差控制在 ±7° 以内。 如果是 10dB(约 3 倍),偏差就会扩大到 ±3.5dB±20°

这些图是设计滤波器和补偿网络时的秘密武器。下次你在改电路的时候,心里不再是「我感觉这影响不大」,而是「根据 EET,这影响只有 0.5dB,完全可以忽略」——这就是专业的底气。


本章回响

我们就这样拿到了 EET 这个工具。

回想一下这一节做了什么:我们并没有重新推导整个电路,而是通过观察端口特性(ZDZN),就把一个新元件对整个系统的影响给量化出来了。

这不仅仅是省了几步推导。这其实是在告诉你:线性系统的变化是有规律的,而且这种规律是局部可测的。你不需要了解整个宇宙的运行细节,你只需要了解你动手术的那个局部接口。

记得开头那个「加个电容毁了我的下午」的场景吗?现在有了 EET,那个场景变成了一个简单的检查:量一下 Z,算一下 ZNZD,看一眼波特图,决定留还是不留。

下一节,我们要把这个理论扔进几个真实的电路里去练练手。你会发现,当理论落地到实际电路时,那些原本抽象的 ZNZD,会呈现出非常有趣的物理面貌。


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

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