É possível desenhar circuitos através do código?

17

Existe uma maneira melhor de não escrever arquivos netlist. algo como:

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

EDITAR:

Acho as respostas bastante úteis. Será ótimo se houver uma maneira de simular o circuito produzido pelo código.

user37421
fonte
5
FWIW, seu código de exemplo parece uma netlist para mim. Ele apenas define algumas partes (presumivelmente uma biblioteca informando à ferramenta quantos terminais cada um possui) e depois diz quais terminais estão conectados entre si. Se você o usou um pouco, pode até achar mais fácil nomear nós e conectar terminais a nós do que a outros terminais.
The Photon
3
Existe um grande abismo entre "é possível" e "é útil", para muitos assuntos.
Whatsisname
3
Eu acho que você pode estar olhando para HDL. Enquanto eles descrevem principalmente circuitos digitais, eles não estão tecnicamente limitados a isso (acho que a Verilog tem algum suporte para eles). Conforme observado por @ThePhoton, o que você mostrou parece uma netlist, que é o que eles costumam compilar.
Maciej Piechotka
2
O motivo de levar tempo para pensar sobre a melhor maneira de desenhá-lo é que você precisa ter um bom entendimento do circuito e como tornar sua função clara para as pessoas que olham para o desenho. Nada disso é coisa em que os computadores são bons; portanto, pedir a um computador que faça isso por você está causando problemas.
The Photon
11
Se você está pensando em usar apenas essa descrição como entrada para a ferramenta de layout de placas de circuito impresso, para que não precise ser usada por um leitor humano, então o que você usará como documentação para alguém (você) solucionar problemas do circuito após é construído ou modifica o design posteriormente. Se você usa entrada esquemática, está essencialmente escrevendo a documentação e usando-a como entrada na ferramenta de layout. Agora você sabe que seu layout realmente corresponderá à documentação.
The Photon

Respostas:

28

Se você conhece , você pode usar ocircuitikzpara desenhar bons circuitos escrevendo código.euUMATEX

insira a descrição da imagem aqui

Exemplo .
Mais exemplos

nidhin
fonte
4
Para adicionar a isso - como outros já disseram, desenhar um bom esquema requer alguma intuição humana. No entanto, se você estiver desenhando muitos circuitos semelhantes, o uso do laTeX e do circuitikz permitirá criar um layout de modelo e personalizá-lo com detalhes específicos. É uma abordagem usada na produção de materiais do curso.
John #
2
O espaço que falta entre o número e a unidade parece terrível.
Loong
@ Long Você sempre pode colocar espaço entre números e unidades, se quiser. \ ou \,pode adicionar espaço no ambiente de matemática látex
nidhin
11
@ Longong Isso é aparentemente um problema de localização. Como americano, sempre parece bizarro ter um espaço extra aleatório entre números e unidades.
chrylis -on strike-
11
@chrylis Esse não é um problema de localização, é especificado na ISO 80000 e deve ser usado exclusivamente.
awjlogan
15

Dê uma olhada no SKiDL ( https://github.com/xesscorp/skidl ), é o que você pensa.

Editar (como necessário): o SKiDL permite a descrição processual de todos os circuitos (em vez de apenas digital), em vez de inserir graficamente o seu esquema. A saída do netlist pode ser importada para o software de layout. Ele também executará verificações do ERC e é extensível. Isso significa, por exemplo, que você pode escrever um filtro uma vez e depois reutilizá-lo em projetos diferentes, em vez de desenhar cada vez. Escrito em Python, com todo o suporte que vem junto com isso.

awjlogan
fonte
Adicionado um pouco mais de informação.
awjlogan
Outras opções de desenho esquemático do Python são SchemDraw e lcapy .
Phoenix #:
13

Muitos programas podem desenhar um esquema. Nada que eu conheça pode traçar um bom esquema: um que enfatize as informações mais importantes e organize o circuito de uma maneira clara e fácil de entender.

Se você está apenas procurando uma linguagem de descrição de hardware (sem saída esquemática gráfica), o VHDL e o Verilog são amplamente usados ​​para definir circuitos (digitais) a serem implementados nos CIs, e também podem ser usados ​​para o design no nível da placa.

O fóton
fonte
O Verilog-A também pode ser usado para descrever e modelar / simular circuitos analógicos, embora eu não conheça nenhum simulador não comercial.
Shamtam
Eu projetei algumas placas nas quais era mais fácil descrever interconexões programaticamente do que com um esquema; Eu usei um programa para gerar uma netlist e depois a carreguei no software PCB. Se um editor esquemático pudesse importar uma lista de rede e mostrar um desejo por ratos para conexões que ainda não tinham fios "reais" ou etiquetas de rede explícitas desenhadas, isso poderia ser útil nesses casos, pelo menos para as partes do esquema em que os fios reais foram feitos mais sentido do que "fios de ar".
Supercat
@ Shamtam, eu usei o Veriolog A, mas apenas como uma linguagem de simulação. Existem sistemas que podem sintetizar um circuito a partir de uma descrição do Verilog A?
The Photon
@ ThePhoton Não que eu saiba. Suponho que meu uso do termo "descrever" possa ser enganoso nesse sentido.
21817 Shamtam
@ Shamtam, eu não me preocuparia com a palavra. Afinal, é uma linguagem de descrição de hardware . Apenas descreve a função e não a implementação.
The Photon
9

Seu exemplo se parece muito com modelica , uma linguagem orientada a objetos para simulação com base na criação de blocos e conexão de portas entre os blocos.

Um exemplo usando a biblioteca de componentes elétricos (em 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;

Embora você possa gerar um esquema a partir do modelo, normalmente isso é feito em uma GUI que anota os componentes com informações de posição e orientação.

Pete Kirkham
fonte
4

Cirkuit é um editor para converter uma descrição de texto simples em um diagrama de circuitos. Ele fornece um conjunto de macros M4 para símbolos elétricos.

Pode ser usado em conjunto com o circuitikz, sugerido por nidhin . O circuitikz usa o sistema gráfico pgf / TikZ mais moderno . A comunidade stackexchange possui usuários muito ativos do cirkuitikz , mas existem mais soluções no TeX .

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

Foto de https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html .

Jonas Stein
fonte
3

PSTricks é outra biblioteca para usuários do TeX. Pode até fazer cálculos matemáticos complicados, como equações diferenciais.

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

insira a descrição da imagem aqui

Programador orientado a dinheiro
fonte
2

Sim. Você pode usar HDLs para descrever seu circuito através do código. Você pode usar o verilator, o Xilinx ou qualquer outro software ou o https://www.edaplayground.com/ (que funciona on-line sem precisar instalar nada no seu PC) )

Shunya
fonte