Schaltungssimulation erstellen

Ich frage mich, ob mir jemand helfen kann. Wie wird man vorgehen, um einen einfachen Schaltungssimulator zu erstellen? Ähnlich wie Multisim, nur viel einfacher!

Im Grunde benötige ich nur Widerstände, Kondensatoren, Induktivitäten und Spannungsquellen.

Gibt es ein Tutorial, dem ich folgen kann, um dies mit C# und Visual Studio zu erstellen?

Müssen Sie AC und DC sowie oppoint und thermisches Rauschen haben?
AC und DC ja, thermisches Rauschen ist mir jetzt nicht so wichtig.

Antworten (4)

Ich habe die Simulations-Engine, die CircuitLab antreibt , von Grund auf neu geschrieben: von der Sparse-Matrix-Bibliothek bis hin zu Komponentenmodellen und Simulationsmodi. Mein Mitgründer hat das Frontend geschrieben. Am Ende war es ein unglaublich riesiges Programmierprojekt, aber eines, auf das ich ziemlich stolz bin. Wenn Sie bereit für die Herausforderung sind, kann das Schreiben eines Schaltungssimulators eines der lohnendsten Programmierprojekte sein, die Sie jemals in Angriff nehmen werden.

Auf hohem Niveau müssen Sie nur:

  1. Verwandeln Sie ein Netzwerk von Komponenten in ein Gleichungssystem (nichtlineare Differentialgleichungen).
  2. Lösen Sie das Gleichungssystem numerisch (unter Verwendung von Sparse-Matrix-Techniken).

Ich kenne kein Online-Tutorial, aber ich habe versucht, viel davon zu dokumentieren, während ich das Lehrbuch "Ultimate Electronics" schreibe , insbesondere in Kapitel 2. Es gibt auch eine Reihe von Büchern aus den 1990er Jahren zum Thema Schaltungssimulation, obwohl ich sie im Moment nicht zur Hand habe.

Mein Vorschlag wäre, nur mit Spannungsquellen und Widerständen zu beginnen und von dort aus weiter zu bauen. Viel Glück.

Vielen Dank für diese Antwort und das Buch! Können Sie aus Neugier, als Schätzung, sagen, wie viele Codezeilen es am Ende waren?

Ich habe einen Spice-basierten Schaltungssimulator für .NET und Mono namens Spice# geschrieben . Die Hauptunterschiede zu den meisten Simulatoren, die Sie dort finden werden, sind:

  • Es ist Open-Source .
  • Es ist eine Bibliothek und keine eigenständige ausführbare Datei.
  • Es wurde entwickelt, um angepasst und erweitert zu werden.

Das Projekt verfügt auch über eine Dokumentation , die einige Informationen darüber enthält, wie der Simulator (wie Spice) Modified Nodal Analysis (MNA) durchführt . Daher glaube ich, dass dieses Thema für Sie interessant sein könnte.

Ich bezweifle, dass es Online-Tutorials gibt, weil es etwas ziemlich Spezifisches ist.

Eine Informationsquelle, die Sie auf jeden Fall nutzen können, ist Open-Source-Code. Eines, das ich kenne, ist SpicePy - es ist in Python geschrieben, aber es ist sehr gut dokumentiert, obwohl die Python-Sprache an sich sehr beschreibend ist. Sie können eine solche Bibliothek in Ihrem Python-Code oder über den Telegram Bot verwenden .

Was Sie brauchen, ist eine Möglichkeit, die Topologie Ihrer Schaltung zu beschreiben. Ein gängiger Ansatz ist die Verwendung von Netzlisten , die im Wesentlichen Text sind, der jede Komponente in der Schaltung beschreibt und wie sie mit den anderen verbunden ist (z. B. durch Knotennummern). Sie können diese Strategie anwenden oder was auch immer Ihnen einfacher erscheint; Es zu analysieren und daraus ein tatsächliches Diagramm zu machen (dh ist es aussagekräftig?) kann einige Zeit in Anspruch nehmen.

Danach ist eine gängige Methode zur Analyse von Schaltungen in Simulatoren die Knotenanalyse ; Greifen Sie dann auf eine Bibliothek für lineare Algebra zurück, um das Gleichungssystem zu lösen (das sicherlich linear sein wird), z. B. Math.Net .

Ich habe ein Python-basiertes Tool geschrieben , das AC-Signale und Rauschen mit den von SciPy bereitgestellten Sparse-Matrix-Solvern simulieren kann. Es ist ein Open-Source-Projekt, das auf einem Closed-Source-Tool in der Gravitationswellen-Community namens LISO basiert .

Ich habe den Code so strukturiert, dass Sie verschiedene Lösungsbibliotheken erstellen oder verschiedene Analysen erstellen können, die dieselbe Schaltungsdefinition verwenden. Beide derzeit existierenden Analysearten (Signal- und Rauschanalysen) bauen aus den Schaltungskomponenten eine Matrix auf und lösen diese dann für eine gegebene Anregung, z. B. einen Eingang, über einen gegebenen Frequenzbereich auf.

Es ähnelt der Funktionsweise von SPICE und anderen Schaltungssimulatoren für die Knotenanalyse. Ich hoffe, der Code ist relativ einfach zu verstehen.

Hier gibt es einige grundlegende Dokumentationen , die sich jedoch noch in der Entwicklung befinden. Lassen Sie mich wissen, wenn Sie es am Ende verwenden und Fragen zur Funktionsweise haben.

Hier ist ein Beispiel für die unterstützte LISO-Syntax (aber Sie können Schaltkreise auch rein in Python definieren). Es ist ein bisschen wie eine SPICE-Netzliste:

r r1 100 nin nsum
r r3 1.075k no nsum
r r4 42.2 nsum nm
r r6 65 nin gnd
c c2 4.7n nsum gnd
c c5 122p no nm
op op1 op27 gnd nm no

freq log 1 1M 101

uinput nin nsum 50
uoutput no nsum

Der obige Code erzeugt einen Plot wie diesen:

Floating-Voltage-Op-Amp-Schaltung