如何在 ngspice 中绘制电流?

电器工程 linux 电流测量 模拟 香料
2022-01-18 20:44:43

我希望在 ngspice 中绘制电流和功率。例如,在电压的情况下,如果我想绘制节点 1 的电压,我会使用:

plot v(1)

问题是,当我尝试 i(1) 时,无法识别矢量。有人可以提供一些关于如何做到这一点的例子吗?

4个回答

Oli 给出了正确答案,但 I(element_name) 是仅添加到商业 SPICE 版本的扩展。

在 ngspice(基于 Berkeley Spice 3)中,您只能绘制通过(独立)电压源的电流。这些是出现在 SPICE 工作的电路方程中的唯一电流。

在交互式 Spice 会话中或从脚本中的特殊块(另请参见此问题)中,您可以使用表达式,例如(v(1)-v(2))/1k当电流通过节点 1 和节点 2 之间的 1kΩ 电阻时。对于电抗元件(如 1μF 电容器),(v(1) - v(2))/(2*pi*frequency*1u)应该也工作。

我没有使用过 ngspice(我使用 LTSpice,但据我了解,几乎所有 SPICE 都基于原始的伯克利语法,并且工作方式类似),但通常你绘制通过组件或进入晶体管基极的电流,而不是比在节点处,根据基尔霍夫第一定律(在一点相遇的电流之和为零)

编辑 - 正如 jpc 指出的那样,对于 ngspice(可能还有大多数其他非商业/早期变体),情况略有不同,因为您只能绘制通过电压源的电流。因此,必须在感兴趣的电路的支路中添加一个 0V 电源,并绘制通过它的电流。我在下面添加了一个示例。

因此,如果您有一个简单的电路,该电路由一个电阻器 (R1) 和一个电压源 (V1) 组成(我不是网表专家,所以举个粗略的例子):

V1 1 0 5

R1 1 0 1000

(1、0 是节点,5(V)和 1000(欧姆)是各自的值)

您可以使用 I(R1) 或 I(V1) 绘制电流,而不是 I(1)。但是,您可以为电压绘制 V(1)。

NGSPICE 版本(经过测试和确认)

V1 1 0 5
R1 1 2 1000 Vdummy 2 0 0

请注意,Vdummy 与电阻器串联,因此必须有相同的电流流过它。因此,要绘制 R1 的电流,我们写 I(Vdummy)。对于更复杂的电路,我们只需确保适用相同的条件。

这是来自 LTspice 的“真实”示例:

网表

V1 V+ 0 24 Rser=0
V2 SIG 0 SINE(-1.4563 1m 1000 0 0 0 0) AC 2 Rser=0
V3 V- 0 -24
Q1 N001 N002 N003 0 2N2222
R1 V+ N001 1f
R2 N003 V- 2K7
C2 N004 N003 100µF
R3 N004 0 3K9
R4 N002 0 22K
C1 N002 SIG 100µF

电路图

电路防爆

情节选项

(请注意,没有 I(n001)、I(n002) 等)

绘图选项

您可以绘制电流图,但在运行仿真之前,您需要知道想要了解的电流。

例如,如果您有一个二极管 D1,并且您想绘制通过它的电流,您可以:

.save @d1[id]
.tran <slice> <end>
.plot tran @d1[id]

更多信息请参见http://ngspice.sourceforge.net/docs/ngspice-manual.pdf的 ngspice 手册第 519 页(第 31 章)

如果在单个组件上扫描直流电压,您可以绘制支路电流。通过加载以下网表

.MODEL DI1N4004 D (IS=76.9n RS=42.0m  BV=4 IBV=5.00u CJO=39.8p
+M=0.333 N=1.45 TT=4.32u)

D1 1 0 DI1N4004
Vin 1 0 dc 12 ac 0

到 ngspice 和指挥

dc vin -10 5 0.001
plot -vin#branch

您应该能够获得二极管 d1 上的电流曲线图。