Wie funktionieren Schaltungssimulatoren eigentlich?

Ich hatte kürzlich die Gelegenheit, mit LiveWire herumzuspielen , einem Schaltungssimulator, und begann mich zu fragen, wie genau sie die Spannungen an jeder Komponente und den Strom berechneten, der durch jede Leiterbahn fließt.

Mir wurden bisher nur grundlegende Schaltungsanalysefähigkeiten (wie Netzanalyse und Knotenanalyse) beigebracht, und ich bin mir nicht ganz sicher, ob sie generisch genug sind, um sie in einem Schaltungssimulator „für alle“ zu implementieren.

Als Programmierer hat mich das fasziniert und ich würde gerne sehen, welche Techniken üblicherweise beim Bau von Schaltungssimulatoren wie diesem verwendet werden.

Ich entschuldige mich, wenn dies nicht hierher gehört, es war eine Wahl zwischen hier und StackOverflow, und ich hatte das Gefühl, dass die Frage, obwohl es sich um eine Softwareentwicklungs-orientierte Frage handelt, eher auf diese Site und ihre Benutzerbasis zutrifft.

Der Haupttrick sind viele kleine Zeitscheiben. Komplexe Zeitfunktionen werden daher behandelt, indem viele Differenzengleichungen mit kleinen Zeitscheiben ausgeführt werden. Üble Komplexität wird normalerweise erheblich reduziert, wenn sie als Differentialgleichungen ausgedrückt werden kann, die in einer digitalen Simulation zu Differenzengleichungen werden.

Antworten (3)

Ich habe den Code des Falstad-Simulators eingehend untersucht. Bei Schaltungen, die nur aus linearen Komponenten wie Widerständen, Schaltern und Spannungsquellen bestehen (Dinge wie Logikgatterausgänge gelten für die Zwecke der Simulation als mit Masse verbundene Spannungsquellen), betrachtet der Simulator jeden Schaltungsknoten, jede Spannungsquelle (Verbindung zweier Knoten) , oder Draht (ebenfalls) als Definition einer linearen Gleichung und einer Variablen, so dass die Anzahl der Gleichungen und die Anzahl der Variablen immer gleich sind. Für einen Schaltungsknoten ist die Variable die Spannung des Knotens, und die Gleichung berechnet den durch ihn fließenden Gesamtstrom gleich dem Gesamtstrom, der von allen Stromquellen injiziert wird. Für eine Spannungsquelle oder einen Draht (ein Draht, der als Spannungsquelle behandelt wird, bei der die Potentialdifferenz Null ist),

Dinge wie Stromquellen und Widerstände sind nicht mit Widerständen oder Variablen verbunden. Stattdessen erhöhen Stromquellen den für einen Schaltungsknoten erforderlichen Gesamtstrom (denken Sie daran, dass jeder Schaltungsknoten eine Gleichung hat, die den ein- und ausgehenden Gesamtstrom bewertet) und verringern ihn für den anderen. Widerstände sind etwas kniffliger: Für die Gleichung jedes Endpunkts fügt der Widerstand Terme für die Knotenspannung jedes Endpunkts hinzu.

Ein 100-Ohm-Widerstand, der beispielsweise die Knoten 1 und 2 verbindet, würde sagen, dass jede Volterhöhung an Knoten 1 den in Knoten 1 fließenden Strom um 0,01 Ampere verringert und den in Knoten 2 fließenden Strom um denselben Betrag erhöht. Ebenso würde jede Spannungserhöhung an Knoten 2 den in Knoten 1 fließenden Strom um 0,01 Ampere erhöhen und den in Knoten 2 fließenden Strom um einen gleichen Betrag verringern.

Betrachten Sie eine Schaltung mit einer 10-Volt-Versorgung, die die Knoten 1 und 5 verbindet, und 100-Ohm-Widerständen, die die Knoten 1 und 2, 2 und 3, 2 und 4 sowie 3 und 4 verbinden. Nehmen Sie weiter an, dass sich an Knoten 1 ein Erdungssymbol befindet. Also:

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

Es gäbe zwei "Spannungsquellen": die Masseleitung und die 10-Volt-Versorgung (die als Gleichung/Variable 5 bzw. 6 betrachtet werden). Die Gleichungen wären also:

-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)

Dieses Gleichungssystem kann als eine NxN-Matrix plus ein N-Element-Array dargestellt werden. Jede Gleichung wird durch eine Zeile in der Matrix dargestellt, wobei die Werte in jeder Zeile die Koeffizienten jeder Variablen darstellen. Die rechte Seite jeder Gleichung wird in einem separaten Array gespeichert. Vor dem Lösen der Gleichungen kennt man den Nettostrom, der in jeden Knoten fließt (in diesem Fall Null), und die Spannungsdifferenz zwischen Paaren von Knoten, die durch Spannungsquellen verbunden sind. Das Lösen der Gleichungen ergibt die Spannung an jedem Knoten und den Strom, der durch jede Spannungsquelle fließt.

Wenn die Schaltung Kondensatoren enthält, wird jeder von ihnen als Spannungsquelle in Reihe mit einem niederohmigen Widerstand betrachtet; Nach jedem Simulationsschritt wird die Spannungsquelle entsprechend der durch sie geflossenen Strommenge angepasst. Induktivitäten werden als hochwertige Widerstände betrachtet, die Strom in einen speisen und den anderen herausnehmen (die Strommenge wird entsprechend der Spannung über dem Widerstand eingestellt). Sowohl für Kondensatoren als auch für Induktoren wird der Wert des Widerstands durch die Zeitdauer gesteuert, die durch einen Simulationsschritt dargestellt wird.

Komplexere Schaltungselemente wie Transistoren werden als Kombinationen aus Spannungsquellen, Stromquellen und Widerständen betrachtet. Im Gegensatz zu den einfacheren Schaltungselementen, bei denen alles einmal pro Simulationszeitschritt verarbeitet wird, berechnen Elemente wie Transistoren ihre effektiven Widerstände usw. basierend auf den Spannungen und Strömen, die sie sehen, werten alle resultierenden Gleichungen aus und bewerten ihren Widerstand basierend darauf neu die neuen Spannungen und Ströme, Neubewertung der Gleichungen usw., um ein Gleichgewicht zu erreichen, bei dem ihr effektiver Widerstand so ist, wie er für die Spannung und den Strom sein sollte, die der Transistor sieht.

Der Falstad-Simulator kann für mittelgroße Schaltungen, die ausschließlich aus "linearen" Elementen bestehen, anständig schnell sein. Die Zeit zum wiederholten Lösen eines Gleichungssystems ist ziemlich angemessen, wenn sich nur die Koeffizienten auf der rechten Seite ändern. Die Zeit wird viel langsamer, wenn sich die linke Seite ändert (z. B. weil der effektive Widerstand eines Transistors nach oben oder unten geht), weil das System die Gleichungen "umgestalten" muss. Das mehrfache Umgestalten der Gleichungen pro Simulationsschritt (kann bei Transistoren erforderlich sein) macht die Dinge noch langsamer.

Die Verwendung einer großen Matrix für alles ist kein guter Ansatz für große Simulationen; Obwohl die Matrix ziemlich spärlich sein wird, nimmt sie Platz ein, der proportional zum Quadrat der Anzahl von Knoten plus Spannungsquellen ist. Die Zeit, die zum Lösen der Matrix in jedem Simulationsschritt erforderlich ist, ist proportional zum Quadrat der Matrixgröße, wenn kein Refactoring erforderlich ist, oder zum Würfel der Matrixgröße, wenn ein Refactoring erforderlich ist. Dennoch besitzt der Ansatz eine gewisse Eleganz, wenn es darum geht, den Zusammenhang zwischen einer Schaltung und einem linearen Gleichungssystem darzustellen.

Die meisten SPICE-artigen Simulatoren verwenden ebenfalls diese Art von Algorithmus. Hier ist eine Übersicht für Spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
FYI - KLU ist der übliche Algorithmus, der in Schaltungssimulatoren verwendet wird. KLU steht für Clark Kent LU, da es auf dem Gilbert-Peierls-Algorithmus basiert, einem nicht-supernodalen Algorithmus, der der Vorgänger von SuperLU ist, einem supernodalen Algorithmus. KLU ist ein linearer Hochleistungslöser mit geringer Dichte, der hybride Ordnungsmechanismen und elegante Faktorisierungs- und Lösungsalgorithmen verwendet.
Es ist wichtig zu beachten, dass es mehrere Transistormodelle gibt, zum Beispiel BSIM oder EKV. Grundsätzlich berücksichtigen diese Modelle die gesamte Physik, die mit dem Betrieb eines einzelnen Transistors und den Auswirkungen auf seine elektrischen Eigenschaften verbunden ist. Es steckt viel mehr dahinter, als nur Kombinationen von Spannungsquellen, Stromquellen und Widerständen darzustellen. Wenn Sie ein anderes Modell auswählen möchten, können Sie den LEVEL-Parameter verwenden. Dieses Tutorial von Jacob Baker ist ein guter Anfang. ich hoffe es hilft.

LiveWire ist einer von vielen Schaltungssimulatoren mit unterschiedlichen Fähigkeiten.

Zum Beispiel scheint Falstad Circuit Simulator ein ähnliches Leistungsniveau wie LiveWire zu haben - und der Quellcode wird unter diesem Link angeboten. Das sollte ein guter Anfang sein.

Für anspruchsvollere Schaltungssimulationen gehen viele Tools auf SPICE von UC Berkley zurück . Der SPICE-Quellcode ist auf Anfrage bei UCB unter BSD-Lizenz erhältlich.

Herstellerspezifische SPICE-Editionen integrieren typischerweise sehr detaillierte Halbleitersimulationsmodelle ihrer eigenen Produkte in ihre Simulatoren. Zum Beispiel LTSpice IV von Linear Technologies oder TINA-TI von Texas Instruments. Darunter ist normalerweise alles SPICE.

Zitat von der WikiPedia-Seite über SPICE:

Schaltungssimulationsprogramme, von denen SPICE und Derivate am bekanntesten sind, verwenden eine Textnetzliste, die die Schaltungselemente (Transistoren, Widerstände, Kondensatoren usw.) und ihre Verbindungen beschreibt, und übersetzen diese Beschreibung in zu lösende Gleichungen. Die erzeugten allgemeinen Gleichungen sind nichtlineare algebraische Differentialgleichungen, die unter Verwendung von impliziten Integrationsverfahren, dem Newton-Verfahren und dünnbesetzten Matrixtechniken gelöst werden.

Auf einem noch höheren Niveau verwenden mehrere kommerzielle Produkte wie Proteus Virtual System Modeling , Teil der Proteus Design Suite, proprietäre Verbesserungen für die SPICE-Schaltungssimulation im gemischten Modus - diese Tools können sowohl das Verhalten analoger Schaltungen als auch digitalen Mikrocontroller-Code simulieren. wobei die Wechselwirkungen zwischen ihnen vollständig modelliert sind.

Auf einer viel eingeschränkteren und einschränkenderen Ebene bieten einige Schaltplaneditoren, wie das in diese Website integrierte Circuit Lab-Tool, eine kleine Auswahl an Simulationsmöglichkeiten. Während dies im praktischen, nicht trivialen Elektronikdesign nicht allzu nützlich sein mag, würde das Studium ihrer Fähigkeiten und Implementierung einem Softwareentwickler einen Einblick geben, was für Benutzer gut funktioniert und was nicht.

Es gibt drei Hauptanalysen, die von SPICE-ähnlichen Schaltungssimulatoren durchgeführt werden:

  • DC-Arbeitspunkt
  • AC-Analyse
  • Vorübergehende Analyse

Die DC-Arbeitspunktanalyse für eine lineare Schaltung (gebildet aus DC-Quellen, linearen Widerständen und linear gesteuerten Quellen) wird unter Verwendung der modifizierten Knotenanalyse (MNA) durchgeführt. Es könnte auch eine Netzanalyse verwendet werden, aber es ist sehr einfach, die Gleichungen für die Knotenanalyse aufzustellen.

Für nichtlineare Schaltungen (zu denen Geräte wie Transistoren gehören, die im Wesentlichen als nichtlineare gesteuerte Quellen modelliert werden können) müssen einige zusätzliche Tricks angewendet werden. Eine konzeptionell einfache Möglichkeit besteht darin, eine Erweiterung des Newton-Verfahrens für mehrere Gleichungen zu verwenden.

Bei der Newton-Methode wird die Lösung erraten und dann ein lineares Modell der Schaltung erstellt, das nur "in der Nähe" der erratenen Lösung genau ist. Die Lösung für die linearisierte Schaltung wird als neue Vermutung über die Lösung verwendet, und der Prozess wird wiederholt, bis die aufeinanderfolgenden Iterationen bei der (hoffentlich) richtigen Lösung für die nichtlineare Schaltung "konvergieren". In der realen Welt werden kompliziertere nichtlineare Löser verwendet, um die Lösung schneller und mit weniger Fehlern aufgrund von Konvergenzfehlern durchführen zu können.

Die AC-Analyse wird durchgeführt, indem zuerst eine DC-Analyse durchgeführt wird, um einen Arbeitspunkt zu finden. Dann untersuchen Sie die Wirkung kleiner Störungen um den Arbeitspunkt herum. "Klein" bedeutet per Definition klein genug, dass nichtlineare Effekte nicht wichtig sind. Das heißt, die Schaltungselemente werden je nach Arbeitspunkt in lineare Ersatzelemente transformiert. Dann kann der MNA verwendet werden (mit komplexen Zahlen, die die Impedanz von energiespeichernden Elementen darstellen), um den Effekt der Störungen zu lösen, die durch die Wechselstromquellen in der Schaltung verursacht werden.

Die Transientenanalyse erfolgt, wie Olin in Kommentaren sagt, indem berücksichtigt wird, wie sich die Schaltungsvariablen über sehr kleine Zeitschritte entwickeln. Auch hier wird die Schaltung bei jedem Zeitschritt um ihren Arbeitspunkt herum linearisiert, so dass MNA zum Aufstellen der Gleichungen verwendet werden kann. Eine einfache Methode zur Lösung des zeitlichen Verhaltens ist die Euler-Methode . In der Praxis werden jedoch wiederum kompliziertere Verfahren verwendet, um die Verwendung größerer Zeitschritte mit kleineren Fehlern zu ermöglichen.

Sie können sehen, dass ein roter Faden in diesen Methoden darin besteht, eine lineare Annäherung an das Schaltungsverhalten vorzunehmen und diese mit MNA zu lösen, bis Sie eine Lösung für das nichtlineare Schaltungsverhalten finden.

Diese drei Analysen sind seit den 1970er Jahren die wichtigsten, die von SPICE-ähnlichen Simulatoren durchgeführt wurden. Neuere Simulatoren fügen zusätzliche Funktionen wie Harmonic Balance (eine Erweiterung der AC-Analyse zur Berücksichtigung von Mischeffekten von nichtlinearen Elementen) oder elektromagnetische Simulationen zur Simulation von Übertragungsleitungseffekten hinzu. Aber die DC-, AC- und transienten Simulationen sind die ersten drei, die Sie verstehen sollten, wenn Sie einen SPICE-ähnlichen Simulator verwenden.

Ich habe in einer früheren Antwort darüber gesprochen, wie man die MNA-Gleichungen aufstellt: electronic.stackexchange.com/questions/19198/…
Wir sollten auch hinzufügen, dass digitale Schaltungssimulationen völlig andere Methoden verwenden; und das macht die analog-digitale Co-Simulation zu einem eigenen Problem.