Come tracciare la corrente in ngspice?


11

Vorrei tracciare la corrente e il potere in ngspice. Nel caso della tensione, ad esempio, se volessi tracciare la tensione sul nodo 1, utilizzerei:

plot v(1)

Il problema è che quando provo i (1), il vettore non viene riconosciuto. Qualcuno potrebbe fornire alcuni esempi su come farlo?


Risposte:


8

Oli ha dato una risposta corretta ma I (element_name) è un'estensione aggiunta solo alle versioni SPICE commerciali.

In ngspice (che si basa su Berkeley Spice 3) puoi tracciare le correnti solo attraverso fonti di tensione (indipendenti). Queste sono le uniche correnti che compaiono nelle equazioni del circuito da cui funziona SPICE.

In una sessione Spice interattiva o da un blocco speciale nello script (vedi anche questa domanda ) puoi usare espressioni come (v(1)-v(2))/1kquando la corrente è attraverso un resistore da 1kΩ tra i nodi 1 e 2. Per gli elementi reattivi (come un condensatore da 1μF) qualcosa come (v(1) - v(2))/(2*pi*frequency*1u)dovrebbe funziona anche.


La mia seconda soluzione (con espressioni) non dovrebbe essere molto difficile da applicare. Nel manuale potresti vedere se ngspice ha un modo per ottenere il valore e forse anche i nomi dei nodi di un componente. So per certo che ci sono vettori fittizi con parametri del modello.
jpc,

6

Non ho usato ngspice (io uso LTSpice, ma da quello che capisco praticamente tutti gli SPICE si basano sulla sintassi originale di Berkeley e funzionano in modo simile), ma di solito si traccia la corrente attraverso un componente o nella base di un transistor, ad esempio che in un nodo, secondo la prima legge di Kirchoff (la somma delle correnti che si incontrano in un punto è zero)

EDIT - come sottolineato da jpc, per ngspice (e probabilmente la maggior parte delle altre varianti non commerciali / prime) le cose sono leggermente diverse, poiché puoi tracciare le correnti solo attraverso una sorgente di tensione. Quindi si dovrebbe aggiungere una sorgente 0V nella parte del circuito di interesse e tracciare la corrente attraverso questo. Ho aggiunto un esempio di seguito.

Quindi se hai un semplice circuito costituito da un resistore (R1) con una sorgente di tensione (V1) attraverso di esso (non sono un esperto della netlist, quindi prendi un esempio approssimativo):

V1 1 0 5

R1 1 0 1000

(1, 0 sono i nodi, 5 (V) e 1000 (Ohm) sono i rispettivi valori)

Puoi tracciare la corrente con I (R1) o I (V1), non I (1). È possibile tuttavia tracciare V (1) per la tensione.

Versione NGSPICE (testata e confermata)

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

Si noti che Vdummy è in serie con il resistore, quindi la stessa corrente deve fluire attraverso di esso. Quindi per tracciare la corrente per R1 scriviamo I (Vdummy). Per un circuito più complesso ci assicuriamo solo che si applichino le stesse condizioni.

Ecco un esempio "reale" di 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

FOTO DEL CIRCUITO

Circuito Ex

OPZIONI DI TRAMA

(Notare che non c'è I (n001), I (n002), ecc.)

Opzioni di stampa


1
Come ha appena commentato jpc, sembra che con ngspice sia possibile tracciare solo correnti attraverso fonti di tensione. Ho appena scaricato ngspice e confermato questo, è possibile inserire i (Vx), ma non i (Rx), ecc. Quindi suppongo che sia necessario aggiungere una sorgente 0V in qualsiasi parte del circuito che si desidera tracciare la corrente attraverso (diciamo che si chiama Vx) e metti la trama i (Vx).
Oli Glaser,

@OliGlaser: In realtà la maggior parte delle forcelle SPICE commerciali sono basate sulla base di codice SPICE2 (in Fortran) mentre ngspice (e altre versioni open source / freeware) si basano sulla più recente (!) Riscrittura del linguaggio C che si chiamava SPICE3. Credo che la giuria sia ancora fuori su quale sia meglio. :)
jpc,

4

È possibile tracciare le correnti, ma è necessario sapere quali correnti si desidera conoscere prima di eseguire la simulazione.

ad esempio, se avessi un diodo D1 e volessi tracciare la corrente attraverso di esso, potresti:

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

Maggiori informazioni sono a pagina 519 (capitolo 31) del manuale di ngspice all'indirizzo http://ngspice.sourceforge.net/docs/ngspice-manual.pdf


3

In caso di scambio di tensione CC su un singolo componente, è possibile tracciare la corrente di ramo. Caricando la seguente 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 e al comando

dc vin -10 5 0.001
plot -vin#branch

dovresti essere in grado di ottenere un diagramma di trama della corrente attraverso il diodo d1.


2

per la stampa corrente aggiungere la sorgente di tensione zero in quel ramo e digitare il ramo vlabel # nel terminale.


3
Ciò non aggiunge nulla che le altre risposte non abbiano già detto ed è troppo conciso per essere utile da solo.
Dave Tweed

2

Da NGSpice 27 R2017, inserendo questa riga di codice:

.options savecurrents

Salva le correnti, che possono essere chiamate tramite per @R1[i], @D1[id]ecc

plot @R1[i] vs v(1)

Cerca questa opzione nel Manuale di NGSpice .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.