¿Cómo trazar la corriente en ngspice?

Deseo trazar la corriente y el poder en ngspice. En el caso del voltaje, por ejemplo, si quisiera trazar el voltaje en el nodo 1, usaría:

plot v(1)

El problema es que cuando intento i(1), no se reconoce el vector. ¿Podría alguien proporcionar algunos ejemplos sobre cómo hacer esto?

Respuestas (6)

Oli dio una respuesta correcta pero I(element_name) es una extensión agregada solo a las versiones comerciales de SPICE.

En ngspice (que se basa en Berkeley Spice 3) solo puede trazar corrientes a través de fuentes de voltaje (independientes). Estas son las únicas corrientes que aparecen en las ecuaciones del circuito con las que trabaja SPICE.

En una sesión interactiva de Spice o desde un bloque especial en el script (vea también esta pregunta ), puede usar expresiones como (v(1)-v(2))/1kcuando la corriente pasa por una resistencia de 1kΩ entre los nodos 1 y 2. Para elementos reactivos (como un capacitor de 1μF) algo como (v(1) - v(2))/(2*pi*frequency*1u)debería Además trabajo.

Mi segunda solución (con expresiones) no debería ser muy difícil de aplicar. Puede ver en el manual si ngspice tiene alguna forma de obtener el valor y tal vez incluso los nombres de los nodos de un componente. Sé con seguridad que hay vectores ficticios con parámetros de modelo.

No he usado ngspice (uso LTSpice, pero por lo que entiendo, casi todas las SPICE se basan en la sintaxis original de Berkeley y funcionan de manera similar), pero generalmente traza la corriente a través de un componente o, por ejemplo, en la base de un transistor, en lugar que en un nodo, según la primera ley de Kirchoff (la suma de las corrientes que se encuentran en un punto es cero)

EDITAR: como señaló jpc, para ngspice (y probablemente la mayoría de las otras variantes no comerciales / tempranas) las cosas son ligeramente diferentes, ya que solo puede trazar corrientes a través de una fuente de voltaje. Entonces, uno tendría que agregar una fuente de 0V en el tramo del circuito de interés y trazar la corriente a través de esto. He añadido un ejemplo a continuación.

Entonces, si tiene un circuito simple que consiste en una resistencia (R1) con una fuente de voltaje (V1) a través de él (no soy un experto en la lista de conexiones, así que tome como ejemplo aproximado):

V1 1 0 5

R1 1 0 1000

(1, 0 son los nodos, 5 (V) y 1000 (Ohms) son los valores respectivos)

Puede trazar la corriente con I (R1) o I (V1), no I (1). Sin embargo, podría trazar V(1) para el voltaje.

Versión NGSPICE (probada y confirmada)

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

Tenga en cuenta que Vdummy está en serie con la resistencia, por lo que debe fluir la misma corriente a través de ella. Entonces, para trazar la corriente para R1, escribimos I (Vdummy). Para un circuito más complejo, solo nos aseguramos de que se apliquen las mismas condiciones.

Aquí hay un ejemplo "real" de LTspice:

LISTA DE RED

V1 V+ 0 24 Rser=0
V2 SIG 0 SENO(-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

IMAGEN DEL CIRCUITO

Ex circuito

OPCIONES DE PARCELA

(Tenga en cuenta que no hay I(n001), I(n002), etc.)

Opciones de trazado

Como jpc acaba de comentar, parece que con ngspice solo puede trazar corrientes a través de fuentes de voltaje. Acabo de descargar ngspice y confirmé esto, es posible poner i (Vx), pero no i (Rx), etc. Así que supongo que necesita agregar una fuente de 0 V en cualquier tramo de su circuito por el que desee trazar la corriente. (digamos que se llama Vx) y ponemos plot i(Vx).
@OliGlaser: En realidad, la mayoría de las bifurcaciones comerciales de SPICE se basan en el código base de SPICE2 (en Fortran), mientras que ngspice (y otras versiones de código abierto/freeware) se basan en la nueva (!) reescritura del lenguaje C que se llamó SPICE3. Creo que el jurado aún está deliberando sobre cuál es mejor. :)

Puede trazar corrientes, pero necesita saber qué corrientes desea conocer antes de ejecutar su simulación.

Por ejemplo, si tuviera un diodo D1 y quisiera trazar la corriente a través de él, podría:

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

Hay más información en la página 519 (Capítulo 31) del manual de ngspice en http://ngspice.sourceforge.net/docs/ngspice-manual.pdf

En el caso de barrer el voltaje de CC a través de un solo componente, puede trazar la corriente de rama. Cargando la siguiente netlist

.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

a ngspice y al mando

dc vin -10 5 0.001
plot -vin#branch

debería poder obtener un diagrama de trazado de la corriente a través del diodo d1.

Desde NGSpice 27 R2017, colocando esta línea de código:

.options savecurrents

Guarda las corrientes, que se pueden llamar para @R1[i], @D1[id], etc.

plot @R1[i] vs v(1)

Busque esta opción en el Manual de NGSpice .

para el trazado actual, agregue una fuente de voltaje cero en esa rama y escriba vlabel#branch en la terminal.

Esto no agrega nada que las otras respuestas no hayan dicho ya, y es demasiado breve para ser útil por sí solo.