Schaltungssimulation erstellen


7

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

Grundsätzlich brauche ich nur Widerstände, Kondensatoren, Induktivitäten und Spannungsquellen.

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


1
Müssen Sie Wechselstrom und Gleichstrom sowie entgegengesetztes und thermisches Rauschen haben?
Analogsystemsrf

1
AC und DC ja, thermisches Rauschen ist mir jetzt nicht so wichtig.
Fitzchivalry

Antworten:


31

Ich habe die Simulations-Engine geschrieben, die CircuitLab von Grund auf antreibt : von der spärlichen Matrixbibliothek bis hin zu Komponentenmodellen und Simulationsmodi. Mein Mitbegründer hat das Frontend geschrieben. Es war ein unglaublich großes Programmierprojekt, auf das ich aber ziemlich stolz bin. Wenn Sie sich der Herausforderung stellen möchten, ist das Schreiben eines Schaltungssimulators möglicherweise eines der lohnendsten Programmierprojekte, 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 Techniken mit geringer Matrix).

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

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


Vielen Dank für diese Antwort und buchen! Können Sie aus Neugier als Schätzung sagen, wie viele Codezeilen es letztendlich waren?
user1584421

2

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

Eine Informationsquelle, die Sie definitiv verwenden 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 für sich genommen sehr beschreibend ist. Sie können eine solche Bibliothek in Ihrem Python-Code oder über den Telegramm-Bot verwenden .

Was Sie brauchen, ist eine Art, die Topologie Ihrer Schaltung zu beschreiben. Ein gängiger Ansatz ist die Verwendung von Netzlisten , bei denen es sich im Wesentlichen um Text handelt, der jede Komponente in der Schaltung beschreibt und wie sie mit den anderen verbunden ist (z. B. über Knotennummern). Sie können diese Strategie anwenden oder was auch immer für Sie einfacher zu sein scheint. Das Parsen und Erstellen eines tatsächlichen Diagramms (dh ist es sinnvoll?) kann einige Zeit in Anspruch nehmen.

Danach ist eine übliche Methode zur Analyse von Schaltkreisen in Simulatoren die Knotenanalyse . Greifen Sie dann auf eine lineare Algebra-Bibliothek zurück, um das Gleichungssystem (das sicherlich linear sein wird) wie Math.Net zu lösen .


1

Ich habe einen Spice-basierten Schaltungssimulator für .NET und Mono namens Spice # geschrieben . Der Hauptunterschied zu den meisten Simulatoren, die Sie dort feststellen werden, ist:

  • 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 enthält auch eine Dokumentation mit Informationen darüber, wie der Simulator (wie Spice) die Modified Nodal Analysis (MNA) durchführt . Daher glaube ich, dass dieses Thema für Sie von Interesse sein könnte.


0

Ich habe ein Python-basiertes Tool geschrieben , das mit den von SciPy bereitgestellten Sparse-Matrix-Solvern Wechselstromsignale und Rauschen 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 Analysetypen, die zum Zeitpunkt des Schreibens existieren (Signal- und Rauschanalysen), bilden eine Matrix aus den Schaltungskomponenten und lösen sie dann für eine bestimmte Anregung, z. B. einen Eingang, über einen bestimmten Frequenzbereich.

Es ähnelt der Funktionsweise von SPICE und anderen Knotenanalyseschaltungssimulatoren. Ich hoffe, der Code ist relativ einfach zu verstehen.

Es gibt einige grundlegende Dokumentation hier , aber es ist immer noch in der Entwicklung. Lassen Sie mich wissen, wenn Sie es am Ende verwenden und Fragen dazu haben, wie es funktioniert.

Hier ist ein Beispiel für die unterstützte LISO-Syntax (Sie können Schaltkreise aber auch nur 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 eine Darstellung wie folgt:

Floating Voltage Op-Amp-Schaltung

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.