Wie funktionieren Circuit Simulators eigentlich?


31

Ich hatte vor kurzem die Gelegenheit, mit LiveWire , einem Schaltungssimulator, herumzuspielen, und begann mich zu fragen, wie genau sie die Spannungen über jede Komponente und den Strom berechnet haben, der durch jede Kabelspur fließt.

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

Als Programmierer hat mich das fasziniert und ich würde gerne sehen, welche Techniken üblicherweise beim Bau von Schaltungssimulatoren wie diesem eingesetzt 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 sie sich an der Softwareentwicklung orientiert, eher auf diese Site und deren Nutzerbasis zutrifft.


Der Haupttrick sind viele kleine Zeitscheiben. Komplexe Zeitfunktionen werden daher mit vielen Differenzgleichungen und kleinen Zeitscheiben behandelt. Unangenehme Komplexität wird normalerweise erheblich reduziert, wenn sie als Differentialgleichungen ausgedrückt werden kann, die in einer digitalen Simulation zu Differentialgleichungen werden.
Olin Lathrop

Antworten:


14

Ich habe den Code des Falstad-Simulators genauer untersucht. Für Schaltungen, die nur aus linearen Komponenten wie Widerständen, Schaltern und Spannungsquellen bestehen (Dinge wie Logikgatterausgänge werden für die Zwecke der Simulation als mit Masse verbundene Spannungsquellen betrachtet), betrachtet der Simulator jeden Schaltungsknoten, die Spannungsquelle (die zwei Knoten verbindet). , oder wir definieren (ebenfalls) eine lineare Gleichung und eine Variable, 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 Gesamtstrom, der durch ihn fließt, gleich dem Gesamtstrom, der von einer beliebigen Stromquelle eingespeist 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 keinen Widerständen oder Variablen zugeordnet. Stattdessen erhöhen Stromquellen den für einen Schaltungsknoten erforderlichen Gesamtstrom (denken Sie daran, dass jeder Schaltungsknoten eine Gleichung hat, die den ein- und ausfließenden Gesamtstrom auswertet) und verringern ihn für den anderen. Widerstände sind etwas kniffliger: Für jede Endpunktgleichung fügt der Widerstand Terme für die Knotenspannung jedes Endpunkts hinzu.

Ein 100-Ohm-Widerstand, der die Knoten 1 und 2 verbindet, würde beispielsweise sagen, dass jeder Voltanstieg an Knoten 1 den in Knoten 1 fließenden Strom um 0,01 Ampere und den in Knoten 2 fließenden Strom um einen ähnlichen Betrag erhöht. In gleicher Weise würde jede Voltzunahme 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 ähnlichen Betrag verringern.

Stellen Sie sich eine Schaltung mit einer 10-Volt-Versorgung vor, die die Knoten 1 und 5 und 100-Ohm-Widerstände verbindet, die die Knoten 1 und 2, 2 und 3, 2 und 4 und 3 und 4 verbinden. Nehmen Sie weiter an, dass sich auf Knoten 1 ein Erdungssymbol befindet.

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

Es würde zwei "Spannungsquellen" geben: die Erdungsleitung 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 N × N-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 werden der in jeden Knoten fließende Nettostrom (in diesem Fall Null) und die Spannungsdifferenz zwischen Knotenpaaren, die durch Spannungsquellen verbunden sind, bekannt. Das Lösen der Gleichungen ergibt die Spannung an jedem Knoten und den Strom, der durch jede Spannungsquelle fließt.

Wenn der Schaltkreis Kondensatoren enthält, wird jeder von diesen als Spannungsquelle in Reihe mit einem Widerstand mit niedrigem Wert betrachtet. Nach jedem Simulationsschritt wird die Spannungsquelle entsprechend der durchflossenen Strommenge angepasst. Induktivitäten werden als hochohmige Widerstände angesehen, die Strom in einen Widerstand einspeisen und aus dem anderen herausnehmen (die Stromstärke wird entsprechend der Spannung über dem Widerstand eingestellt). Sowohl für Kondensatoren als auch für Induktivitäten wird der Wert des Widerstands durch die Zeitdauer gesteuert, die durch einen Simulationsschritt dargestellt wird.

Komplexere Schaltungselemente wie Transistoren werden als Kombinationen von Spannungsquellen, Stromquellen und Widerständen angesehen. Im Gegensatz zu den einfacheren Schaltungselementen, bei denen alles einmal pro Simulationszeitschritt verarbeitet wird, berechnen Elemente wie Transistoren ihre effektiven Widerstände usw. auf der Grundlage der Spannungen und Ströme, die sie sehen, werten alle sich ergebenden Gleichungen aus und werten ihren Widerstand auf der Grundlage neu aus Die neuen Spannungen und Ströme werden erneut ausgewertet, um ein Gleichgewicht zu erreichen, in dem der effektive Widerstand für die Spannung und den Strom, die der Transitor sieht, dementsprechend ist.

Der Falstad-Simulator kann für mittelgroße Schaltungen, die vollständig aus "linearen" Elementen bestehen, recht schnell sein. Die Zeit, um ein Gleichungssystem wiederholt zu lösen, ist ziemlich vernünftig, 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 steigt oder fällt), weil das System die Gleichungen "refaktorisieren" muss. Die Gleichungen mehrmals pro Simulationsschritt refaktorieren zu müssen (möglicherweise bei Transistoren erforderlich), macht die Sache noch langsamer.

Die Verwendung einer großen Matrix für alles ist kein guter Ansatz für große Simulationen. Obwohl die Matrix ziemlich dünn ist, nimmt sie Platz ein, der proportional zum Quadrat der Anzahl der Knoten plus Spannungsquellen ist. Die zum Lösen der Matrix in jedem Simulationsschritt erforderliche Zeit ist proportional zum Quadrat der Matrixgröße, wenn kein Refactoring erforderlich ist, oder zum Würfel der Matrixgröße, wenn ein Refactoring erforderlich ist. Trotzdem hat der Ansatz eine gewisse Eleganz, wenn es darum geht, die Beziehung zwischen einer Schaltung und einem linearen Gleichungssystem aufzuzeigen.


Die meisten SPICE-Simulatoren verwenden ebenfalls diesen Algorithmus. Hier ist eine Übersicht für spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972

1
FYI - KLU ist der in Schaltungssimulatoren übliche Algorithmus. 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 sparsamer linearer Hochleistungslöser, der hybride Ordnungsmechanismen und elegante Faktorisierungs- und Lösungsalgorithmen verwendet.
User6972

Es ist wichtig zu beachten, dass es mehrere Transistormodelle gibt, z. B. BSIM oder EKV. Grundsätzlich berücksichtigen diese Modelle die gesamte Physik, die am Betrieb eines einzelnen Transistors beteiligt ist, und die Auswirkungen auf seine elektrischen Eigenschaften. Es steckt viel mehr dahinter, als nur eine Kombination aus Spannungsquellen, Stromquellen und Widerständen darzustellen. Wenn Sie ein anderes Modell auswählen möchten, können Sie den Parameter LEVEL verwenden. Dieses Tutorial von Jacob Baker ist ein guter Anfang. ich hoffe es hilft.

11

LiveWire ist einer von vielen Schaltungssimulatoren mit unterschiedlichen Leistungsstufen.

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

Für eine komplexere Schaltungssimulation 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 aus der WikiPedia-Seite über SPICE:

Schaltungssimulationsprogramme, von denen SPICE und Derivate die bekanntesten sind, erstellen eine Textnetzliste, in der die Schaltungselemente (Transistoren, Widerstände, Kondensatoren usw.) und ihre Verbindungen beschrieben werden, und übersetzen diese Beschreibung in zu lösende Gleichungen. Die generellen Gleichungen sind nichtlineare algebraische Differentialgleichungen, die mit impliziten Integrationsmethoden, der Newtonschen Methode und spärlichen Matrixtechniken gelöst werden.

Auf noch höherem Niveau verwenden einige kommerzielle Produkte wie Proteus Virtual System Modeling , Teil der Proteus Design Suite, proprietäre Verbesserungen für die Mixed-Mode-SPICE-Schaltungssimulation. Diese Tools können sowohl das Verhalten analoger Schaltungen als auch digitalen Mikrocontroller-Code simulieren. mit den Wechselwirkungen zwischen ihnen vollständig modelliert.

Einige Schaltplaneditoren, z. B. das in diese Site integrierte Circuit Lab-Tool, bieten auf einer viel begrenzteren und einschränkenderen Ebene nur einen kleinen Bereich von Simulationsfunktionen. Während dies im praktischen, nicht trivialen elektronischen Design 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.


5

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

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

Die DC-Arbeitspunktanalyse für einen linearen Schaltkreis (bestehend aus DC-Quellen, linearen Widerständen und linear gesteuerten Quellen) wird mit der Modified Nodal Analysis (MNA) durchgeführt. Eine Netzanalyse könnte ebenfalls verwendet werden, es ist jedoch sehr einfach, die Gleichungen für die Knotenanalyse aufzustellen.

Für nichtlineare Schaltungen (die Geräte wie Transistoren enthalten, die im Wesentlichen als nichtlinear gesteuerte Quellen modelliert werden können) müssen einige zusätzliche Tricks verwendet werden. Eine konzeptionell einfache Möglichkeit besteht darin, eine Erweiterung der Newtonschen Methode für mehrere Gleichungen zu verwenden.

Newtons Methode besteht darin, die Lösung zu erraten und dann ein lineares Modell der Schaltung zu erstellen, das nur "in der Nähe" der erratenen Lösung genau ist. Die Lösung für die lineare Schaltung wird als neue Vermutung für die Lösung verwendet, und der Prozess wird iteriert, bis die aufeinanderfolgenden Iterationen auf die (hoffentlich) richtige Lösung für die nichtlineare Schaltung "konvergieren". In der realen Welt werden kompliziertere nichtlineare Löser verwendet, um die Lösung aufgrund von Konvergenzfehlern schneller und mit weniger Fehlern ausführen zu können.

Die AC-Analyse wird durchgeführt, indem zuerst eine DC-Analyse durchgeführt wird, um einen Betriebspunkt zu finden. Anschließend untersuchen Sie die Auswirkungen kleiner Störungen um den Betriebspunkt. "Klein" bedeutet per Definition, dass nichtlineare Effekte nicht wichtig sind. Das heißt, die Schaltungselemente werden abhängig vom Arbeitspunkt in lineare Ersatzelemente umgewandelt. Dann kann der MNA (mit komplexen Zahlen, die die Impedanz von Energiespeicherelementen darstellen) verwendet werden, um den Effekt der durch die Wechselstromquellen in der Schaltung verursachten Störungen zu lösen.

Die transiente Analyse wird, wie Olin in Kommentaren sagt, durchgeführt, indem berücksichtigt wird, wie sich die Schaltungsvariablen in sehr kleinen Zeitschritten entwickeln. Wiederum wird die Schaltung bei jedem Zeitschritt um ihren Arbeitspunkt herum linearisiert, so dass MNA verwendet werden kann, um die Gleichungen aufzustellen. Eine einfache Methode zur Lösung des zeitlichen Verhaltens ist die Euler-Methode . In der Praxis werden jedoch wiederum kompliziertere Methoden verwendet, um größere Zeitschritte mit kleineren Fehlern zu ermöglichen.

Sie können sehen, dass ein gemeinsamer Thread in diesen Methoden eine lineare Annäherung an das Schaltungsverhalten darstellt und dieses mit MNA löst, bis Sie eine Lösung für das nichtlineare Schaltungsverhalten finden.

Diese drei Analysen wurden seit den 1970er Jahren hauptsächlich von SPICE-ähnlichen Simulatoren durchgeführt. Neuere Simulatoren bieten zusätzliche Funktionen wie den Oberschwingungsausgleich (eine Erweiterung der Wechselstrom-Analyse zur Berücksichtigung von Mischeffekten nichtlinearer Elemente) oder elektromagnetische Simulationen zur Simulation von Übertragungsleitungseffekten. Die DC-, AC- und transienten Simulationen sind jedoch 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: electronics.stackexchange.com/questions/19198/…
The Photon

2
Wir sollten auch hinzufügen, dass digitale Schaltungssimulationen ganz andere Methoden verwenden; und das macht die Analog-Digital-Co-Simulation zu einem ganz eigenen Problem.
Das Photon
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.