Come funzionano effettivamente i simulatori di circuiti?


31

Di recente ho avuto l'opportunità di giocare con LiveWire , che è un simulatore di circuito e ho iniziato a chiedermi come esattamente calcolassero le tensioni su ciascun componente e la corrente che attraversava ogni traccia di filo.

Finora mi hanno insegnato solo le competenze di base sull'analisi dei circuiti (come l'analisi delle mesh e l'analisi dei nodi), e non sono del tutto sicuro che sarebbero abbastanza generici da implementare in un modo "tutto sommato" all'interno di un simulatore di circuiti.

Come programmatore questo mi ha incuriosito e mi piacerebbe vedere quali tecniche sono comunemente utilizzate nella costruzione di simulatori di circuiti come questo.

Mi scuso se questo non appartiene qui, è stata una scelta tra qui e StackOverflow e ho sentito che sebbene si tratti di una domanda orientata allo sviluppo del software, la domanda è più applicabile a questo sito e alla sua base utenti.


Il trucco principale è un sacco di piccoli intervalli di tempo. Le funzioni complesse del tempo vengono quindi gestite espellendo molte equazioni di differenza con intervalli di tempo piccoli. La cattiva complessità viene generalmente ridotta in modo significativo se può essere espressa come equazioni differenziali, che diventano equazioni di differenza in una simulazione digitale.
Olin Lathrop,

Risposte:


14

Ho esaminato il codice del simulatore Falstad in dettaglio. Per circuiti costituiti solo da componenti lineari come resistori, interruttori e sorgenti di tensione (elementi come le uscite della porta logica sono considerati fonti di tensione collegate a terra ai fini della simulazione) il simulatore riguarda ciascun nodo del circuito, sorgente di tensione (che collega due nodi) , o wire (allo stesso modo) come definizione di un'equazione lineare e una variabile, in modo tale che il numero di equazioni e il numero di variabili siano sempre uguali. Per un nodo di circuito, la variabile è la tensione del nodo e l'equazione calcola la corrente totale che scorre attraverso di essa pari alla corrente totale iniettata da qualsiasi sorgente di corrente. Per una sorgente di tensione o filo (un filo gestito come fonte di tensione in cui la differenza potenziale è zero),

Cose come fonti e resistori attuali non sono associati a resistori o variabili. Invece, le fonti di corrente aumentano la corrente totale richiesta per un nodo di circuito (ricordare che ciascun nodo di circuito ha un'equazione che valuta la corrente totale che scorre dentro e fuori) e la diminuisce per l'altro. I resistori sono un po 'più complicati: per ogni equazione dell'endpoint, il resistore aggiunge termini per la tensione del nodo di ciascun endpoint.

Un resistore da 100 ohm che collega i nodi 1 e 2, ad esempio, direbbe che ogni aumento di volt sul nodo 1 ridurrà la corrente che fluisce nel nodo 1 di 0,01 ampere e aumenterebbe la corrente che fluisce nel nodo 2 di una quantità simile. Allo stesso modo, ogni aumento di volt sul nodo 2 aumenterebbe la corrente che scorre nel nodo 1 di 0,01 ampere e diminuirebbe la corrente che scorre nel nodo 2 di una quantità simile.

Si consideri un circuito con un'alimentazione da 10 volt che collega i nodi 1 e 5 e resistenze da 100 ohm che collegano i nodi 1 e 2, 2 e 3, 2 e 4 e 3 e 4. Supponiamo inoltre che sul nodo 1 sia presente un'icona di terra:

neg ---+-1---R100---2---R100---3---100---4---pos
      gnd           |                    |
                    +---------100--------+

Ci sarebbero due "fonti di tensione": il conduttore di terra e l'alimentazione a 10 volt (che sono considerati rispettivamente equazione / variabile 5 e 6). Le equazioni sarebbero quindi:

-X1*0.01                             +X5 -X6 = 0  Node 1
+X1*0.01 -X2*0.01          +X4*0.01          = 0  Node 2
         +X2*0.01 -X3*0.01 +X4*0.01          = 0  Node 3
         +X2*0.01          -X4*0.01      +X6 = 0  Node 4
-X1*1                                        = 0  Volts 5 (voltage between 1 and gnd)
-X1*1                      +X4*1             = 10 Volts 6 (voltage between 1 and 4)

Questo sistema di equazioni può essere rappresentato come una matrice NxN più una matrice di elementi N. Ogni equazione è rappresentata da una riga nella matrice, con valori su ciascuna riga che rappresentano i coefficienti di ciascuna variabile. Il lato destro di ogni equazione è memorizzato nell'array separato. Prima di risolvere le equazioni, si conoscerà la corrente netta che scorre in ciascun nodo (zero in questo caso) e la differenza di tensione tra coppie di nodi collegati da sorgenti di tensione. Risolvere le equazioni produrrà la tensione su ciascun nodo e la corrente che scorre attraverso ciascuna sorgente di tensione.

Se il circuito contiene condensatori, ciascuno di questi verrà considerato come una sorgente di tensione in serie con un resistore di basso valore; dopo ogni fase di simulazione, la sorgente di tensione verrà regolata in base alla quantità di corrente che scorreva attraverso di essa. Gli induttori saranno considerati resistori di alto valore che alimentano la corrente in uno e lo eliminano dall'altro (la quantità di corrente viene regolata in base alla tensione attraverso la resistenza). Sia per i condensatori che per gli induttori, il valore della resistenza sarà controllato dalla quantità di tempo rappresentata da una fase di simulazione.

Gli elementi circuitali più complessi come i transistor sono considerati combinazioni di sorgenti di tensione, sorgenti di corrente e resistori. A differenza degli elementi circuitali più semplici che consentono di elaborare tutto una volta per ogni fase del tempo di simulazione, elementi come i transistor calcolano le resistenze effettive ecc. In base alle tensioni e alle correnti che stanno vedendo, valutano tutte le equazioni risultanti e rivalutano la loro resistenza in base a le nuove tensioni e correnti, rivalutano le equazioni, ecc. nel tentativo di raggiungere un equilibrio in cui la loro resistenza effettiva è come dovrebbe essere per la tensione e la corrente che il transitor sta vedendo.

Il simulatore Falstad può essere decentemente veloce per circuiti di medie dimensioni che consistono interamente di elementi "lineari". Il tempo per risolvere ripetutamente un sistema di equazioni è abbastanza ragionevole se l'unica cosa che cambia sono i coefficienti del lato destro. Il tempo diventa molto più lento se la parte sinistra cambia (ad es. Perché la resistenza effettiva di un transistor sale o scende) perché il sistema deve "rifattorizzare" le equazioni. Dover rifattare le equazioni più volte per fase di simulazione (potrebbe essere necessario con i transistor) rende le cose ancora più lente.

Usare una matrice grande per tutto non è un buon approccio per simulazioni di grandi dimensioni; anche se la matrice sarà abbastanza scarsa, occuperà spazio proporzionale al quadrato del numero di nodi più sorgenti di tensione. Il tempo necessario per risolvere la matrice in ciascuna fase di simulazione sarà proporzionale al quadrato della dimensione della matrice se non è richiesto il refactoring o al cubo della dimensione della matrice se è richiesto il refactoring. Tuttavia, l'approccio ha una certa eleganza quando si tratta di mostrare la relazione tra un circuito e un sistema di equazioni lineari.


La maggior parte dei simulatori di tipo SPICE usa anche questo tipo di algoritmo. Ecco una panoramica di spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972

1
Cordiali saluti - KLU è l'algoritmo comune utilizzato nei simulatori di circuiti. KLU sta per Clark Kent LU, poiché si basa sull'algoritmo di Gilbert-Peierls, un algoritmo non supernodal, che è il predecessore di SuperLU, un algoritmo supernodal. KLU è un risolutore lineare sparso ad alte prestazioni che impiega meccanismi di ordinamento ibridi e un'elegante fattorizzazione e risoluzione di algoritmi.
user6972

È importante notare che esistono diversi modelli di transistor, ad esempio BSIM o EKV. Fondamentalmente questi modelli prendono in considerazione tutta la fisica, da un punto di vista, coinvolta nel funzionamento di un singolo transistor e gli effetti sulle sue caratteristiche elettriche. C'è molto di più che rappresentare semplicemente come combinazioni di sorgenti di tensione, sorgenti di corrente e resistori. Se si desidera selezionare un modello diverso, è possibile utilizzare il parametro LEVEL. Questo tutorial di Jacob Baker è un buon inizio. spero che sia d'aiuto.

11

LiveWire è uno dei molti simulatori di circuiti, con diversi livelli di capacità.

Ad esempio, Falstad Circuit Simulator sembra avere un livello di capacità simile a quello di LiveWire - e il codice sorgente è offerto a quel link. Questo dovrebbe essere un buon inizio.

Per una simulazione di circuito più sofisticata, molti strumenti risalgono a SPICE di UC Berkley . Il codice sorgente SPICE è disponibile su richiesta presso UCB con licenza BSD.

Le edizioni SPICE specifiche del produttore in genere integrano nei loro simulatori modelli di simulazione a semiconduttore molto dettagliati dei propri prodotti. Ad esempio, LTSpice IV di Linear Technologies o TINA-TI di Texas Instruments. Sotto, di solito è tutto SPICE.

Citando dalla pagina WikiPedia su SPICE:

I programmi di simulazione circuitale, di cui SPICE e derivati ​​sono i più importanti, prendono una netlist di testo che descrive gli elementi del circuito (transistor, resistori, condensatori, ecc.) E le loro connessioni, e traducono questa descrizione in equazioni da risolvere. Le equazioni generali prodotte sono equazioni algebriche differenziali non lineari che vengono risolte utilizzando metodi di integrazione implicita, metodo di Newton e tecniche di matrice sparsa.

A un livello di sofisticazione ancora più elevato, diversi prodotti commerciali come Proteus Virtual System Modeling , parte di Proteus Design Suite, utilizzano miglioramenti proprietari per la simulazione di circuiti SPICE in modalità mista: questi strumenti possono simulare sia il comportamento dei circuiti analogici sia il codice digitale del microcontrollore, con le interazioni tra loro completamente modellate.

A un livello molto più limitato e limitante, alcuni editor schematici, come lo strumento Circuit Lab integrato in questo sito, offrono una piccola gamma di funzionalità di simulazione. Anche se questo potrebbe non essere così utile nella pratica progettazione elettronica non banale, studiare le loro capacità e l'implementazione fornirebbe a uno sviluppatore di software alcune informazioni su ciò che funziona bene per gli utenti e cosa no.


5

Esistono tre analisi principali eseguite dai simulatori di circuiti simili a SPICE:

  • Punto operativo DC
  • Analisi AC
  • Analisi transitoria

L' analisi del punto di funzionamento DC per un circuito lineare (formato da sorgenti DC, resistori lineari e sorgenti controllate lineari) viene eseguita utilizzando l'analisi nodale modificata (MNA). Si potrebbe usare anche l'analisi della mesh, ma è molto semplice impostare le equazioni per l'analisi nodale.

Per i circuiti non lineari (che includono dispositivi come transistor, che possono essere modellati essenzialmente come fonti controllate non lineari), è necessario utilizzare alcuni trucchi aggiuntivi. Un modo concettualmente semplice è usare un'estensione del Metodo di Newton per equazioni multiple.

Il metodo di Newton prevede di indovinare la soluzione, quindi di creare un modello lineare del circuito che sia solo "vicino" alla soluzione indovinata. La soluzione al circuito linearizzato viene usata come una nuova ipotesi sulla soluzione, e il processo viene ripetuto fino a quando le iterazioni successive "convergono" sulla soluzione (si spera) corretta per il circuito non lineare. Nel mondo reale, i solutori non lineari più complicati vengono utilizzati per essere in grado di eseguire la soluzione più rapidamente e con meno errori a causa del fallimento della convergenza.

L' analisi CA viene eseguita innanzitutto eseguendo un'analisi CC per trovare un punto operativo. Quindi studi l'effetto di piccole perturbazioni attorno al punto operativo. "Piccolo" significa, per definizione, abbastanza piccolo che gli effetti non lineari non sono importanti. Ciò significa che gli elementi del circuito vengono trasformati in elementi lineari equivalenti a seconda del punto operativo. Quindi l'MNA può essere utilizzato (con numeri complessi che rappresentano l'impedenza di elementi di accumulo di energia) per risolvere l'effetto delle perturbazioni causate dalle fonti CA nel circuito.

L' analisi dei transitori viene eseguita, come afferma Olin nei commenti, considerando come le variabili del circuito si evolvono in tempi molto piccoli. Ancora una volta ad ogni passo il circuito è linearizzato attorno al suo punto operativo, in modo che l'MNA possa essere usato per impostare le equazioni. Un metodo semplice per risolvere il comportamento nel tempo è il Metodo di Eulero . Tuttavia, ancora una volta in pratica vengono utilizzati metodi più complicati per consentire l'utilizzo di timestep più grandi con errori minori.

Potete vedere che un filo comune in questi metodi sta facendo un'approssimazione lineare al comportamento del circuito e risolverlo con MNA fino a trovare una soluzione al comportamento del circuito non lineare.

Queste tre analisi sono state le principali condotte dai simulatori SPICE dagli anni '70. I simulatori più recenti aggiungono funzionalità aggiuntive come l'equilibrio armonico (un'estensione dell'anlaisi CA per adattarsi agli effetti di miscelazione di elementi non lineari) o le simulazioni elettromagnetiche per simulare gli effetti della linea di trasmissione. Ma le simulazioni DC, AC e transient sono le prime tre che dovresti capire quando usi un simulatore SPICE.


Ho parlato di come impostare le equazioni MNA in una risposta precedente: electronics.stackexchange.com/questions/19198/…
The Photon

2
Dovremmo anche aggiungere che le simulazioni di circuiti digitali usano metodi completamente diversi; e ciò rende la co-simulazione analogico-digitale un problema a sé stante.
Il fotone il
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.