¿Es posible dibujar circuitos a través del código?


17

¿Hay una mejor manera no escribiendo archivos 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:

Las respuestas me parecen bastante útiles. Será genial si hay una manera de simular el circuito producido por el código.


55
FWIW, tu código de ejemplo me parece una lista de red. Simplemente define un par de partes (presumiblemente una biblioteca que le dice a la herramienta cuántos terminales tiene cada una) y luego dice qué terminales están conectadas entre sí. Si lo usó un poco, incluso podría encontrar que es más fácil poder nombrar nodos y conectar terminales a nodos en lugar de a otros terminales.
The Photon

3
Existe un gran abismo entre "es posible" y "es útil" para muchas materias.
whatsisname

3
Creo que podrías estar viendo HDL. Si bien en su mayoría describen circuitos digitales, técnicamente no están limitados a ellos (creo que Verilog tiene algún soporte para ellos). Como señaló @ThePhoton, lo que ha mostrado parece una lista de red, que es a lo que generalmente se compilan.
Maciej Piechotka

2
La razón por la que lleva tiempo pensar en la mejor manera de dibujarlo es que debes tener una buena comprensión del circuito y cómo dejar en claro su función para las personas que miran el dibujo. Nada de eso es algo en lo que las computadoras sean buenas, por lo que pedirle a una computadora que lo haga por ti es un problema.
The Photon

1
Si está pensando que solo usará esta descripción como entrada para la herramienta de diseño de pcb, para que no tenga que ser utilizada por un lector humano, entonces, ¿qué usará como documentación para que alguien (usted) solucione el circuito después de está construido o modificando el diseño más tarde. Si usa una entrada esquemática, esencialmente está escribiendo la documentación y usándola como entrada para la herramienta de diseño. Ahora sabe que su diseño realmente coincidirá con la documentación.
The Photon

Respuestas:


28

Si estás familiarizado con , puedes usarcircuitikzpara dibujar circuitos agradables escribiendo código.LUNTmiX

ingrese la descripción de la imagen aquí

Ejemplo .
Más ejemplos


44
Para agregar a esto, como otros han dicho, dibujar un buen esquema requiere cierta intuición humana. Sin embargo, si está dibujando muchos circuitos similares, el uso de laTeX y circuitikz le permitirá construir un diseño de plantilla y personalizarlo con detalles específicos. Es un enfoque que uso en la producción de materiales del curso.
John

2
El espacio que falta entre el número y la unidad se ve terrible.
Loong

@Loong Siempre puede poner espacio entre números y unidades si lo desea. \ o \,puede agregar espacio en el entorno matemático de látex
nidhin

1
@Loong Eso aparentemente es un problema de localización. Como estadounidense, siempre parece extraño tener espacio adicional aleatorio entre números y unidades.
chrylis -on strike-

1
@chrylis Eso no es un problema de localización, está especificado en ISO 80000 y debe usarse exclusivamente.
awjlogan

15

Echa un vistazo a SKiDL ( https://github.com/xesscorp/skidl ), esto es lo que estás pensando.

Editar (como se requiere): SKiDL permite la descripción de procedimientos de todos los circuitos (en lugar de solo digital), en lugar de ingresar gráficamente su esquema. La salida de netlist se puede importar al software de diseño. También realizará comprobaciones de ERC y es extensible. Esto significa, por ejemplo, que podría escribir un filtro una vez y luego reutilizarlo en diferentes proyectos en lugar de dibujarlo cada vez. Escrito en Python, con todo el soporte que viene con eso.


Se agregó un poco más de información.
awjlogan

Otras opciones de dibujo esquemático de Python son SchemDraw y lcapy .
Phoenix

13

Muchos programas pueden dibujar un esquema. Ninguno que yo sepa puede dibujar un buen esquema: uno que enfatice la información más importante y organice el circuito de una manera clara y fácil de entender.

Si solo está buscando un lenguaje de descripción de hardware (sin salida de esquema gráfico), VHDL y Verilog se usan ampliamente para definir circuitos (digitales) para implementar en circuitos integrados, y también se pueden usar para el diseño a nivel de placa.


Verilog-A también se puede utilizar para describir y modelar / simular circuitos analógicos, aunque no conozco ningún simulador no comercial.
Shamtam

He diseñado algunas placas donde era más fácil describir las interconexiones mediante programación que con un esquema; Usé un programa para generar una lista de red y luego la cargué en el software de PCB. Si un editor de esquemas pudiera importar una lista de redes y mostrar un ratsnest para conexiones que aún no tenían cables "reales" o etiquetas de red explícitas, eso podría ser útil en tales casos, al menos para las partes del esquema donde se hicieron los cables reales más sentido que "cables de aire".
supercat

@Shamtam, he usado Veriolog A, pero solo como lenguaje de simulación. ¿Existen sistemas que puedan sintetizar un circuito a partir de una descripción de Verilog A?
The Photon

@ThePhoton No que yo sepa. Supongo que mi uso del término "describir" podría ser engañoso en ese sentido.
Shamtam

@Shamtam, no me preocuparía la palabra. Es un lenguaje de descripción de hardware después de todo. Simplemente describe la función en lugar de la implementación.
The Photon

9

Tu ejemplo se parece mucho a modelica , un lenguaje orientado a objetos para simulación basado en la creación de bloques y la conexión de puertos entre los bloques.

Un ejemplo usando la biblioteca de componentes eléctricos (de 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;

Aunque puede generar un esquema a partir del modelo, normalmente esto se hace en una GUI que anota los componentes con información de posición y orientación.


4

Cirkuit es un editor para convertir una descripción de texto simple en un diagrama de circuito. Proporciona un conjunto de macros M4 para símbolos eléctricos.

Se puede usar junto con circuitikz que fue sugerido por nidhin . circuitikz utiliza el sistema gráfico pgf / TikZ más moderno . La comunidad stackexchange tiene usuarios muy activos de cirkuitikz , pero hay más soluciones en TeX .

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

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


3

PSTricks es otra biblioteca para usuarios de TeX. Incluso puede hacer cálculos matemáticos complicados, como ecuaciones diferenciales.

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

ingrese la descripción de la imagen aquí


2

Sí. Puede usar HDL para describir su circuito a través del código. Puede usar verilator, Xilinx o cualquier otro software o puede usar https://www.edaplayground.com/ (que funciona en línea sin tener que instalar nada en su PC )

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.