Comment tracer le courant dans ngspice?

11

Je souhaite tracer le courant et la puissance dans ngspice. Dans le cas de la tension, par exemple, si je voulais tracer la tension au nœud 1, j'utiliserais:

plot v(1)

Le problème est que lorsque j'essaye i (1), le vecteur n'est pas reconnu. Quelqu'un pourrait-il fournir quelques exemples sur la façon de procéder?

sj755
la source
1
i(1)est toujours 0.
endolith

Réponses:

8

Oli a donné une bonne réponse mais le I (nom_élément) est une extension ajoutée uniquement aux versions commerciales SPICE.

Dans ngspice (qui est basé sur Berkeley Spice 3), vous ne pouvez tracer des courants qu'à travers des sources de tension (indépendantes). Ce sont les seuls courants qui apparaissent dans les équations du circuit à partir desquelles SPICE fonctionne.

Dans une session Spice interactive ou à partir d'un bloc spécial du script (voir également cette question ), vous pouvez utiliser des expressions comme (v(1)-v(2))/1klorsque le courant passe par une résistance de 1 kΩ entre les nœuds 1 et 2. Pour les éléments réactifs (comme un condensateur de 1 μF), quelque chose comme (v(1) - v(2))/(2*pi*frequency*1u)devrait fonctionnent également.

jpc
la source
Ma deuxième solution (avec des expressions) ne devrait pas être très difficile à appliquer. Vous pouvez voir dans le manuel si ngspice a un moyen d'obtenir la valeur et peut-être même les noms de nœuds d'un composant. Je sais avec certitude qu'il existe des vecteurs factices avec des paramètres de modèle.
jpc
6

Je n'ai pas utilisé ngspice (j'utilise LTSpice, mais d'après ce que je comprends à peu près tous les SPICE sont basés sur la syntaxe originale de Berkeley, et fonctionnent de manière similaire), mais généralement vous tracez le courant à travers un composant ou dans par exemple la base d'un transistor, plutôt qu'à un nœud, selon la première loi de Kirchoff (la somme des courants se rencontrant en un point est nulle)

EDIT - comme l'a souligné jpc, pour ngspice (et probablement la plupart des autres variantes non commerciales / anciennes), les choses sont légèrement différentes, car vous ne pouvez tracer des courants qu'à travers une source de tension. Il faudrait donc ajouter une source 0V dans la jambe du circuit d'intérêt et tracer le courant à travers cela. J'ai ajouté un exemple ci-dessous.

Donc, si vous avez un circuit simple composé d'une résistance (R1) avec une source de tension (V1) à travers (je ne suis pas un expert de la netlist, prenez donc un exemple approximatif):

V1 1 0 5

R1 1 0 1000

(1, 0 sont les nœuds, 5 (V) et 1000 (Ohms) sont les valeurs respectives)

Vous pouvez soit tracer le courant avec I (R1), soit I (V1), pas I (1). Vous pouvez cependant tracer V (1) pour la tension.

Version NGSPICE (testée et confirmée)

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

Notez que Vdummy est en série avec la résistance, donc le même courant doit le traverser. Donc, pour tracer le courant pour R1, nous écrivons I (Vdummy). Pour un circuit plus complexe, nous nous assurons simplement que les mêmes conditions s'appliquent.

Voici un "vrai" exemple de LTspice:

NETLIST

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

IMAGE DU CIRCUIT

Circuit Ex

OPTIONS DE TERRAIN

(Notez qu'il n'y a pas de I (n001), I (n002), etc.)

Options de tracé

Oli Glaser
la source
1
Comme jpc vient de le commenter, il semble qu'avec ngspice vous ne pouvez tracer que des courants à travers des sources de tension. Je viens de télécharger ngspice et je l'ai confirmé, il est possible de mettre i (Vx), mais pas i (Rx), etc. Donc je suppose que vous devez ajouter une source 0V dans la jambe de votre circuit à travers laquelle vous souhaitez tracer le courant. (disons que ça s'appelle Vx) et mettez plot i (Vx).
Oli Glaser
@OliGlaser: En fait, la plupart des fourches SPICE commerciales sont basées sur la base de code SPICE2 (dans Fortran) tandis que ngspice (et d'autres versions open source / freeware) est basé sur la plus récente (!) Réécriture du langage C appelée SPICE3. Je crois que le jury est toujours sur lequel est le meilleur. :)
jpc
4

Vous pouvez tracer des courants, mais vous devez savoir quels courants vous souhaitez connaître avant d'exécuter votre simulation.

Par exemple, si vous aviez une diode D1 et que vous vouliez tracer le courant à travers elle, vous pourriez:

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

Vous trouverez plus d'informations à la page 519 (chapitre 31) du manuel ngspice à http://ngspice.sourceforge.net/docs/ngspice-manual.pdf

Nigel Williams
la source
3

En cas de balayage de tension continue sur un seul composant, vous pouvez tracer le courant de dérivation. En chargeant la netlist suivante

.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 et commandant

dc vin -10 5 0.001
plot -vin#branch

vous devriez pouvoir obtenir un diagramme de tracé du courant à travers la diode d1.

gmph
la source
2

pour le tracé de courant, ajoutez une source de tension nulle dans cette branche et saisissez vlabel # branch dans la borne.

Prashant
la source
3
Cela n'ajoute rien que les autres réponses n'ont pas déjà dit, et est trop concis pour être utile en soi.
Dave Tweed
2

Depuis NGSpice 27 R2017, en plaçant cette ligne de code:

.options savecurrents

Enregistre les courants, qui peuvent être appelés par pour @R1[i], @D1[id]etc.

plot @R1[i] vs v(1)

Recherchez cette option dans le manuel NGSpice .

Brethlosze
la source