是否可以通过代码绘制电路?


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,您的示例代码对我来说就像一个网表。它仅定义了两个部分(可能有一个库告诉工具每个端子有多少个端子),然后说出哪些端子相互连接。如果稍微使用一下,您甚至会发现能够命名节点并将终端连接到节点而不是其他终端更加容易。
Photon

3
对于许多主题而言,“是否可能”和“是否有用”之间存在巨大鸿沟。
whatsisname

3
我认为您可能正在看HDL。尽管它们主要描述数字电路,但从技术上讲,它们并不局限于此(我认为Verilog对它们有一些支持)。正如@ThePhoton所指出的,您所显示的内容看起来像是一个网表,通常是它们被编译成的网表。
Maciej Piechotka

2
之所以需要花时间去思考最佳的绘制方式,是因为您必须对电路有一个很好的了解,以及如何让看图的人清楚其功能。这些都不是计算机擅长的东西,因此,要求计算机为您做这件事会带来麻烦。
Photon

1
如果您只是想将此描述用作pcb布局工具的输入,那么人工阅读器就不必使用它,那么您将用什么作为文档供某人(您)在电路故障排除后使用它已建立,或稍后修改设计。如果使用原理图条目,则实际上是在编写文档,并将其用作布局工具的输入。现在您知道您的布局实际上将与文档匹配。
Photon

Answers:


28

如果您熟悉 ,您可以使用circuitikz通过编写代码来绘制漂亮的电路。LATEX

enter image description here

实例
更多例子


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也可用于描述和建模/仿真模拟电路,尽管我不知道任何非商业仿真器。
沙姆塔姆(Shamtam)

我设计了一些板,用程序比用原理图更容易描述互连。我使用了一个程序来生成网表,然后将其加载到PCB软件中。如果原理图编辑器可以导入网表并显示对尚未绘制“真实”导线或明确的网状标签的连接的最贴切评价,则在这种情况下,这至少会有帮助,至少对于原理图制作真实导线的部分而言比“空气线”更有意义。
超级猫

@Shamtam,我使用了Veriolog A,但仅作为一种仿真语言。是否有可以从Verilog A描述中合成电路的系统?
Photon

@ThePhoton不是我知道的。我想我在这个意义上对“描述”一词的使用可能会产生误导。
沙姆谭(Shamtam)'17

@Shamtam,我不会担心这个词。毕竟,它是一种硬件描述语言。它仅描述功能而不是实现。
Photon

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中完成的,该GUI用位置和方向信息为组件添加注释。



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}

enter image description here


2

是的。您可以使用HDL通过代码描述电路。可以使用verilator,Xilinx或任何其他软件,也可以使用https://www.edaplayground.com/(可在线运行而无需在PC上安装任何东西) )。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.