コードを介して回路を描くことは可能ですか?


17

ネットリストファイルを作成しないほうが良い方法はありますか。何かのようなもの:

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

編集:

答えは非常に役立ちます。コードによって生成された回路をシミュレートする方法があれば素晴らしいでしょう。


5
FWIW、あなたのサンプルコードは私にはネットリストのように見えます。いくつかの部分を定義するだけで(おそらく、それぞれの端末にいくつの端末があるかをツールに伝えるライブラリを使用して)、その後、どの端末が相互に接続されているかを示します。少し使用すると、ノードに名前を付けたり、他の端末ではなくノードに端末を接続したりするのが簡単になるかもしれません。
フォトン

3
多くの被験者にとって、「可能か」と「有用か」の間には大きな隔たりがあります。
-whatsisname

3
HDLを見ているのではないでしょうか。それらは主にデジタル回路について説明していますが、技術的にはそれらに限定されていません(Verilogはそれらをサポートしていると思います)。@ThePhotonで述べたように、あなたが示したものはネットリストのように見えます。これが通常コンパイルされるものです。
マチェイピエチョトカ

2
描画する最良の方法を考えるのに時間がかかるのは、回路をよく理解し、描画を見ている人にその機能を明確にする方法が必要だからです。それはコンピューターが得意なものではないので、コンピューターにあなたのためにそれをするように頼むことはトラブルを求めている。
フォトン

1
この説明をPCBレイアウトツールへの入力として使用することを考えている場合は、人間の読者が使用する必要はありません。その後、回路のトラブルシューティングを行う人(あなた)のドキュメントとして何を使用しますかビルドされるか、後でデザインを変更します。スケマティックエントリを使用する場合、基本的にドキュメントを作成し、それをレイアウトツールへの入力として使用します。これで、レイアウトが実際にドキュメントと一致することがわかりました。
フォトン

回答:


28

Lに精通している場合では、circuitikzを使用して、コードを記述することで素敵な回路を描画できます。LATEバツ

ここに画像の説明を入力してください


その他の例


4
これに追加するには-他の人が言ったように、良い回路図を描くには人間の直感が必要です。ただし、同様の回路を多数描画している場合、laTeXとcircuitikzを使用すると、テンプレートレイアウトを構築し、仕様に合わせてカスタマイズできます。これは、教材を作成するときに使用するアプローチです。
ジョン

2
数字とユニットの間に不足しているスペースはひどいように見えます。
ロング

@Loong必要に応じて、数字と単位の間にいつでもスペースを入れることができます。\ または\,ラテックス数学環境でスペースを追加することができます
-nidhin

1
@Loongこれは明らかにローカライズの問題です。アメリカ人として、数字と単位の間にランダムな余分なスペースがあるのは常に奇妙に思えます。
クリリス

1
@chrylisこれはローカライズの問題ではなく、ISO 80000が指定されているため、排他的に使用する必要があります。
awjlogan

15

SKiDL(https://github.com/xesscorp/skidlをご覧ください)を。これはあなたが考えている通りです。

編集(必要に応じて):SKiDLは、回路図をグラフィカルに入力する代わりに、すべての回路(デジタルではなく)の手順記述を許可します。その後、ネットリスト出力をレイアウトソフトウェアにインポートできます。また、ERCチェックを実行し、拡張可能です。これは、たとえば、フィルターを一度書くと、毎回描画するのではなく、別のプロジェクトで再利用できることを意味します。Pythonで書かれており、それに伴うすべてのサポートが含まれています。


もう少し情報を追加しました。
awjlogan

他のPython回路図描画オプションはSchemDrawlcapyです。
フェニックス

13

多くのプログラムが回路図を描くことができます。私が知っているものはどれも、良い回路図を描くことはできません。最も重要な情報を強調し、回路を明確で理解しやすい方法で配置するものです。

ハードウェア記述言語(グラフィカルな回路図出力なし)を探している場合、VHDLとVerilogは、ICに実装する(デジタル)回路を定義するために広く使用されており、ボードレベルの設計にも使用できます。


Verilog-Aは、アナログ回路の記述とモデリング/シミュレーションにも使用できますが、非商用シミュレーターは知りません。
シャムタム

回路図よりもプログラムで相互接続を記述しやすいボードをいくつか設計しました。プログラムを使用してネットリストを生成し、それをPCBソフトウェアにロードしました。回路図エディタがネットリストをインポートし、まだ「実際の」ワイヤまたは明示的なネットラベルがまだ描画されていない接続のラッツネストを表示できる場合、少なくとも実際のワイヤが作成された回路図の部分でこのような場合に役立ちます「空気線」よりも意味があります。
-supercat

@ Shamtam、Veriolog Aを使用しましたが、シミュレーション言語としてのみ使用しました。Verilog Aの記述から回路を合成できるシステムはありますか?
フォトン

@ThePhoton私が知っていることではありません。「説明する」という用語の使用は、その意味で誤解を招く可能性があると思います。
シャムタム

@シャムタム、私は言葉を心配しません。やはりハードウェア記述言語です。実装ではなく機能を説明するだけです。
フォトン

9

あなたの例は、ブロックの作成とブロック間のポートの接続に基づいたシミュレーション用のオブジェクト指向言語であるmodelicaによく似ています。

電気部品ライブラリ(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;

モデルから回路図を生成できますが、通常、これはGUIで行われ、コンポーネントに位置と方向の情報を注釈します。


4

Cirkuitは、単純なテキスト記述を回路図に変換するエディターです。M4マクロのセットを提供します電気シンボル用のを。

これは、一緒に使用することができますcircuitikzによって示唆されたnidhincircuitikzは、より現代的なpgf / TikZグラフィックシステムを使用します。stackexchangeコミュニティにはcirkuitikzの非常にアクティブなユーザーがいますが、TeXにはさらに多くのソリューションがあります。

ソース:https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/quick.png

https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.htmlからの写真。


3

PSTricksはTeXユーザー向けの別のライブラリです。微分方程式などの複雑な数学的計算も可能です。

\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}

ここに画像の説明を入力してください


2

はい。HDLを使用してコードで回路を記述できます。ベリレーター、ザイリンクス、またはその他のソフトウェアを使用するか、https: //www.edaplayground.com/を使用できます(PCに何もインストールせずにオンラインで動作します) )。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.