源类元件如何进入节点电压法

上一篇文章把普通支路接进了节点电压法。电阻支路可以写成:

i=G(uaub)i=G(u_a-u_b)

电感、电容和 RLC 串联支路离散以后,也可以整理成:

i=Geq(uaub)+Ihisi=G_{\mathrm{eq}}(u_a-u_b)+I_{\mathrm{his}}

所以它们进入节点矩阵时,结构都很像:

[iaib]=[GGGG][uaub]+[IhisIhis]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}G&-G\\-G&G\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}+\begin{bmatrix}I_{\mathrm{his}}\\-I_{\mathrm{his}}\end{bmatrix}

源类元件会让事情多一层。前面 R、L、C 支路的电流主要由自己两端的电压和历史状态决定;而电流源、电压源和受控源,还会引入一个“源量”。

这个源量有两种常见来源。一种是外部显式给定的信号,例如一个工频正弦电流、工频正弦电压、控制器输出的 PWM 占空比,或者某个仿真模块传进来的参考量;这种情况下,源量在当前步开始前通常已经是已知量。另一种是来自电路内部,例如另两个节点之间的电压,或者某条支路的电流;这种情况下,源量可能和当前待求的节点电压、支路电流耦合在一起。

所以本文先从最普通的显式电流源、显式电压源讲起,再看它们推广成受控源以后,怎样写进节点电压法的矩阵。

本文仍然沿用上一篇文章的约定:

  • 节点电压写作ua,ub,uc,udu_a,u_b,u_c,u_d
  • 输出支路方向从节点aa指向节点bb
  • 对节点写方程时,从该节点流出的支路电流记为正。
  • 控制电压写作ucd=ucudu_{cd}=u_c-u_d

显式电流源

先看最普通的独立电流源。设电流源接在节点aa和节点bb之间,电流方向从aa指向bb,当前步电流值为已知量IsI_s

显式电流源连接两个节点
显式电流源连接节点 a 和节点 b
i=Isi=I_s

按“流出节点为正”的约定,对两个端点有:

ia=Isi_a=I_sib=Isi_b=-I_s

写成矩阵形式就是:

[iaib]=[0000][uaub]+[IsIs]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}0&0\\0&0\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}+\begin{bmatrix}I_s\\-I_s\end{bmatrix}

这个式子很直观:理想电流源不提供导纳,所以左边的矩阵是零矩阵;它只给当前步节点方程贡献一个已知电流向量。

显式电流源的工程建模

工程软件里,理想电流源经常不会孤零零地放进网络。很多模型会给电流源并联一个很大的电阻,也就是并联一个很小的导纳。这样做不是为了改变电流源的主要物理作用,而是为了让这个端口在节点矩阵里多少有一点导纳约束。

为什么要这样做?先看一个“不并联”的例子。只给一个理想电流源时,支路本身不提供导纳约束。即使这个电流源再串联一个电阻,只要从节点矩阵角度把中间节点也列出来,局部矩阵仍然可能是奇异的。

看下面这个例子。显式电流源从节点aa指向节点bb,电流为IsI_s;节点bb再经过电阻RR连接到节点dd

显式电流源串联电阻支路
显式电流源串联电阻时,电流源端口仍然不提供导纳约束

电阻支路电流为:

iR=G(ubud)i_R=G(u_b-u_d)

其中G=1/RG=1/R。按前面的符号约定,三个节点的局部贡献可以写成:

[iaibid]=[0000GG0GG][uaubud]+[IsIs0]\begin{bmatrix}i_a\\i_b\\i_d\end{bmatrix}=\begin{bmatrix}0&0&0\\0&G&-G\\0&-G&G\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_d\end{bmatrix}+\begin{bmatrix}I_s\\-I_s\\0\end{bmatrix}

这个矩阵仍然是奇异的。第一列全是 0,说明节点aa的电压不会影响任何支路电流。物理上也很好理解:理想电流源会强制给出支路电流,电流源两端电压由外部网络决定;如果节点aa没有再接到别的导纳、地或电压约束,仅靠这条“电流源 + 电阻”的局部支路,无法唯一确定uau_a

这不是说“电流源串联电阻不能用”,而是说它需要放进完整网络里看。如果节点aa还接着其他电阻、电感伴随导纳、电容伴随导纳或电压约束,那么全局矩阵可能仍然可解;但理想电流源本身不会像电阻那样给两端节点贡献一个稳定的2×22\times2导纳块。

因此,很多工程模型不会只给一个理想电流源,而是给一个电流源并联一个导纳,或者在数值上并联一个很大的电阻。比如诺顿等效、Dommel 伴随模型里的“等效导纳 + 历史电流源”,都可以看成这种形式。

电流源并联电阻的工程建模
工程上常把电流源并联一个大电阻,也就是一个小导纳

设并联导纳为GG,电流源仍然从aa指向bb,则支路总电流为:

i=G(uaub)+Isi=G(u_a-u_b)+I_s

节点贡献为:

ia=G(uaub)+Isi_a=G(u_a-u_b)+I_sib=G(ubua)Isi_b=G(u_b-u_a)-I_s

矩阵形式为:

[iaib]=[GGGG][uaub]+[IsIs]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}G&-G\\-G&G\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}+\begin{bmatrix}I_s\\-I_s\end{bmatrix}

这个式子其实就是前面 Dommel 形式的通用外壳:

i=Gequ+Ihisi=G_{\mathrm{eq}}u+I_{\mathrm{his}}

只不过这里把IhisI_{\mathrm{his}}换成了一个显式已知的IsI_s。从矩阵装配角度看,二者完全同型:GG进入导纳矩阵,已知电流源进入当前步的已知项。

显式电压源

显式电压源比电流源麻烦,因为理想电压源给的是电压约束,而不是支路电流。先只看一个单独的理想电压源:

显式电压源连接两个节点
理想电压源规定两端电压,但不直接给出支路电流

它告诉我们:

uaub=Usu_a-u_b=U_s

如果我们想像前面那样把支路整理成:

i=G(uaub)+Ihisi=G(u_a-u_b)+I_{\mathrm{his}}

会立刻卡住。理想电压源没有给出iiuaubu_a-u_b之间的导纳关系。它只说电压必须等于UsU_s,至于为了维持这个电压需要流过多少电流,要由外部电路决定。

所以单独一个理想电压源不能直接写成普通支路的 Dommel 形式。那就回到上一篇文章的 RLC 例子:理想电压源驱动一条 RLC 串联支路。RLC 离散以后可以写成:

i=Geq(uaub)+Ihisi=G_{\mathrm{eq}}(u_a-u_b)+I_{\mathrm{his}}
接地电压源驱动 RLC 支路
理想电压源串联 RLC 支路(未接地)

先不要急着接地。把 RLC 串联支路整体看成一个等效导纳GeqG_{\mathrm{eq}}和历史项IhisI_{\mathrm{his}}。假设电压源和 RLC 支路都接在节点a,ba,b之间,电压源给出:

uaub=Usu_a-u_b=U_s

只看 RLC 这条支路本身,矩阵表达是:

[iaib]=[GeqGeqGeqGeq][uaub]+[IhisIhis]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}G_{\mathrm{eq}}&-G_{\mathrm{eq}}\\-G_{\mathrm{eq}}&G_{\mathrm{eq}}\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}+\begin{bmatrix}I_{\mathrm{his}}\\-I_{\mathrm{his}}\end{bmatrix}

这个式子看起来已经没有什么问题了:有导纳矩阵,也有已知源项,形式上非常像前面一直写的:

I=GV+IhisI=GV+I_{\mathrm{his}}

再加上电压源约束:

uaub=Usu_a-u_b=U_s

看起来好像也说得通:RLC 支路电流由uaubu_a-u_b决定,电压源又给出了uaubu_a-u_b

问题出在整个网络没有参考地。如果整个网络只有这两个节点,而且没有任何一个节点被选为参考地,那么它仍然缺一个绝对电位参考。**因为电压源只规定两个节点之间的差值,它没有规定uau_aubu_b分别相对于哪里。**两个节点电压同时加上同一个常数,支路电压、电压源约束和所有支路电流都不变。

从矩阵上也能直接看出来。上面的矩阵本质上就是:

Y=[GeqGeqGeqGeq]Y=\begin{bmatrix}G_{\mathrm{eq}}&-G_{\mathrm{eq}}\\-G_{\mathrm{eq}}&G_{\mathrm{eq}}\end{bmatrix}

这个矩阵的行列式为:

det(Y)=Geq2Geq2=0\det(Y)=G_{\mathrm{eq}}^2-G_{\mathrm{eq}}^2=0

所以它不能求逆。换句话说,存在一个“共同平移”的方向,矩阵乘上去以后什么也不变:

Y[11]=[00]Y\begin{bmatrix}1\\1\end{bmatrix}=\begin{bmatrix}0\\0\end{bmatrix}

这个式子不用想得太抽象。向量[11]T\begin{bmatrix}1&1\end{bmatrix}^T表示两个节点电压一起增加同一个量;矩阵乘出来是 0,意思就是这种共同增加不会改变任何支路电压差。于是解不唯一。例如:

ua=100,ub=0u_a=100,\quad u_b=0

和:

ua=110,ub=10u_a=110,\quad u_b=10

对只关心uaubu_a-u_b的支路来说是同一个状态。这个时候,矩阵就会出现参考电位未定的问题。

所以,真正做节点电压法时必须选一个参考地。上一篇文章里为了把实战讲清楚,采用的就是最简单的情况:电压源一端接地,另一端接节点aa

此时:

ub=0u_b=0

电压源直接给出:

ua=Usu_a=U_s

这时节点aa的电压就有了明确参考,前面那个“整体平移”的自由度被消掉了。

显式电压源的工程建模

那么,有没有办法可以让电压源也写成I=GV+IhisI=GV+I_{\mathrm{his}}模式?工程上有一种常见处理:把电压源串联一个很小的电阻RsR_s,把理想电压源变成带内阻的实际电压源。

电压源串联小电阻的工程建模
工程上常把电压源串联一个小电阻,使支路能写成导纳形式

若按图中方向把UsU_s看成从aabb的电压源压降,则:

uaub=Us+Rsiu_a-u_b=U_s+R_s i

于是:

i=1Rs(uaub)UsRsi=\frac{1}{R_s}(u_a-u_b)-\frac{U_s}{R_s}

Gs=1/RsG_s=1/R_s,就得到:

i=Gs(uaub)GsUsi=G_s(u_a-u_b)-G_sU_s

矩阵形式为:

[iaib]=[GsGsGsGs][uaub]+[GsUsGsUs]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}G_s&-G_s\\-G_s&G_s\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}+\begin{bmatrix}-G_sU_s\\G_sU_s\end{bmatrix}

这样它又回到了“导纳矩阵 + 已知源项”的形式。如果它再和 RLC 支路并联,总导纳就是:

Gtot=Geq+GsG_{\mathrm{tot}}=G_{\mathrm{eq}}+G_s

对应矩阵可以写成:

[iaib]=[GtotGtotGtotGtot][uaub]+[IhisGsUsIhis+GsUs]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}G_{\mathrm{tot}}&-G_{\mathrm{tot}}\\-G_{\mathrm{tot}}&G_{\mathrm{tot}}\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}+\begin{bmatrix}I_{\mathrm{his}}-G_sU_s\\-I_{\mathrm{his}}+G_sU_s\end{bmatrix}

但要注意,串联RsR_s解决的是“电压源支路能不能写成导纳形式”的问题,不解决“整个网络有没有参考地”的问题。如果整个网络仍然浮空,这个2×22\times2矩阵依然行和为 0,仍然不可逆。接地是为了给节点电压选择参考零点,不能由RsR_s代替。

代价是RsR_s是人为加入的工程参数;取得太小,矩阵可能病态,取得太大,又会明显改变电路行为。

如果电压源浮接在两个非参考节点之间,又不想引入这个串联小电阻近似,就不能再强行把它当成普通导纳支路处理了。后面讨论受控电压源时,会再看到这种电压约束怎样把问题推向 MNA。

压控电流源 VCCS

有了显式电流源以后,再看压控电流源就很自然了。显式电流源的IsI_s是当前步已知量;压控电流源只是把这个电流值换成了另一个节点电压差的线性函数。

受控源的输出端口和控制端口
受控源有输出端口,也有控制量来源

设受控电流源输出端口接在节点aa和节点bb之间,输出电流方向从aa指向bb。它受节点cc到节点dd的电压控制:

i=gm(ucud)i=g_m(u_c-u_d)

其中gmg_m是跨导,单位是西门子。它表示控制端电压每变化1 V1\ \mathrm{V},输出端口电流变化多少安培。

这里要注意,gmg_m不一定是节点c,dc,d之间某个真实电阻的电导。节点c,dc,d之间的电压ucudu_c-u_d只是控制信号;gmg_m是受控源模型自己给定的比例系数。只有当后面明确写出某条真实电阻支路,例如ix=Gx(ucud)i_x=G_x(u_c-u_d)时,那个GxG_x才表示c,dc,d支路的电导。

对输出端口两个节点来说:

ia=i=gm(ucud)i_a=i=g_m(u_c-u_d)ib=i=gm(ucud)i_b=-i=-g_m(u_c-u_d)

如果把节点顺序取为a,b,c,da,b,c,d,就可以写成:

[iaibicid]=[00gmgm00gmgm00000000][uaubucud]\begin{bmatrix}i_a\\i_b\\i_c\\i_d\end{bmatrix}=\begin{bmatrix}0&0&g_m&-g_m\\0&0&-g_m&g_m\\0&0&0&0\\0&0&0&0\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_c\\u_d\end{bmatrix}

这个矩阵容易让人误会,关键要分清“输出端口”和“控制端口”。

前两行说明的是输出端口:节点a,ba,b的流出电流由控制电压ucudu_c-u_d决定,所以ia,ibi_a,i_buc,udu_c,u_d有关,而不是和ua,ubu_a,u_b有关。这正是受控电流源和普通电阻的区别。普通电阻的支路电流由自己两端电压决定;VCCS 的输出电流由另一个电压差决定。

后两行写成 0,并不是说这个元件和uc,udu_c,u_d没有关系。它的意思是:理想控制端口只“读取”ucudu_c-u_d,不从节点c,dc,d吸收电流。换句话说,uc,udu_c,u_d是控制信号来源,ic,idi_c,i_d不是由这只受控源注入的电流。

这个局部矩阵本身也确实是奇异的。它不能像一个完整电路那样单独拿来求逆,因为它没有给a,ba,b端口提供导纳约束,也没有给c,dc,d端口提供电流约束。节点电压法里的“元件矩阵”更准确地说是全局矩阵的一个装配贡献:程序把这些系数加到全局矩阵里,再和其他电阻、伴随导纳、接地约束、电压源约束一起求解。

所以,VCCS 仍然属于普通节点电压法能直接处理的形式。因为右边只含节点电压,没有出现新的未知电流;它的问题不是“不能装配”,而是“不能把这一只元件的局部矩阵当成完整可逆系统”。

如果控制端口和输出端口刚好是同一对节点,也就是c=a,d=bc=a,d=b,那么 VCCS 退化成:

i=gm(uaub)i=g_m(u_a-u_b)

这时它就像一个电导值为gmg_m的普通支路:

[iaib]=[gmgmgmgm][uaub]\begin{bmatrix}i_a\\i_b\end{bmatrix}=\begin{bmatrix}g_m&-g_m\\-g_m&g_m\end{bmatrix}\begin{bmatrix}u_a\\u_b\end{bmatrix}

所以 VCCS 并不神秘。只要控制量是节点电压差,它就能直接变成节点矩阵中的若干系数。

我们实战模拟一下。假设 VCCS 的输出端a,ba,b之间并了一个电阻RoR_o,导纳为Go=1/RoG_o=1/R_o;控制端c,dc,d之间接了一个显式电压源UsU_s,同时并联一个电阻RxR_x,导纳为Gx=1/RxG_x=1/R_x。这时图上看起来有两个部分:左边是输出端口,右边是控制端口,中间只有控制关系,不是一根真实导线。

VCCS 输出端并联电阻且控制端接显式电压源和电阻
VCCS 的输出端和控制端可以属于两个浮空部分

控制端电压源给出:

ucud=Usu_c-u_d=U_s

节点电流可以写成:

[iaibicid]=[GoGogmgmGoGogmgm00GxGx00GxGx][uaubucud]\begin{bmatrix}i_a\\i_b\\i_c\\i_d\end{bmatrix}=\begin{bmatrix}G_o&-G_o&g_m&-g_m\\-G_o&G_o&-g_m&g_m\\0&0&G_x&-G_x\\0&0&-G_x&G_x\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_c\\u_d\end{bmatrix}

电压源约束可以写成:

[0011][uaubucud]=Us\begin{bmatrix}0&0&1&-1\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_c\\u_d\end{bmatrix}=U_s

这组式子已经能看出受控关系:c,dc,d的电压差会通过gmg_m影响a,ba,b端口电流;控制端并联的RxR_x也会给c,dc,d两行贡献一个普通导纳块。但是如果整个网络只有这两块,仍然还没有唯一解。原因是:c,dc,d之间的理想电压源和并联电阻都只关心ucudu_c-u_d,没有规定uc,udu_c,u_d整体相对于哪里;a,ba,b之间的电阻只规定由uaubu_a-u_b产生的电流,也没有规定a,ba,b整体相对于哪里。

所以如果a,ba,bc,dc,d是两个互相没有导纳连接的浮空部分,最简单的处理就是各选一个参考点,例如:

ub=0,ud=0u_b=0,\qquad u_d=0

这时:

uc=Usu_c=U_s

若节点aa没有外部注入电流,取ia=0i_a=0,则:

Goua+gmUs=0G_o u_a+g_m U_s=0

因此:

ua=gmGoUsu_a=-\frac{g_m}{G_o}U_s

也就是说,受控源的“控制关系”会把c,dc,d的电压差带到a,ba,b的方程里,但它不等于一条普通导线,也不自动给每个浮空部分提供参考地。真正求解时,每个独立浮空网络都需要有参考点,或者接到一个已经有参考点的外部网络。

后面几类受控源也会遇到同样的问题。为了避免文章变得重复,后文主要讨论它们怎样进入矩阵;至于某个具体电路能不能唯一求解,仍然要回到全局网络里检查参考地、导纳路径和额外约束是否足够。

流控电流源 CCCS

流控电流源的输出电流由另一条支路电流控制。设输出端口仍然是aba\rightarrow b,输出电流为:

流控电流源由控制支路电流决定输出电流
流控电流源用控制支路电流决定输出端口电流
i=βixi=\beta i_x

其中β\beta是电流放大系数,ixi_x是控制支路电流。

图中右侧的RxR_x支路只是用来测量或定义控制电流ixi_x,左侧菱形电流源才是输出端口。CCCS 的意思就是:输出端口流出多少电流,不直接由输出端口电压uaubu_a-u_b决定,而是由另一条支路里的电流ixi_x决定。

这里要分两种情况。

如果控制电流ixi_x本身可以由节点电压直接写出来,例如它是节点cc到节点dd之间一个电阻支路的电流:

ix=Gx(ucud)i_x=G_x(u_c-u_d)

那么 CCCS 立刻变成:

i=βGx(ucud)i=\beta G_x(u_c-u_d)

这和 VCCS 完全同型,只是把gmg_m换成βGx\beta G_x

[iaibicid]=[00βGxβGx00βGxβGx00000000][uaubucud]\begin{bmatrix}i_a\\i_b\\i_c\\i_d\end{bmatrix}=\begin{bmatrix}0&0&\beta G_x&-\beta G_x\\0&0&-\beta G_x&\beta G_x\\0&0&0&0\\0&0&0&0\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_c\\u_d\end{bmatrix}

这时它仍然可以放进普通节点电压法。

但如果ixi_x不是一个能直接由节点电压表达的量,例如它是某个理想电压源支路的电流,或者是某个需要额外未知量才能得到的内部电流,那么普通节点电压法就不够用了。程序必须把ixi_x也作为额外未知量,或者从对应元件模型的内部状态里取出这个控制量。

所以 CCCS 能不能直接写进节点矩阵,关键不在“它是受控电流源”这几个字,而在控制电流ixi_x是否已经能写成节点电压的线性组合。

压控电压源 VCVS

受控电压源就麻烦得多。设电压源接在节点aa和节点bb之间,输出电压受ucudu_c-u_d控制:

压控电压源由控制端电压决定输出电压
压控电压源的输出端是电压约束,控制量来自另一个电压差
uaub=μ(ucud)u_a-u_b=\mu(u_c-u_d)

其中μ\mu是电压放大倍数。

这个式子不是电流方程,而是电压约束。普通节点电压法习惯的是:

节点流出电流=节点电压的线性组合\text{节点流出电流}=\text{节点电压的线性组合}

但理想电压源不直接告诉我们支路电流是多少。为了写 KCL,必须引入这个电压源支路电流作为额外未知量。设该电流为iEi_E,方向从aabb

于是对节点a,ba,b有:

ia=iEi_a=i_Eib=iEi_b=-i_E

同时还要加上电压源约束:

uaubμuc+μud=0u_a-u_b-\mu u_c+\mu u_d=0

把未知量顺序取为:

[uaubucudiE]T\begin{bmatrix}u_a&u_b&u_c&u_d&i_E\end{bmatrix}^T

则这个 VCVS 对方程的贡献可以写成:

[iaibicid0]=[0000100001000000000011μμ0][uaubucudiE]\begin{bmatrix}i_a\\i_b\\i_c\\i_d\\0\end{bmatrix}=\begin{bmatrix}0&0&0&0&1\\0&0&0&0&-1\\0&0&0&0&0\\0&0&0&0&0\\1&-1&-\mu&\mu&0\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_c\\u_d\\i_E\end{bmatrix}

最后一行不是 KCL,而是电压约束方程。也正是因为多了这一行、多了iEi_E这个未知量,我们已经从普通节点电压法走向了改进节点电压法,也就是常说的 MNA,英文全称是 Modified Nodal Analysis。

这不是坏事。工程程序里处理理想电压源、受控电压源、理想变压器等元件时,本来就经常需要这种“节点电压 + 支路电流”的混合未知量。MNA 的完整组装和求解细节以后会单独讲;这里先不展开,只需要看清楚受控电压源为什么会把额外支路电流带进方程组。

流控电压源 CCVS

流控电压源的输出电压由另一个支路电流控制。设:

流控电压源由控制支路电流决定输出电压
流控电压源的输出端是电压约束,控制量来自另一条支路电流
uaub=rmixu_a-u_b=r_m i_x

其中rmr_m是转移电阻,单位是欧姆。

如果控制电流ixi_x能够写成某个电阻支路的电流:

ix=Gx(ucud)i_x=G_x(u_c-u_d)

那么约束方程可以写成:

uaubrmGx(ucud)=0u_a-u_b-r_mG_x(u_c-u_d)=0

仍然引入输出电压源电流iHi_H,方向从aabb。这里的iHi_H不是外部给定的控制量,而是这个受控电压源输出端实际流过的支路电流。因为电压源本身只规定输出电压,不直接给出输出电流,所以求解器必须把这个电流也当成未知量一起求。

未知量顺序取为:

[uaubucudiH]T\begin{bmatrix}u_a&u_b&u_c&u_d&i_H\end{bmatrix}^T

矩阵形式为:

[iaibicid0]=[0000100001000000000011rmGxrmGx0][uaubucudiH]\begin{bmatrix}i_a\\i_b\\i_c\\i_d\\0\end{bmatrix}=\begin{bmatrix}0&0&0&0&1\\0&0&0&0&-1\\0&0&0&0&0\\0&0&0&0&0\\1&-1&-r_mG_x&r_mG_x&0\end{bmatrix}\begin{bmatrix}u_a\\u_b\\u_c\\u_d\\i_H\end{bmatrix}

如果ixi_x本身不能由节点电压直接表达,那么还需要把ixi_x作为额外未知量。此时约束行更像:

uaubrmix=0u_a-u_b-r_m i_x=0

这说明 CCVS 比 VCVS 又多了一层依赖:不仅输出端是电压源约束,控制量也可能要求额外变量。

小结

这一篇的核心其实很简单:受控源能不能自然进入普通节点电压法,取决于它能不能写成“节点流出电流等于节点电压的线性组合”。

压控电流源最友好:

i=gm(ucud)i=g_m(u_c-u_d)

它可以直接写进节点导纳矩阵,只是矩阵通常不再对称。

流控电流源要看控制电流能不能由节点电压表示。如果:

ix=Gx(ucud)i_x=G_x(u_c-u_d)

那么它也可以化成类似 VCCS 的形式;否则就需要额外变量或内部状态。

受控电压源则不同。它给的是电压约束:

uaub=μ(ucud)u_a-u_b=\mu(u_c-u_d)

这类元件通常必须引入电压源支路电流作为额外未知量,于是问题自然进入 MNA。普通节点电压法不是不能继续发展,而是未知量集合已经从“只有节点电压”扩展成了“节点电压 + 某些支路电流”。

所以,从程序实现角度看,受控源不是一个单独的魔法元件。受控电流源主要是在矩阵中增加跨行列系数;受控电压源主要是在方程组中增加约束行和额外电流未知量。把这一点看清楚,后面再理解 MNA 就会顺很多。


相关内容

Buy me a coffee~
RLC侠 支付宝支付宝
RLC侠 微信微信