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