Contenuti del corso
Parte I: Introduzione e concetti fondamentali
richiami di teoria dei circuiti
la simulazione circuitale con SPICE
elementi di Elettronica dello stato solido
Parte II: Dispositivi Elettronici
il diodo a giunzione
transistori ad effetto di campo (FETs)
il transistore bipolare (BJT)
Parte III: Circuiti amplificatori a transistori discreti
amplificatori a BJT e FETs
La simulazione circuitale
Strumento per prevedere la risposta nel dominio del tempo e/o della
frequenza di un circuito elettronico soggetto ad uno stimolo di ingresso
attraverso l’uso del calcolatore.
La simulazione circuitale
Input della simulazione:
descrizione del circuito (componenti e connessioni)
descrizione analitica delle relazione I-V dei compontenti (modelli)
descrizione tipo di analisi (in continua, in frequenza, ecc...)
L’insieme di queste componenti definisce un set di equazioni da risolvere ed
il problema diventa essenzialmente di calcolo numerico.
Il simulatore non introduce conoscenza. L’accuratezza dei risultati dipende
dalla bontà della modellizzazione dei componenti che costituiscono il
circuito, nonchè dai metodi numerici implementati per la risoluzione del
problema.
Perchè effettuare una simulazione?
al crescere delle dimensioni del circuito diventa molto difficile e spesso
impossibile risolvere il circuito analiticamente (carta e penna).
permette di prevedere la risposta del cirtuito senza montarlo in laboratorio
con conseguenze riduzione di costi e tempo di progettazione.
permette di riprodurre situazioni difficilmente realizzabili in laboratorio
(effetti parassiti, temperatura diversa da quella ambiente, ecc...)
permette di effettuare analisi parametriche e statistiche per prevedere la
robustezza del comportamento di un circuito.
Queste problematiche sono state enfatizzate con l’avvento dei circuiti
integrati che, insieme con la diffusione di sempre più potenti sistemi di
calcolo, hanno portato alla nascita della simulazione circuitale.
Storia di SPICE
SPICE (Simulation Program with Integrated Circuit Emphasis) è il simulatore
circuitale ad oggi più diffuso e deriva da un programma sviluppato da un gruppo
di studenti per un corso di simulazione circuitale all’Università di Berkeley
(California) tra il 1969 e il 1970
il nome originale del programma era CANCER (Computer Analysis of Nonlinear
Circuits Excluding Radiation) e poteva effettuare analisi in continua, transitorio,
frequenza sui circuiti contenenti resistori, condensatori, induttori, diodi e bjt
viste le notevoli potenzialità dimostrate, CANCER diventa nel 1971 la prima
versione di SPICE (SPICE1) che includeva anche JFET e MOSFET. Grazie
anche al fatto che SPICE venne distribuito gratuitamente da Berkeley, divenne
subito uno standard
Nel corso degli anni sono state rilasciate diverse versioni del programma (nel’75
SPICE2, nell’ ‘83 SPICE3) caratterizzate dall’utilizzo di metodi numerici sempre
più efficienti, da un linguaggio più potente, da modelli più sofisticati dei
dispositivi e librerie più complete.
Storia di SPICE
Oggi tutti i principali fornitori di software CAD offrono una versione arricchita o
supportata di SPICE:
•
•
•
•
HSPICE (Meta-Software, adesso acquistato dalla Synopsys)
PSPICE (Microsim, adesso acquistato da Cadence)
IGSPICE
Microwave SPICE
PSPICE è disponibile in numerose versioni per i diversi sistemi operativi (DOS,
Windows, Unix, etc.).
Faremo riferimento alla versione ORCAD PSPICE Demo varsion 9.1 che
ha i seguenti limiti di utilizzo:
64 nodi, 10 transistors, 65 dispositivi digitali, 10 linee di tramsissione
Struttura del simulatore SPICE
Text Editor
.sch
Schematic
Editor
.cir
.out
Text Editor
.dat
Graphic
Interface
Parser
&
Solver
.lib
Le informazioni di input del simulatore, contenute all’interno
di un file *.cir, devono essere
descrizione topologica del circuito (schematico o netlist)
tipo di simulazione da effettuare (DC, AC, transitorio, ecc..)
comandi di output
Descrizione del circuito: lo schematico
Descrizione del circuito: la netlist
Titolo del circuito
.
*commento
.
<caricamento librerie e definizione
modelli>
.
*commento
.
<istanziamento componenti>
<comandi di simulazione>
<comandi output>
.
.END
la prima riga del file .cir è
riservata al titolo e non viene
interpretata
Il carattere “*”
un’intera linea
commenta
SPICE è case insensitive
l’ordine
dei
irrilevante
comandi
è
Per continuare a capo una linea
comando basta cominciare la
seconda riga con “+”
Il carattere “;” commenta la
restante parte della linea
Classi di analisi di simulazione
Analisi standard:
Punto di lavoro (.OP)
Funzione di trasferimento (.TF)
Analisi in continua (.DC)
Analisi in transitorio (.TRAN)
Analisi in frequenza (.AC )
Analisi di Fourier (.FOUR)
Analisi di rumore (.NOISE)
Analisi multi-run:
Analisi parametriche (.STEP)
Analisi in temperatura (.TEMP)
Analisi statistiche:
Monte Carlo (.MC)
Sensibilità e caso peggiore (.WCASE)
Elementi circuitali implementati
Componenti Analogici
•
•
•
•
•
•
•
•
Resistenze (ideali e a semiconduttore)
Condensatori (ideali e a semiconduttore)
Induttori (singoli e mutui)
Interuttori controllati in tensione o corrente
Generatori di tensione/corrente indipendenti/dipendenti
Linee di trasmissione
Diodi
Transistori (BJT, JFET, MOSFET)
Componenti Digitali (porte logiche, MUX, A/D, D/A,
Memorie,...)
Componenti di libreria (circuti integrati)
Istanziamento componenti
ogni componente definisce un ramo; un
nodo è il punto di incontro di almeno 2 rami
ogni elemento della rete è connesso tra 2 o
più nodi numerati (es. R1 tra 1 e 2)
il nodo 0 (necessario) è assunto come
riferimento per il potenziale degli altri nodi
(massa) ed è posto a 0V
i nomi dei componenti possono essere lunghi fino ad 8 caratteri, ma devono
iniziare con una lettere riconosciuta da SPICE che identifica il tipo di componente
il circuito si descrive, attraverso la netlist, elencando in modo non necessariamente
ordinato i componenti del circuito. Es:
R1 1 2 100
indica un resistore (si capisce dalla R) connesso tra i nodi 1 e 2 di valore 100 ohm
IS 1 0 DC 0.1
indica un generatore di corrente (si capisce dalla I) in DC di valore 0.1A
Componenti passivi ideali
Sintassi:
R<name> <n+> <n-> <value>
C<Nome> <n+> <n-> <value> [IC=<V0>]
L<Nome> <n+> <n-> <value> [IC=<I0>]
Il campo IC permette di specificare il valore iniziale di tensione
(condensatori) o corrente (induttori) per le analisi in transitorio.
Esempi:
Rload 2 10 10k
C1 13 0 1uF IC=10V
L3 3 4 1mH IC=0.7mA
Parametri
Sintassi:
.PARAM <name> <var> | <expression>
assegna un valore ad un parametro direttamente o attraverso una
espressione
Esempio:
.PARAM R1=1M
.PARAM R2= {10*R1 }
.
Modelli di componenti
la maggior parte dei componenti più semplici richiede un numero semplice
e limitato di equazioni matematiche e di parametri (es. in un resistore il
modello matematico è I=V/R e l’unico parametro è R)
componenti più complessi (diodi e transistors) sono caratterizzati da
equazioni più complicate e richiedono molti parametri fisico-tecnologici da
specificare
i modelli racchiudono un set di equazioni e di parametri fisico-tecnologici
per uno specifico componente
i parametri dei modelli hanno dei valori di default, vanno specificati solo
quelli che si vogliono cambiare
esistono una moltitudine di modelli di componenti commerciali racchiusi
in librerie di modelli
Sintassi:
.MODEL <MNAME> <MTYPE> [PARAM1=PVAL1]
[PARAM2=PVAL2] .....
Generatori indipendenti di tensione e corrente
Generatore di corrente indipendente:
I<name> <(+) node> <(-) node>
+ [ [DC] <value> ]
+ [ AC <magnitude value> [phase value] ]
+ [STIMULUS=<stimulus name>]
+ [transient specification]
Esempio: generatore di corrente
costante
Ipippo
3
0
DC
2.3mA
La corrente fluisce dal nodo + al nodo –
Generatore di tensione indipendente:
V<name> <(+) node> <(-) node>
+ [ [DC] <value> ]
+ [ AC <magnitude value> [phase value] ]
+ [STIMULUS=<stimulus name>]
+ [transient specification]
Esempio: generatore di tensione
per analisi in AC
(componente
DC
nulla,
componente variabile ampiezze
1mV e fase nulla)
V3 2 3 AC .001
Stimoli Transitori: PULSE
Si usa lo stimolo PULSE per generare forme d’onda pulsate periodiche:
PULSE (<V1> <V2> <Td> <Tr> <Tf> <PW> <PER>)
Td
Tr
PW
Tf
PER
V2
V1
Esempio:
ISW 10 5 PULSE(1A 5A 1sec .1sec .4sec .5sec 2sec)
Stimoli Transitori: SIN
SIN (<Voffset> <Vamp> <FREQ> <Td> <DF> <FASE>)
V=Voffset+Vamp*sin{2π*[freq*(t–Td)+FASE/360])*exp[-(t-Td)/DF]
Esempio:
I3 26 77 DC .002 AC 1 SIN(.002 .002 1.5MEG)
Stimoli Transitori: PWL
Per generare una forma d’onda arbitraria si usa lo stimolo PWL
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
V1
V2
V0
Vn
t0
t1
t2
tn
Generatori lineari dipendenti
Generatore di tensione controllato in tensione (v = e v):
E<name> <n+> <n-> <nc+> <nc-> <gain>
Esempio:
V(3,0)=10*V(5,6)
E1 3 0 5 6 10
Generatore di corrente controllato in tensione (i = g v):
G<name> <n+> <n-> <nc+> <nc-> <gain>
Esempio:
I(3,0)=10*V(5,6)
G1 3 0 5 6 10
5
3
G1=10I5,6
6
0
Generatori lineari dipendenti
Generatore di tensione controllato in corrente (v= h i):
H<name> <n+> <n-> <control device> <gain>
Esempio:
V(3,0)=10*I(5,6)
H1 3 0 V1 10
V1 5 6 DC 0
Generatore di corrente controllato in corrente (i = f i):
F<name> <n+> <n-> <control device> <gain>
Esempio:
F1 3 0 V1 10
V1 5 6 DC 0
I(3,0)=10*I(5,6)
Generatori non-lineari dipendenti
Sorgente polinomiale a una dimensione
Vout=P0+P1V1+P2V12+P3V13+....
E<name> <n+> <n-> POLY(1) (<nc+> <nc->) [<P0> <P1> <P2> ....]
Esempio: V(2)=V(1)^2
Emult 2 0 POLY(1) (1, 0) (0,0,1)
Sorgente polinomiale a due dimensioni
Vout=P0+P1V1+P2V2+P3V12+P4V1V2+P5V22....
E<name> <n+> <n-> POLY(2) (<nc+1> <nc-1>) (<nc+1> <nc-1>) [<P0>
<P1> <P2> ....]
Esempio: V(3)=V(1)*V(2)
Emult 3 0 POLY(2) (1, 0) (2,0) (0,0,0,0,1)
anche per altri generatori dipendenti (G,F,H)
Comandi di simulazione: punto di lavoro
Sintassi:
.OP
valuta il punto di riposo piu’ vicino allo stato iniziale del
circuito
non vengono prodotte forme d’onda
sul file .OUT di uscita vengono riportati tutti i valori di
tensioni e correnti e potenza dissipata nel punto di riposo
Comandi di simulazione: analisi in continua
Sintassi:
.DC [<sweep type>] <sweep variable>
+<start val> <end val > <step val> [nested sweep]
Sweep Lineare
.DC LIN I2 5mA 12mA 0.1mA
.DC VIN -.25 .25 .05
.DC VCE 0V 10V .5V IB 0mA 1mA 50uA
.DC RES RMOD(R) 0.9 1.1 .001
Sweep Logaritmico
.DC DEC NPN QFAST(IS) 1E-18 1E-14 5
List Sweep
.DC TEMP LIST 0 20 27 50 80 100
Comandi simulazione: analisi in transitorio
Sintassi: .TRAN <T step> <T stop> [<T start> [<T max>]]
la simulazione parte sempre da t = 0
<T stop> specifica la durata della simulazione
<T start> (opzionale) 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>) = val>
.IC <I(ramo) = val>
Comandi di simulazione: analisi in AC
Sintassi:
.AC <sweep type> <points value> <start frequency>
+<end frequency >
Esempi
.AC LIN 101 100Hz 200kHz
.AC OCT 10 1kHz 16kHz
.AC DEC 20 1MEG 100MEG
Comandi di simulazione: analisi di Fourier
Sintassi:
.FOUR <fundamental freq.> <var1> <var2> ….
in presenza di uno stimolo transitorio in ingresso, permette di calcolare le
prime 9 armoniche, a partire dalla fondamentale, delle variabili di output
produce l’output (modulo e fase delle armoniche) senza specificare altre
istruzioni (.PRINT, .PLOT, .PROBE)
è possibile produrre anche un output grafico con .PROBE
Esempio
.FOUR 125kHz V(1), V(4)
Comandi di simulazione : funzione di trasferimento
Sintassi:
.TF <output var> <input source name>
calcola il rapporto in DC tra l’output e l’input specificati
non vengono prodotte forme d’onda
sul file .OUT di uscita viene scritto il valore del rapporto
out/in, nonchè le resistenze di ingresso e di uscita
Comandi di simulazione: analisi parametrica
.STEP <sweep type> <sweep variable name> <start value>
+ <end value> <increment value>
permette all’utente di variare a passi, durante l’analisi, il valore di una sorgente di
un componente o di una temperatura (anche con .TEMP). Il passo può essere
logaritmico o lineare
Esempi:
.STEP VCE 0V 10V .5V
.STEP LIN I2 5mA -2mA 0.1mA
.STEP RES RMOD(R) 0.9 1.1 .001
.STEP DEC NPN QFAST(IS) 1E-18 1E-14 5
.STEP TEMP LIST 0 20 27 50 80 100
.STEP PARAM CenterFreq 9.5kHz 10.5kHz 50Hz
Comandi di output
Sintassi: .PRINT <analysis type> [<var1> <var2> …..]
permette di salvare il valore di correnti e tensioni del
circuito, sotto forma di tabelle, in un file *.out
Ogni variabile di uscita diventa una colonna della tabella
Esempio:
.PRINT DC V(3) V(2,3) V(R1)
Sintassi: .PROBE [<var1> <var2> …..]
output grafico (file *.dat)
senza argomenti salva tutto
Esempio: .PROBE V(3) V(2,3) V(R1) I(VIN) I(R2)
Risoluzione numerica in DC-Circuiti lineari
Si applica il metodo dei potenziali ai nodi:
per ogni nodo, eccetto lo 0, si scrive la
legge delle correnti di Kirchoff ponendo
a sinistra i termini incogniti e a destra i
termini noti
= IS
I12
I12 − I 20 − I 23
=0
G1V12 − G2V2 − G3V23
I 23 − I 30 = 0
si sostituisce ad ogni corrente incognita
Iij la relazione I-V del ramo connesso tra i
nodi i e j
= IS
G1V12
=0
G3V23 − G4V3 = 0
Gi =1/Ri
Vij = Vi - Vj
Risoluzione numerica in DC-Circuiti lineari
= IS
G1V12
G1V12 − G2V2 − G3V23
=0
G3V23 − G4V3 = 0
può essere scritta in forma matriciale: Y·V=I
G1
G
 1
 0
− G1
− G1 − G2 − G3
G3
matrice delle ammettenze Y
 V1   I S 
 • V  =  0 
  2  
− G3 + G4  V3   0 
0
G3
matrice delle
incognite V
matrice dei
termini noti I
Risoluzione numerica in DC-Circuiti lineari
la risoluzione del circuito diventa un problema di inversione di matrice: V = Y-1 · I
note i potenziali Vk è possibile determinare tutte le correnti incognite attraverso le
relazione di ramo (nell’esempio le correnti nei resistori sono Iij=GijVij)
la presenza di generatori di tensione indipendenti riduce il numero di incognite
facendo diminuire la dimensione della matrice Y. Ad esempio:
L’equazione di kirchoff al nodo 2 non è più
necessaria perchè il potenziale V2 è noto
(V2=VS) ed il problema da risolvere diventa
G1
0

 V1   I S + G1VS 
•  = 

− G3 − G4  V3   − G3VS 
0
Risoluzione numerica in DC-Circuiti non lineari
Sono circuiti che includono componenti non lineari come diodi e
transistori.
esempio:
2
 qV

kT

I 2 (V2 ) = I SAT  e − 1


La relazione I2(V2) è
altamente non lineare
-GV2 -I2(V2) = -GVS
G=1/R
• non può essere scritta in forma matriciale!
•si risolve in modo iterativo
Risoluzione numerica in DC-Circuiti non lineari
La relazione I2(V2) deve essere linearizzata intorno ad un punto di riposo iniziale (I20,
V20) sviluppando al primo ordine I2(V2) in un intorno di (I20, V20):
∂I 2
I 2 (V2 ) ≈ I 2 (V ) +
∂V2
(V
0
2
Geq = 1 / Req =
∂I 2
∂V2
)
0
−
V
2
2 = I eq + GeqV2
V20
I eq = I 2 (0) = I 2 (V20 ) − GeqV20
V20
Il diodo può essere sostituito col circuito equivalente lineare:
quale punto
iniziale?
di
lavoro
Risoluzione numerica in DC-Circuiti non lineari
Metodo di Newton-Raphson
Setta punto di lavoro
iniziale: (I20, V20), n=0
di fondamentale importanza è la
scelta del punto di lavoro iniziale
può essere impostato attreverso il
comando NODESET
Incrementa indice
iterazione n=n+1
Calcola Ieq, Req
Esempio:
.NODESET V(2)=3.4 I(R1)=3u
Risolve rete e nuovo punto di
lavoro (I2n, V2n)
NO
|V2n-V2n-1|<
SI
FINE
Risoluzione numerica in AC
Nell’analisi in AC le sorgenti di segnale di ingresso sono costituite da una componente
variabile sinusoidale a frequenza f sovrapposta ad una componente continua:
iS (t ) = I S + is (t ) = I S + I S max sin( 2πft + φ s 0 )
La risoluzione in AC prevede una serie di step
determinazione del punto di lavoro (funzione solo delle componenti continue delle
sorgenti). I componenti non lineari (diodi, transistors) sono sostituiti col modello
equivalente di piccolo segnale calcolato al punto di lavoro ottenuto.
I condensatori sono sostituiti con ammettenze di valore j2pfC e gli induttori con
ammettenze di valore –j/2pfL. La matrice delle ammettenze ricavate avrà elementi
complessi
Per ogni valore di frequenza compreso nell’intervallo di simulazione prefissato
Y·V=I viene risolta ottenendo tutte le tensioni e correnti che risultano essere dei
numeri complessi (rappresentabili in modulo e fase)
Risoluzione numerica in transitorio
Il vettore dei termini noti I è funzione del tempo
Il punto di lavoro viene calcolato al tempo iniziale 0. In questo modo le condizioni
iniziali per gli elementi reattivi sono determinate (tensioni ai capi dei condensatori e
correnti attraverso gli induttori, le correnti ai capi dei condensatori e le tensioni ai capi
degli induttori sono nulli al tempo 0).
La simulazione avanza secondo time steps ∆T (impostabile dall’utente) costanti fino al
tempo totale di simulazione T (impostabile dall’utente):
0, ∆T, 2 ∆T, ...., T
La soluzione al tempo i ∆T viene calcolata usando la soluzione al tempo (i-1) ∆T come
condizione iniziale
Ad ogni time step condensatori e induttori sono sostituiti con un modello lineare
equivalente (Ieq, Geq) i cui parametri sono funzione della soluzione al time step
precedente.
Esempio: analisi del punto di lavoro
Determinare:
punto di lavoro
funzione di trasferimento
Primo Esempio:
*Un partitore resistivo
VIN 1 0 DC 6
*Resistenza tra 1 e 2:
R1 1 2 100
*Resistenza tra 2 e massa:
R2 2 0 100
*Analisi DC del circuito
.OP
.TF V(2) VIN
.END
Esempio: analisi in transitorio
Determinare la risposta
transitorio
al
gradino
ampiezza 5V (trise=0)
*Carica RC
V1 1 0 PULSE 0 5
R1 1 VOUT 6k
C1 VOUT 0 10n
.TRAN 5n 400u
.PROBE
.END
in
di
Esempio: analisi in frequenza
Determinare la risposta in
frequenza nella banda 1Khz100Mhz
Risposta in frequenza di un
**circuito RC
V1 1 0 AC 1
R1 1 2 100
C1 2 0 1n
.AC DEC 100 1e3 1e8
.PROBE
.END