Introduzione al simulatore circuitale SPICE Andrea Cappelli Andrea Cappelli Bologna, 27 Gennaio Bologna, 27 Gennaio 2005 2005 Corso di Circuiti Elettronici Analogici L- A
Introduzione al simulatore circuitale SPICE
Andrea CappelliAndrea Cappelli
Bologna, 27 Gennaio Bologna, 27 Gennaio 20052005
Corso di Circuiti Elettronici Analogici L-A
Il Simulatore SPICE
Simulation Program with Integrated Circuit Emphasis Sviluppato a Berkeley negli anni 60
.lib
.cirParser
& Solver
.out
.dat
Text Editor
Schematic Editor
.sch
Text Editor
Graphic Interface
Struttura della Netlist
* Titolo della netlist..<caricamento librerie e definizione modelli>..<istanziamento componenti>..<comandi di simulazione>..<istruzioni di post-simulazione>
Regole sintattiche
La prima riga del file .cir è riservata al titolo e non viene interpretata
SPICE è case insensitive Per continuare a capo una linea
comando basta cominciare la seconda riga con “+”
Il carattere “*” commenta un’intera linea Il carattere “;” commenta la restante parte
della linea
La Netlist
E’ un elenco di dispositivi opportunamente connessi
Ad ogni nodo è associato un identificativo (“0” è riservato per il nodo di massa)
Ogni dispositivo è caratterizzato da:• Nome
• Connettività (nodi a cui è connesso)
• Modello di riferimento
• Elenco dei parametri (es. il valore della resistenza)
Componenti Lineari Passivi
R<Nome> <n+> <n-> [Modello] <Valore> C<Nome> <n+> <n-> [Model] <Valore> [IC=<V0>] L<Nome> <n+> <n-> [Model] <Valore> [IC=<I0>]
La prima lettera del nome identifica il tipo di componente
n+ ed n- sono i nodi a cui i componenti sono collegati
Il modello è opzionale, in caso di omissione si considerano componenti ideali
Il campo IC permette di specificare il valore iniziale di tensione (condensatori) o corrente (induttori) per le analisi in transitorio.
Resistori
Modello: se assente viene considerato un resistore ideale (lineare senza effetti reattivi: V=RI)
Valore: specifica il valore della resistenza
R<Nome> <n+> <n-> [Modello] <Valore>
n+n+
n-n-
VVII
Condensatori
IC: Permette di specificare lo stato iniziale (tensione) del condensatore.
Se il modello non è specificato si assume il condensatore come ideale:
C<Nome> <n+> <n-> [Model] <Valore> [IC = <VC<Nome> <n+> <n-> [Model] <Valore> [IC = <V00>]>]
dt
dVCI
n+n+
n-n-
VV
II
Induttori
IC: Permette di specificare lo stato iniziale (corrente) dell’ induttore.
Se il modello non è specificato si assume l’induttore come ideale:
dt
dILV
L<Nome> <n+> <n-> [Model] <Valore> [IC = <IL<Nome> <n+> <n-> [Model] <Valore> [IC = <I00>]>]
n+n+
n-n-
VVII
dt
dILV
Generatori Indipendenti (I)
V<Nome> <n+> <n-> DC <Valore>
+ [AC [<ampiezza>[fase]]]
+ [Stimolo Transitorio]
I<Nome> <n+> <n-> DC <Valore>
+ [AC [<ampiezza>[fase]]]
+ [Stimolo Transitorio]
n+n+
n-n-
VV II
Generatori Indipendenti (II)
Il campo AC identifica il generatore come input per analisi AC
Lo stimolo transitorio specifica la forma d’onda relativa a questo generatore, per le analisi in transitorio
Esempio: analisi DC
*Primo Esempio:*Un partitore resistivoVIN 1 0 DC 6*Resistenza tra 1 e 2:R1 1 2 100Resistenza tra 2 e massa:R2 2 0 50*Analisi DC del circuito.OP.END
R1
R2VIN
1 2
Stimoli Transitori (I)
Si usa lo stimolo PULSE per generare forme d’onda periodiche:
PULSE (<V1> <V2> <Td> <Tr> <Tf> <PW> <PER>)
V2V2
V1V1
TTdd TTrrPWPW TTff
PERPER
Stimoli Transitori (II)
SIN (<Voffset> <Vamp> <FREQ> <Td> <DF> <FASE>)
V=Voffset+Vamp*sin{2π*[freq*(t–Td)+FASE/360])*exp[-(t-Td)/DF]
Stimoli Transitori (III)Per generare una forma d’onda arbitraria si usa lo stimolo PULSE:
PWL (t0,V0) (t1,V1) (t2,V2) … (tn,Vn)
• Ad ogni coppia corrisponde un punto
• I punti vengono interpolati tramite rette
• L’ultimo valore di tensione viene mantenuto fino alla fine della simulazione
VV11
VV22
VVnn
VV00
tt00 tt11 tt22 ttnn
Comandi di simulazione: .OP
Valuta il Punto di Riposo piu’ vicino allo stato iniziale del circuito
Non vengono prodotte forme d’onda ma sul file .OUT di uscita del simulatore vengono riportati tutti i valori di tensioni e correnti nel punto di riposo
Trova soltanto un punto di riposo La ricerca e’ di tipo iterativo e non e’ detto che il punto di riposo
venga trovato.
Comandi di simulazione: .AC
Tipo: indica il tipo di sweep• Lineare (LIN),Logaritmico per ottave(OCT), Logaritmico per decadi(DEC)• Noi useremo esclusivamente sweep per decadi
Efettua L’analisi ai piccoli segnali linearizzando il circuito attorno al punto di riposo piu’ vicino (effettua una analisi di .op preliminare)
Gli ingressi sono considerati tutti i generatori indipendenti con l’indicazione AC
Risolve il sistema calcolando le grandezze complesse (parte immaginaria e reale)
Non effettua analisi sul comportamento globale (ai grandi segnali) del circuito
.AC <tipo> <n punti> <f iniziale> <f finale>.AC <tipo> <n punti> <f iniziale> <f finale>
Comandi di simulazione: .DC
Permette di ricavare la caratteristica statica ingresso/uscita del circuito
Calcola i punti di riposo al variare del valore di un generatore, di tensione o di corrente, esplicitato da <nome var>
.DC <tipo> <nome var> <valore iniziale> <valore finale>+.DC <tipo> <nome var> <valore iniziale> <valore finale>+<valore incremento> <valore incremento>
Comandi di simulazione: .TRAN
Permette di Valutare il comportamento del circuito nel dominio dei tempi.
La simulazione parte sempre da t = 0 Specificare <T start> fa si che vengano salvati soltanto I valori
da t = Tstart in poi, riducendo le dimensioni dei file di uscita <T max> e’ il massimo valore dello step temporale usato per la
simulazione, e quindi per la risoluzione dell equazioni differenziali
Il comando .IC puo’ essere usato per specificare la condizione iniziale del circuito:
.IC <V(<n_nodo>[,<n_nodo>]) = val>|<I(ramo) = val>
.TRAN <T step> <T stop> [<T start> [<T max>]].TRAN <T step> <T stop> [<T start> [<T max>]]
Altri comandi: .MODEL
.MODEL si usa per settare un set di parametri da utilizzare per dispositivi complessi (Diodi, Transistori…)
Model Name si usa per fare riferimento ad uno specifico modello
Type specifica il tipo di modello da usare I parametri variano da modello a modello
.MODEL <Model Name> <Type> (<Valori dei parametri>).MODEL <Model Name> <Type> (<Valori dei parametri>)
Altri comandi: .SUBCKT
Permette di definire sottocircuiti riutilizzabili più volte come i componenti predefiniti
I nodi esplicitati nell’intestazione e all’interno del corpo hanno carattere locale (tranne 0)
Ogni nome ha carattere locale I sottocircuiti possono essere istanziati come componenti
generici:X<Nome Ist.> <Nodes> <Nome Sub.> [<Valore Parametri>]
.SUBCKT <Nome> <Nodes> [PARAMS: <Parametro = Default Value>>]….ENDS
Sottocircuito: Amplificatore Operazionale
.SUBCKT OPAMP INP INN OUT PARAMS: VUMP=10 VUMN=-10 + AD=400K
E1 OUT 0 VALUE={MAX(MIN(AD*V(INP,INN),VUMP),VUMN)}.ENDS
VP-VN
VOUT
…XAMP 1 0 2 OPAMP PARAMS: AD=200K…
Altri comandi: .PROBE
Permette di salvare il valore di correnti e tensioni del circuito Senza argomenti salva tutto Nel caso di simulazioni di circuiti complessi specificando
esclusivamente i valori di tensione e di corrente voluti si puo’ ridurre l’ammontare dei dati da salvare, velocizzando la simulazione e riducendo le dimensioni dei file di uscita
.PROBE [<<var>.>]
Comandi Vari
.TEMP <valore>• Permette di settare il valore della temperatura di simulazione
.OPTION [<nome opzione>][<n_opzione><valore>]• Permette di settare tutta una serie di opzioni che possono andare da le caratteristiche di
simulazione a quelle di output
.PARAM [<nome opzione>][<n_opzione><valore>]• Permette di definire dei parametri a dare loro un valore• I parametri possono essere utilizzati all’interno delle varie parti componenti la netlist
.STEP LIN <nome_variable> <start> <end> <increment>• Permette analisi parametriche variando opportunamente un parametro del circuito
Secondo Esempio: circuito RCAnalisi del transitorio di carica
*Carica RC
V1 1 0 PULSE 0 5R1 1 VOUT 6kC1 VOUT 0 10n
.TRAN 5n 400u
.PROBE
.END
R1
C1
VIN
VOUT1
Calcolare il tempo di salita all’80% e verificare il risultato ottenuto tramite il simulatore
Terzo Esempio: circuito RCAnalisi in frequenza
*Carica RC
V1 1 0 PULSE 0 5R1 1 VOUT 6kC1 VOUT 0 10n
.AC DEC 1000 1hz 10MEG
.PROBE
.END
R1
C1
VIN
VOUT1
Calcolare la frequenza di taglio e verificare il risultato ottenuto tramite il simulatore