我希望在 ngspice 中绘制电流和功率。例如,在电压的情况下,如果我想绘制节点 1 的电压,我会使用:
plot v(1)
问题是,当我尝试 i(1) 时,无法识别矢量。有人可以提供一些关于如何做到这一点的例子吗?
我希望在 ngspice 中绘制电流和功率。例如,在电压的情况下,如果我想绘制节点 1 的电压,我会使用:
plot v(1)
问题是,当我尝试 i(1) 时,无法识别矢量。有人可以提供一些关于如何做到这一点的例子吗?
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 上的电流曲线图。