Wie zeichnet man Strom in ngspice?

11

Ich möchte den Strom und die Leistung in ngspice darstellen. Wenn ich zum Beispiel bei Spannung die Spannung an Knoten 1 zeichnen möchte, würde ich Folgendes verwenden:

plot v(1)

Das Problem ist, wenn ich i (1) versuche, wird der Vektor nicht erkannt. Könnte jemand ein paar Beispiele dafür geben?

sj755
quelle
1
i(1)ist immer 0.
Endolith

Antworten:

8

Oli gab eine korrekte Antwort, aber das I (element_name) ist eine Erweiterung, die nur den kommerziellen SPICE-Versionen hinzugefügt wurde.

In ngspice (das auf Berkeley Spice 3 basiert) können Sie Ströme nur durch (unabhängige) Spannungsquellen zeichnen. Dies sind die einzigen Ströme, die in den Schaltungsgleichungen erscheinen, mit denen SPICE arbeitet.

In einer interaktiven Spice-Sitzung oder aus einem speziellen Block im Skript (siehe auch diese Frage ) können Sie Ausdrücke verwenden, z. B. (v(1)-v(2))/1kwenn der Strom durch einen 1 kΩ-Widerstand zwischen den Knoten 1 und 2 fließt. Für reaktive Elemente (wie einen 1μF-Kondensator) sollte dies so (v(1) - v(2))/(2*pi*frequency*1u)sein auch Arbeit.

jpc
quelle
Meine zweite Lösung (mit Ausdrücken) sollte nicht sehr schwer anzuwenden sein. Möglicherweise sehen Sie im Handbuch, ob ngspice eine Möglichkeit hat, den Wert und möglicherweise sogar die Knotennamen einer Komponente abzurufen. Ich weiß mit Sicherheit, dass es Dummy-Vektoren mit Modellparametern gibt.
JPC
6

Ich habe ngspice nicht verwendet (ich verwende LTSpice, aber soweit ich weiß, basieren alle SPICEs auf der ursprünglichen Berkeley-Syntax und funktionieren ähnlich), aber normalerweise zeichnen Sie den Strom durch eine Komponente oder z. B. in die Basis eines Transistors als an einem Knoten nach Kirchoffs erstem Gesetz (die Summe der Ströme, die sich an einem Punkt treffen, ist Null)

BEARBEITEN - wie jpc betonte, sind die Dinge für ngspice (und wahrscheinlich die meisten anderen nichtkommerziellen / frühen Varianten) etwas anders, da Sie nur Ströme durch eine Spannungsquelle zeichnen können. Man müsste also eine 0-V-Quelle in den Zweig der interessierenden Schaltung einfügen und den Strom durch diese zeichnen. Ich habe unten ein Beispiel hinzugefügt.

Wenn Sie also eine einfache Schaltung haben, die aus einem Widerstand (R1) mit einer Spannungsquelle (V1) besteht (ich bin kein Experte auf der Netzliste, nehmen Sie als grobes Beispiel):

V1 1 0 5

R1 1 0 1000

(1, 0 sind die Knoten, 5 (V) und 1000 (Ohm) sind die jeweiligen Werte)

Sie können den Strom entweder mit I (R1) oder I (V1) und nicht mit I (1) zeichnen. Sie könnten jedoch V (1) für die Spannung zeichnen.

NGSPICE-Version (getestet und bestätigt)

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

Beachten Sie, dass Vdummy in Reihe mit dem Widerstand geschaltet ist, sodass derselbe Strom durch ihn fließen muss. Um den Strom für R1 zu zeichnen, schreiben wir I (Vdummy). Für eine komplexere Schaltung stellen wir nur sicher, dass die gleichen Bedingungen gelten.

Hier ist ein "echtes" Beispiel von LTspice:

NETLIST

V1 V + 0 24 Rser = 0
V2 SIG 0 SINE (-1,4563 1 m 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 uF
R3 N004 0 3K9
R4 N002 0 22K
C1 N002 SIG 100 uF

BILD DER SCHALTUNG

Schaltung Bsp

PLOT-OPTIONEN

(Beachten Sie, dass es kein I (n001), I (n002) usw. gibt.)

Plotoptionen

Oli Glaser
quelle
1
Wie jpc gerade kommentiert hat, scheint es, dass Sie mit ngspice nur Ströme durch Spannungsquellen zeichnen können. Ich habe gerade ngspice heruntergeladen und dies bestätigt. Es ist möglich, i (Vx), aber nicht i (Rx) usw. zu setzen. Ich denke, Sie müssen eine 0-V-Quelle in den Abschnitt Ihrer Schaltung einfügen, durch den Sie den Strom zeichnen möchten (sagen wir, es heißt Vx) und setze Plot i (Vx).
Oli Glaser
@OliGlaser: Tatsächlich basieren die meisten kommerziellen SPICE-Gabeln auf der SPICE2-Codebasis (in Fortran), während ngspice (und andere Open Source- / Freeware-Versionen) auf der neueren (!) C-Sprachumschreibung basiert, die SPICE3 genannt wurde. Ich glaube, die Jury ist immer noch nicht sicher, welche besser ist. :)
jpc
4

Sie können Ströme zeichnen, müssen jedoch wissen, über welche Ströme Sie Bescheid wissen möchten, bevor Sie Ihre Simulation ausführen.

Wenn Sie beispielsweise eine Diode D1 hatten und den Strom durch diese zeichnen wollten, könnten Sie:

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

Weitere Informationen finden Sie auf Seite 519 (Kapitel 31) des ngspice-Handbuchs unter http://ngspice.sourceforge.net/docs/ngspice-manual.pdf

Nigel Williams
quelle
3

Wenn Gleichspannung über eine einzelne Komponente gewobbelt wird, können Sie den Zweigstrom darstellen. Durch Laden der folgenden Netzliste

.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

zu ngspice und befehlen

dc vin -10 5 0.001
plot -vin#branch

Sie sollten in der Lage sein, ein Diagramm des Stroms über die Diode d1 zu erhalten.

gmph
quelle
2

Fügen Sie für die Stromdarstellung eine Nullspannungsquelle in diesen Zweig ein und geben Sie den Zweig vlabel # in das Terminal ein.

Prashant
quelle
3
Dies fügt nichts hinzu, was die anderen Antworten noch nicht gesagt haben, und ist zu knapp, um für sich allein nützlich zu sein.
Dave Tweed
2

Platzieren Sie seit NGSpice 27 R2017 diese Codezeile:

.options savecurrents

Speichert die Ströme, die abgerufen werden @R1[i]können @D1[id], usw.

plot @R1[i] vs v(1)

Suchen Sie im NGSpice-Handbuch nach dieser Option .

Brethlosze
quelle