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?
simulation
programming
Fitzchivalry
quelle
quelle
Antworten:
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:
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.
quelle
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 .
quelle
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:
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.
quelle
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:
Der obige Code erzeugt eine Darstellung wie folgt:
quelle