Nachdem ich schon einmal eine Demo zum 2. Kirchoffschen Gesetz (KVL, Kirchoff's voltage law) gemacht hatte,
wollte ich auch eine Demo zum 1. Kirchoffschen Gesetz (KCL, Kirchoff's current law) erstellen.
Während es sich in der Theorie einfach und trivial ausmacht, zeigt sich die Tücke des Objekts erst, wenn man versucht,
die Theorie zahlenmässig in einer LTspice-Simulation mittels der .measure-Direktive zu untermauern.
Auf einige Prämissen soll zuerst hingewiesen werden:
- In SPICE gilt die technische Stromrichtung, nicht die Richtung des physikalischen Elektronenflusses.
- Auch bei Widerständen ist festgelegt, in welche Richtung der Strom fliesst. In der Netzliste wird
der Anschluss, in den der Strom hineinfliesst, immer zuerst genannt. Wenn wie im Fall einer KCL-Demo
die Stromrichtung wichtig ist, muss man bei Rotation/Spiegelung eines Widerstandes darauf achten.
- Bei der Spannungsquelle (voltage source) fliesst der Strom vom Plus-Anschluss durch die
Spannungsquelle zum Minus-Anschluss, das ist internationaler STANDARD. Das zeigt sich auch daran,
dass der Strom einer Spannungsquelle i(v1) als negativer Wert ausgegeben wird (siehe Plot weiter
unten).
- LTspice zeigt nach einer TRAN-Simulation die Stromrichtung an, wenn sich der Mauszeiger über dem
Bauteil-Symbol befindet. (Für Netze ALT-Tase gedrückt und Mauszeiger aufs Netz.)
- Die folgenden Ausführungen beziehen sich auf die Simulation mit LTspiceXVII.
Wer sich die Sache einfach machen will, nimmt nur wenige Bauteile und wählt Spannung und Widerstände so,
dass sich glatte Werte für die Ströme ergeben. Das ist zwar praktisch, aber m.E. nicht so lehrreich, wenn es um die Simulation geht.
Man lernt auf solche Weise weder die Fallstricke einer Simulation noch die Eigenarten des Simulators kennen.
Hier nun erst einmal das Schaltbild für die KCL-demo:

Die Kirchoffschen Gesetze − wichtig in der Schaltungsanalyse − werden den meisten bekannt sein, das 1. Gesetz, auch Knotenregel genannt, lautet:
In einem Knotenpunkt eines elektrischen Netzwerkes ist die Summe der zufließenden Ströme gleich der Summe der abfließenden Ströme.
Die Schaltung besitzt drei Knoten (a, b und c), die in diese Knoten hinein- bzw. aus sie herausfliessenden Ströme
und ihre jeweiligen Fliessrichtungen sind gekennzeichnet (i1 - i6).
[Für den Strom "i6" habe ich mir den Kopf zerbrochen, wie ich den am besten bezeichne. Wie ich schon weiter oben erklärt habe,
ist die internationale Referenzrichtung für den Strom in das Bauteil hinein (reference direction is into the device),
für die Spannungsquelle dementsprechend von "+" durch die Quelle nach "-".
Daher ist der Strom vom Pluspol aus der Spannungsquelle heraus folglich negativ.
Das signalisiert das Minuszeichen vor "i6" im Schaltbild, bestätigt ausserdem durch den nachfolgenden Plot.]

In den Knoten "a" fliesst ein (negativer) Strom (-i6) hinein und zwei fliessen heraus (i1 + i4).
In den Knoten "b" fliessen zwei Ströme (i1 + i3) hinein, aber nur einer fliesst heraus (i2).
In den Knoten "c" fliesst ein Strom (i4) hinein und zwei fliessen heraus (i3 + i5).
Somit ergeben sich folgende Gleichungen:
-i6 = i1 + i4
i2 = i1 + i3
i4 = i3 + i5
Umgeformt erhält man
-i6 - (i1+i4) = 0
i2 - (i1+i3) = 0
i4 - (i3+i5) = 0
Leider treten auch hier - obwohl nur Gleichstrom vorliegt - ärgerliche "Fehler" auf in Form von Ergebnissen ungleich Null,
zugestandenermassen winzig klein von Null abweichend im atto-Bereich (e-19).
Und das, trotzdem die "Berechnung" selbst auf 12 Ziffern genau für Minuend sowie Subtrahend zahlenmässig identische Werte ausgibt laut measure-Direktive
(siehe folgenden Ausdruck der LOG-Datei; über die Gründe später mehr).
-i6: i(v1)=0.00204443803029
i_a: i1+i4=0.00204443803029
i2: i(r2)=0.000903962140482
i_b: i1+i3=0.000903962140482
i4: i(r4)=0.00115743329786
i_c: i3+i5=0.00115743329786
Von daher müsste die Subtraktion - wenn sie denn mit diesen Messwerten erfolgen würde! - in allen Zweigen Null ergeben, tut es aber nicht in jedem Fall!
Ausdruck der LOG-Datei bei R3=68k:
sx1: -i6-i_a=-4.33680868994e-019
sx2: i2-i_b=0
sx3: i4-i_c=0
Wie kann man also die vorstehenden Messresultate interpretieren? -- Zunächst einmal, dass wir mit der .measure-Anweisung an eine Grenze stossen,
die wir innerhalb von LTspice nicht einfach überwinden können. Warum?
Die measure-Anweisung erlaubt uns festzulegen, wie viele aufeinanderfolgende Ziffern (ohne führende Nullen) der Messwert haben kann.
Normalerweise sind das als Default 6 Ziffern, diesen Wert kann man per Option auf maximal 12 Ziffern erhöhen:
.option measdgt=12.
Diese Option kann man leicht überprüfen, indem man den Parameter "mdgt" im Bereich von 6 bis maximal 12 ändert.
Im obigen Beispiel haben wir mit der Option ".opt measdgt=mdgt; mdgt=12" für i(v1):
0.00204443803029
123456789012 12 aufeinanderfolgende Ziffern ohne die Nullen
Intern aber arbeitet LTspice mit mehr Stellen, das sehen wir, wenn wir Messwerte als Text exportieren.
Intern ist -i(v1) notiert mit: 2.044438030294830e-003 = 0.002044438030294830
.measure: 0.00204443803029
LTs intern: 0.002044438030294830
Anscheinend wird der interne Wert für .measure gerundet, gemäss der mit "measdgt=x" festgelegten Stellenzahl.
Für die Rundung wird die nachfolgende Stelle "x+1" benutzt, das wollen wir an dem Ausgabewert für -i(v1) einmal zeigen.
Bei "measdgt=12" beträgt der von der measure-Anweisung gelieferte Wert 0.00204443803029.
Vom LTspice-internen Wert 0.002044438030294830 werden die letzten drei Ziffern verworfen,
die an x+1 d.h. an dreizehnter Stelle stehende "4" bedingt Abrundung.
Setzen wir im nächsten Test "measdgt=11", so liefert die measure-Direktive 0.0020444380303 zurück.
Die an x+1 d.h. an zwölfter Stelle stehende "9" bedingt Aufrundung von "..3029" auf "..303"
Bei der Subtraktion der Messwerte benutzt LTspice jedoch - so wie es aussieht - NICHT den measure-Ausgabewert,
sondern den 16 Stellen umfassenden internen Wert!
Auf den haben wir aber innerhalb der in LTspice verfügbaren Anweisungen keinen direkten Zugriff.
[Obwohl ich meine mich erinnern zu können, dass der Maximalwert für "measdgt" früher mal bei "15" lag. (?). . Kann das jemand bestätigen?]
Wenn wir also wie in unserem Fall als Ergebnis einer Operation ein Resultat gleich Null erwarten,
die Messung aber einen Wert ungleich Null zurückliefert, der mit einem Exponenten von -19 unheimlich klein ist,
dann können wir hier von einer "logischen" Null sprechen.
Die Subtraktionen für die Ströme der drei Knoten sx1, sx2 und sx3 zeigen,
dass es sowohl glatte Werte mit dem Ergebnis einer reinen Null gibt wie auch die Möglichkeit
eines von Null minimal abweichenden Ergebnisses.
Variation des Widerstandes R3 zeigt sehr unterschiedliche Resultate.
Mit 79k für R3 bekommen wir eine reine Null für alle drei Subtraktionen.
Circuit: * C:\users\z..ges\KCL.asc
Direct Newton iteration for .op point succeeded.
vb: v(b)=1.35291268961
vc: v(c)=2.512989549
i1: i(r1)=0.000887257275866
i3: i(r3)=1.46845172074e-005
i5: i(r5)=0.00114226797682
i6: i(v1)=-0.00204420976989
i_a: i1+i4=0.00204420976989
i2: i(r2)=0.000901941793073
i_b: i1+i3=0.000901941793073
i4: i(r4)=0.00115695249402
i_c: i3+i5=0.00115695249402
sx1: -i6-i_a=0
sx2: i2-i_b=0
sx3: i4-i_c=0
res1: if(sx1==real0, sx1, if(abs(int(log10(abs(sx1))))>mdgt, logic0, 99))=0
res2: if(sx2==real0, sx2, if(abs(int(log10(abs(sx2))))>mdgt, logic0, 99))=0
res3: if(sx3==real0, sx3, if(abs(int(log10(abs(sx3))))>mdgt, logic0, 99))=0
Date: Thu Mar 12 13:53:45 2026
Total elapsed time: 0.154 seconds.
Insgesamt haben wir so mit der obigen Schaltung auch rechnerisch das 1. Kirchoffsche Gesetz im Rahmen unserer Möglichkeiten belegt.
RudiS
wollte ich auch eine Demo zum 1. Kirchoffschen Gesetz (KCL, Kirchoff's current law) erstellen.
Während es sich in der Theorie einfach und trivial ausmacht, zeigt sich die Tücke des Objekts erst, wenn man versucht,
die Theorie zahlenmässig in einer LTspice-Simulation mittels der .measure-Direktive zu untermauern.
Auf einige Prämissen soll zuerst hingewiesen werden:
- In SPICE gilt die technische Stromrichtung, nicht die Richtung des physikalischen Elektronenflusses.
- Auch bei Widerständen ist festgelegt, in welche Richtung der Strom fliesst. In der Netzliste wird
der Anschluss, in den der Strom hineinfliesst, immer zuerst genannt. Wenn wie im Fall einer KCL-Demo
die Stromrichtung wichtig ist, muss man bei Rotation/Spiegelung eines Widerstandes darauf achten.
- Bei der Spannungsquelle (voltage source) fliesst der Strom vom Plus-Anschluss durch die
Spannungsquelle zum Minus-Anschluss, das ist internationaler STANDARD. Das zeigt sich auch daran,
dass der Strom einer Spannungsquelle i(v1) als negativer Wert ausgegeben wird (siehe Plot weiter
unten).
- LTspice zeigt nach einer TRAN-Simulation die Stromrichtung an, wenn sich der Mauszeiger über dem
Bauteil-Symbol befindet. (Für Netze ALT-Tase gedrückt und Mauszeiger aufs Netz.)
- Die folgenden Ausführungen beziehen sich auf die Simulation mit LTspiceXVII.
Wer sich die Sache einfach machen will, nimmt nur wenige Bauteile und wählt Spannung und Widerstände so,
dass sich glatte Werte für die Ströme ergeben. Das ist zwar praktisch, aber m.E. nicht so lehrreich, wenn es um die Simulation geht.
Man lernt auf solche Weise weder die Fallstricke einer Simulation noch die Eigenarten des Simulators kennen.
Hier nun erst einmal das Schaltbild für die KCL-demo:

Die Kirchoffschen Gesetze − wichtig in der Schaltungsanalyse − werden den meisten bekannt sein, das 1. Gesetz, auch Knotenregel genannt, lautet:
In einem Knotenpunkt eines elektrischen Netzwerkes ist die Summe der zufließenden Ströme gleich der Summe der abfließenden Ströme.
Die Schaltung besitzt drei Knoten (a, b und c), die in diese Knoten hinein- bzw. aus sie herausfliessenden Ströme
und ihre jeweiligen Fliessrichtungen sind gekennzeichnet (i1 - i6).
[Für den Strom "i6" habe ich mir den Kopf zerbrochen, wie ich den am besten bezeichne. Wie ich schon weiter oben erklärt habe,
ist die internationale Referenzrichtung für den Strom in das Bauteil hinein (reference direction is into the device),
für die Spannungsquelle dementsprechend von "+" durch die Quelle nach "-".
Daher ist der Strom vom Pluspol aus der Spannungsquelle heraus folglich negativ.
Das signalisiert das Minuszeichen vor "i6" im Schaltbild, bestätigt ausserdem durch den nachfolgenden Plot.]

In den Knoten "a" fliesst ein (negativer) Strom (-i6) hinein und zwei fliessen heraus (i1 + i4).
In den Knoten "b" fliessen zwei Ströme (i1 + i3) hinein, aber nur einer fliesst heraus (i2).
In den Knoten "c" fliesst ein Strom (i4) hinein und zwei fliessen heraus (i3 + i5).
Somit ergeben sich folgende Gleichungen:
-i6 = i1 + i4
i2 = i1 + i3
i4 = i3 + i5
Umgeformt erhält man
-i6 - (i1+i4) = 0
i2 - (i1+i3) = 0
i4 - (i3+i5) = 0
Leider treten auch hier - obwohl nur Gleichstrom vorliegt - ärgerliche "Fehler" auf in Form von Ergebnissen ungleich Null,
zugestandenermassen winzig klein von Null abweichend im atto-Bereich (e-19).
Und das, trotzdem die "Berechnung" selbst auf 12 Ziffern genau für Minuend sowie Subtrahend zahlenmässig identische Werte ausgibt laut measure-Direktive
(siehe folgenden Ausdruck der LOG-Datei; über die Gründe später mehr).
-i6: i(v1)=0.00204443803029
i_a: i1+i4=0.00204443803029
i2: i(r2)=0.000903962140482
i_b: i1+i3=0.000903962140482
i4: i(r4)=0.00115743329786
i_c: i3+i5=0.00115743329786
Von daher müsste die Subtraktion - wenn sie denn mit diesen Messwerten erfolgen würde! - in allen Zweigen Null ergeben, tut es aber nicht in jedem Fall!
Ausdruck der LOG-Datei bei R3=68k:
sx1: -i6-i_a=-4.33680868994e-019
sx2: i2-i_b=0
sx3: i4-i_c=0
Wie kann man also die vorstehenden Messresultate interpretieren? -- Zunächst einmal, dass wir mit der .measure-Anweisung an eine Grenze stossen,
die wir innerhalb von LTspice nicht einfach überwinden können. Warum?
Die measure-Anweisung erlaubt uns festzulegen, wie viele aufeinanderfolgende Ziffern (ohne führende Nullen) der Messwert haben kann.
Normalerweise sind das als Default 6 Ziffern, diesen Wert kann man per Option auf maximal 12 Ziffern erhöhen:
.option measdgt=12.
Diese Option kann man leicht überprüfen, indem man den Parameter "mdgt" im Bereich von 6 bis maximal 12 ändert.
Im obigen Beispiel haben wir mit der Option ".opt measdgt=mdgt; mdgt=12" für i(v1):
0.00204443803029
123456789012 12 aufeinanderfolgende Ziffern ohne die Nullen
Intern aber arbeitet LTspice mit mehr Stellen, das sehen wir, wenn wir Messwerte als Text exportieren.
Intern ist -i(v1) notiert mit: 2.044438030294830e-003 = 0.002044438030294830
.measure: 0.00204443803029
LTs intern: 0.002044438030294830
Anscheinend wird der interne Wert für .measure gerundet, gemäss der mit "measdgt=x" festgelegten Stellenzahl.
Für die Rundung wird die nachfolgende Stelle "x+1" benutzt, das wollen wir an dem Ausgabewert für -i(v1) einmal zeigen.
Bei "measdgt=12" beträgt der von der measure-Anweisung gelieferte Wert 0.00204443803029.
Vom LTspice-internen Wert 0.002044438030294830 werden die letzten drei Ziffern verworfen,
die an x+1 d.h. an dreizehnter Stelle stehende "4" bedingt Abrundung.
Setzen wir im nächsten Test "measdgt=11", so liefert die measure-Direktive 0.0020444380303 zurück.
Die an x+1 d.h. an zwölfter Stelle stehende "9" bedingt Aufrundung von "..3029" auf "..303"
Bei der Subtraktion der Messwerte benutzt LTspice jedoch - so wie es aussieht - NICHT den measure-Ausgabewert,
sondern den 16 Stellen umfassenden internen Wert!
Auf den haben wir aber innerhalb der in LTspice verfügbaren Anweisungen keinen direkten Zugriff.
[Obwohl ich meine mich erinnern zu können, dass der Maximalwert für "measdgt" früher mal bei "15" lag. (?). . Kann das jemand bestätigen?]
Wenn wir also wie in unserem Fall als Ergebnis einer Operation ein Resultat gleich Null erwarten,
die Messung aber einen Wert ungleich Null zurückliefert, der mit einem Exponenten von -19 unheimlich klein ist,
dann können wir hier von einer "logischen" Null sprechen.
Die Subtraktionen für die Ströme der drei Knoten sx1, sx2 und sx3 zeigen,
dass es sowohl glatte Werte mit dem Ergebnis einer reinen Null gibt wie auch die Möglichkeit
eines von Null minimal abweichenden Ergebnisses.
Variation des Widerstandes R3 zeigt sehr unterschiedliche Resultate.
Mit 79k für R3 bekommen wir eine reine Null für alle drei Subtraktionen.
Circuit: * C:\users\z..ges\KCL.asc
Direct Newton iteration for .op point succeeded.
vb: v(b)=1.35291268961
vc: v(c)=2.512989549
i1: i(r1)=0.000887257275866
i3: i(r3)=1.46845172074e-005
i5: i(r5)=0.00114226797682
i6: i(v1)=-0.00204420976989
i_a: i1+i4=0.00204420976989
i2: i(r2)=0.000901941793073
i_b: i1+i3=0.000901941793073
i4: i(r4)=0.00115695249402
i_c: i3+i5=0.00115695249402
sx1: -i6-i_a=0
sx2: i2-i_b=0
sx3: i4-i_c=0
res1: if(sx1==real0, sx1, if(abs(int(log10(abs(sx1))))>mdgt, logic0, 99))=0
res2: if(sx2==real0, sx2, if(abs(int(log10(abs(sx2))))>mdgt, logic0, 99))=0
res3: if(sx3==real0, sx3, if(abs(int(log10(abs(sx3))))>mdgt, logic0, 99))=0
Date: Thu Mar 12 13:53:45 2026
Total elapsed time: 0.154 seconds.
Insgesamt haben wir so mit der obigen Schaltung auch rechnerisch das 1. Kirchoffsche Gesetz im Rahmen unserer Möglichkeiten belegt.
RudiS
Anhänge
Zuletzt bearbeitet: