Ist es möglich, Schaltkreise durch Code zu zeichnen?

17

Gibt es einen besseren Weg, nicht durch das Schreiben von Netzlistendateien. etwas wie:

Define Battery1 As a Battery
Define Resistor1 As a Resistor

Connect Battery1 First Terminal to Resistor1 Second Terminal
Connect Resistor1 First Terminal to Battery1 Second Terminal

BEARBEITEN:

Ich finde die Antworten ziemlich hilfreich. Es ist großartig, wenn es eine Möglichkeit gibt, die vom Code erzeugte Schaltung zu simulieren.

user37421
quelle
5
FWIW, Ihr Beispielcode sieht für mich wie eine Netzliste aus. Es werden nur einige Teile definiert (wobei vermutlich eine Bibliothek dem Tool mitteilt, wie viele Terminals jeweils vorhanden sind) und dann angegeben, welche Terminals miteinander verbunden sind. Wenn Sie es ein wenig benutzt haben, ist es möglicherweise sogar einfacher, Knoten zu benennen und Terminals mit Knoten zu verbinden, als mit anderen Terminals.
Das Photon
3
Es gibt eine große Kluft zwischen "ist es möglich" und "ist es nützlich" für viele Themen.
Whatsisname
3
Ich glaube, Sie schauen sich vielleicht HDL an. Während sie meistens digitale Schaltungen beschreiben, sind sie technisch nicht darauf beschränkt (ich denke, Verilog unterstützt sie etwas). Wie von @ThePhoton bemerkt, sieht das, was Sie gezeigt haben, wie eine Netzliste aus, zu der sie normalerweise kompilieren.
Maciej Piechotka
2
Der Grund, warum es Zeit braucht, um über die beste Art des Zeichnens nachzudenken, ist, dass Sie ein gutes Verständnis der Schaltung haben müssen und wie Sie deren Funktion den Betrachtern der Zeichnung klar machen können. Nichts davon kann ein Computer so gut. Wenn Sie also einen Computer bitten, es für Sie zu tun, müssen Sie Ärger machen.
Das Photon
1
Wenn Sie denken, dass Sie diese Beschreibung nur als Eingabe für das Leiterplattenlayout-Tool verwenden, damit sie nicht von einem menschlichen Leser verwendet werden muss, was werden Sie dann als Dokumentation für jemanden (Sie) verwenden, der die Schaltung nach der Fehlerbehebung überprüft Es wird erstellt oder das Design wird später geändert. Wenn Sie eine schematische Eingabe verwenden, schreiben Sie im Wesentlichen die Dokumentation und verwenden diese als Eingabe für das Layout-Tool. Jetzt wissen Sie, dass Ihr Layout tatsächlich mit der Dokumentation übereinstimmt.
Das Photon

Antworten:

28

Wenn Sie mit L vertraut sind , Sie könnencircuitikz verwenden,um nette Schaltungen zu zeichnen, indem Sie Code schreiben.LEINTEX

Bildbeschreibung hier eingeben

Beispiel .
Mehr Beispiele

Nidhin
quelle
4
Hinzu kommt, dass ein guter Schaltplan, wie andere gesagt haben, eine menschliche Eingebung erfordert. Wenn Sie jedoch viele ähnliche Schaltkreise zeichnen, können Sie mit laTeX und circuitikz ein Vorlagenlayout erstellen und mit bestimmten Optionen anpassen. Dies ist ein Ansatz, den ich bei der Erstellung von Kursmaterialien verwende.
John
2
Der fehlende Raum zwischen der Nummer und dem Gerät sieht schrecklich aus.
Loong
@Loong Sie können jederzeit einen Abstand zwischen Zahlen und Einheiten einfügen, wenn Sie möchten. \ oder \,kann Speicherplatz in Latex-Mathe-Umgebung hinzufügen
Nidhin
1
@Loong Das ist anscheinend ein Lokalisierungsproblem. Als Amerikaner erscheint es immer bizarr, einen zusätzlichen Abstand zwischen Zahlen und Einheiten zu haben.
chrylis -on strike-
1
@chrylis Das ist kein Lokalisierungsproblem, es ist ISO 80000 spezifiziert und sollte ausschließlich verwendet werden.
Awjlogan
15

Schauen Sie sich SKiDL ( https://github.com/xesscorp/skidl ) an.

Bearbeiten (wie erforderlich): SKiDL ermöglicht die prozedurale Beschreibung aller Schaltkreise (anstatt nur digital), anstatt Ihren Schaltplan grafisch einzugeben. Die Netzlistenausgabe kann dann in die Layout-Software importiert werden. Es führt auch ERC-Prüfungen durch und ist erweiterbar. Dies bedeutet beispielsweise, dass Sie einen Filter einmal schreiben und ihn dann in verschiedenen Projekten wiederverwenden können, anstatt jedes Mal zu zeichnen. Geschrieben in Python, mit all der Unterstützung, die damit einhergeht.

awjlogan
quelle
Fügte ein wenig mehr Info hinzu.
Awjlogan
Andere Python-Optionen zum schematischen Zeichnen sind SchemDraw und lcapy .
Phoenix
13

Viele Programme können einen Schaltplan zeichnen. Keiner, den ich kenne, kann einen guten Schaltplan zeichnen: Einer, der die wichtigsten Informationen hervorhebt und die Schaltung klar und leicht verständlich gestaltet.

Wenn Sie nur nach einer Hardwarebeschreibungssprache suchen (keine grafische schematische Ausgabe), werden VHDL und Verilog häufig verwendet, um (digitale) Schaltkreise zu definieren, die in ICs implementiert werden sollen, und können auch für das Board-Level-Design verwendet werden.

Das Photon
quelle
Mit Verilog-A können auch analoge Schaltungen beschrieben und modelliert / simuliert werden, obwohl mir keine nicht-kommerziellen Simulatoren bekannt sind.
Shamtam
Ich habe einige Karten entworfen, bei denen es einfacher war, Zusammenhänge programmgesteuert zu beschreiben als mit einem Schaltplan. Ich habe ein Programm verwendet, um eine Netzliste zu erstellen und diese dann in die PCB-Software zu laden. Wenn ein Schaltplaneditor eine Netzliste importieren und ein Rattenmuster für Verbindungen anzeigen könnte, für die noch keine "echten" Drähte oder expliziten Netzbezeichnungen gezeichnet wurden, könnte dies in solchen Fällen hilfreich sein, zumindest für die Teile des Schaltplans, in denen echte Drähte hergestellt wurden sinnvoller als "Luftdrähte".
Supercat
@Shamtam, ich habe Veriolog A verwendet, aber nur als Simulationssprache. Gibt es Systeme, die eine Schaltung aus einer Verilog A-Beschreibung synthetisieren können?
Das Photon
@ThePhoton Nicht, dass ich es wüsste. Ich nehme an, meine Verwendung des Begriffs "beschreiben" könnte in diesem Sinne irreführend sein.
Shamtam
@Shamtam, ich würde mir keine Sorgen um das Wort machen. Es ist immerhin eine Hardware- Beschreibungssprache . Es beschreibt nur die Funktion und nicht die Implementierung.
Das Photon
9

Ihr Beispiel ähnelt modelica , einer objektorientierten Sprache für die Simulation, die auf dem Erstellen von Blöcken und dem Verbinden von Ports zwischen den Blöcken basiert.

Ein Beispiel mit der Elektrokomponentenbibliothek (von maplesoft.com ),

encapsulated model ChuaCircuit "Chua's circuit, ns, V, A"
  import Modelica.Electrical.Analog.Basic;
  import Modelica.Electrical.Analog.Examples.Utilities;
  import Modelica.Icons;
  extends Icons.Example;

  Basic.Inductor L(L=18);
  Basic.Resistor Ro(R=12.5e-3);
  Basic.Conductor G(G=0.565);
  Basic.Capacitor C1(C=10, v(start=4));
  Basic.Capacitor C2(C=100);
  Utilities.NonlinearResistor Nr(
    Ga(min=-1) = -0.757576,
    Gb(min=-1) = -0.409091,
    Ve=1);
  Basic.Ground Gnd;
equation 
  connect(L.p, G.p);
  connect(G.n, Nr.p);
  connect(Nr.n, Gnd.p);
  connect(C1.p, G.n);
  connect(L.n, Ro.p);
  connect(G.p, C2.p);
  connect(C1.n, Gnd.p);
  connect(C2.n, Gnd.p);
  connect(Ro.n, Gnd.p);
end ChuaCircuit;

Obwohl Sie aus dem Modell einen Schaltplan generieren können, erfolgt dies normalerweise in einer grafischen Benutzeroberfläche, in der die Komponenten mit Positions- und Orientierungsinformationen beschriftet werden.

Pete Kirkham
quelle
4

Cirkuit ist ein Editor zum Konvertieren einer einfachen Textbeschreibung in einen Schaltplan. Es bietet eine Reihe von M4-Makros für elektrische Symbole.

Es kann mit verwendet werden zusammen circuitikz die durch vorgeschlagen wurde nidhin . circuitikz verwendet das modernere Grafiksystem pgf / TikZ . Die stackexchange Community hat sehr aktive Benutzer von cirkuitikz , aber es gibt mehr Lösungen in TeX .

Quelle: https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/quick.png

Bild von https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html .

Jonas Stein
quelle
3

PSTricks ist eine weitere Bibliothek für TeX-Benutzer. Es kann sogar komplizierte mathematische Berechnungen wie Differentialgleichungen durchführen.

\documentclass[pstricks,border=12pt,12pt]{standalone}
\usepackage{pst-eucl,pst-circ}
\psset
{
    dipolestyle=zigzag,
    labelangle=0,
    labeloffset=-.9,
    intensitylabeloffset=-.4,
    tensionstyle=pm,
    tensionoffset=.9,
    tensionlabeloffset=.9,
    %tensioncolor=red,
    %tensionlabelcolor=blue,
}
\begin{document}
\begin{pspicture}[showgrid=none](12,-12)
	\pstGeonode[PosAngle={135,90,45,0,-45,-90,-135,180,45}]
		(2,-2){A}
		(6,-2){B}
		(10,-2){C}
		(10,-6){D}
		(10,-10){E}
		(6,-10){F}
		(2,-10){G}
		(2,-6){H}
		(6,-6){I}
	%
	\resistor[intensitylabel=$i_1$,tensionlabel=$V_{HA}$](H)(A){$R_1$}
	\resistor[tensionlabel=$V_{AB}$](A)(B){$R_2$}
	\vdc[tensionlabel=$V_{BC}$](B)(C){$E_1$}
	\resistor[tensionlabel=$V_{CB}$](C)(D){$R_3$}
	%
	\resistor[intensitylabel=$i_2$,tensionlabel=$V_{HI}$](H)(I){$R_4$}
	\vdc[tensionlabel=$V_{ID}$](I)(D){$E_2$}
	%
	\resistor[intensitylabel=$i_3$,tensionlabel=$V_{HG}$](H)(G){$R_5$}
	\newSwitch[ison=true,tensionlabel=$V_{GF}$](G)(F){$S_2$}
	\wire(F)(E)
	\resistor[tensionlabel=$V_{DE}$,dipoleconvention=generator](E)(D){$R_6$}
	%
	\vdc[tensionlabel=$V_{FI}$,dipoleconvention=generator](I)(F){$E_3$}
	\newSwitch[intensitylabel=$i_4$,tensionlabel=$V_{BI}$,ison=false](B)(I){$S_1$}	
\end{pspicture}
\end{document}

Bildbeschreibung hier eingeben

Geldorientierter Programmierer
quelle
2

Ja. Sie können HDLs verwenden, um Ihre Schaltung durch Code zu beschreiben. Sie können Verilator, Xilinx oder eine andere Software verwenden oder Sie können https://www.edaplayground.com/ verwenden (dies funktioniert online, ohne dass Sie etwas auf Ihrem PC installieren müssen) ).

Shunya
quelle