Czy można rysować obwody za pomocą kodu?

17

Czy istnieje lepszy sposób, niż pisanie plików listy sieci. coś jak:

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

EDYTOWAĆ:

Uważam, że odpowiedzi są bardzo pomocne. Świetnie będzie, jeśli istnieje sposób na symulację obwodu wytwarzanego przez kod.

użytkownik37421
źródło
5
FWIW, twój przykładowy kod wygląda dla mnie jak lista sieci. Definiuje tylko kilka części (przypuszczalnie bibliotekę informującą narzędzie, ile terminali ma każdy), a następnie mówi, które terminale są ze sobą połączone. Jeśli użyjesz go nieco, możesz nawet łatwiej nazwać węzły i podłączyć terminale do węzłów, a nie do innych terminali.
Photon
3
W przypadku wielu przedmiotów istnieje szeroka przepaść między „czy to możliwe” a „czy to przydatne”.
whatsisname
3
Myślę, że patrzysz na HDL. Choć w większości opisują obwody cyfrowe, nie są technicznie do nich ograniczone (myślę, że Verilog ma dla nich pewne wsparcie). Jak zauważył @ThePhoton, to, co pokazałeś, wygląda jak lista sieci, do której zwykle się kompilują.
Maciej Piechotka
2
Powodem, dla którego warto pomyśleć o najlepszym sposobie narysowania, jest dobre zrozumienie obwodu i wyjaśnienie jego funkcji osobom oglądającym rysunek. Żadne z tych rzeczy nie są dobre w komputerach, więc poproszenie o komputer, aby to zrobiło, wymaga kłopotów.
Photon
1
Jeśli myślisz, że użyjesz tego opisu jako danych wejściowych do narzędzia do układania płytki drukowanej, więc nie musi on być używany przez czytelnika, to co wykorzystasz jako dokumentację dla kogoś (ciebie) rozwiązującego problem po obwodzie jest zbudowany lub modyfikuje projekt później. Jeśli używasz schematu, w zasadzie piszesz dokumentację i używasz jej jako danych wejściowych do narzędzia układu. Teraz wiesz, że twój układ będzie faktycznie pasował do dokumentacji.
Photon

Odpowiedzi:

28

Jeśli znasz , możesz używaćcircuitikzdo rysowania ładnych obwodów przez pisanie kodu.LATEX

wprowadź opis zdjęcia tutaj

Przykład .
Więcej przykładów

nidhin
źródło
4
Aby dodać do tego - jak powiedzieli inni, rysowanie dobrego schematu wymaga ludzkiej intuicji. Jeśli jednak rysujesz wiele podobnych obwodów, użycie laTeX i circuitikz pozwoli ci zbudować układ szablonu i dostosować go do konkretnych potrzeb. Jest to podejście, którego używam do tworzenia materiałów szkoleniowych.
Jan
2
Brakujące miejsce między liczbą a jednostką wygląda okropnie.
Loong
@Loong W razie potrzeby zawsze możesz umieścić spację między liczbami a jednostkami. \ lub \,może dodać miejsce w środowisku matematyki lateksowej
nidhin
1
@Loong To najwyraźniej problem z lokalizacją. Jako Amerykanin zawsze dziwnie wydaje się mieć losową dodatkową przestrzeń między liczbami a jednostkami.
Chrylis
1
@chrylis To nie jest problem z lokalizacją, jest określony w ISO 80000 i powinien być używany wyłącznie.
awjlogan
15

Sprawdź SKiDL ( https://github.com/xesscorp/skidl ), to jest to, co myślisz.

Edycja (zgodnie z wymaganiami): SKiDL pozwala na opis proceduralny wszystkich obwodów (a nie tylko cyfrowych), zamiast graficznego wprowadzania schematu. Wynik listy sieci można następnie zaimportować do oprogramowania układu. Będzie także przeprowadzać kontrole ERC i jest rozszerzalny. Oznacza to na przykład, że możesz napisać filtr raz, a następnie użyć go w różnych projektach zamiast rysować za każdym razem. Napisane w Pythonie, z całym wsparciem, które się z tym wiąże.

awjlogan
źródło
Dodano trochę więcej informacji.
awjlogan
Inne opcje rysowania schematów w języku Python to SchemDraw i lcapy .
feniks
13

Wiele programów może narysować schemat. Żaden, o którym wiem, nie jest w stanie narysować dobrego schematu: takiego, który podkreśla najważniejsze informacje i układa obwód w jasny i łatwy do zrozumienia sposób.

Jeśli szukasz tylko języka opisu sprzętu (bez graficznego wyjścia schematu), VHDL i Verilog są szeroko stosowane do definiowania (cyfrowych) obwodów, które mają być zaimplementowane w układach scalonych, a także mogą być używane do projektowania na poziomie płytki.

The Photon
źródło
Verilog-A może być również używany do opisywania i modelowania / symulacji obwodów analogowych, chociaż nie znam żadnych niekomercyjnych symulatorów.
Shamtam
Zaprojektowałem kilka płyt, w których łatwiej było programowo opisać połączenia niż na schemacie; Użyłem programu do wygenerowania listy sieci, a następnie załadowałem ją do oprogramowania PCB. Jeśli edytor schematów mógłby zaimportować listę sieci i pokazać najszczersze informacje o połączeniach, w których nie narysowano jeszcze „prawdziwych” drutów lub wyraźnych etykiet sieci, może to być pomocne w takich przypadkach, przynajmniej w częściach schematu, w których wykonano prawdziwe przewody bardziej sensowny niż „przewody powietrzne”.
supercat
@Shamtam, użyłem Veriologu A, ale tylko jako języka symulacji. Czy istnieją systemy, które mogą syntetyzować obwód z opisu Verilog A?
Photon
@ThePhoton Nie jestem tego świadomy. Podejrzewam, że moje użycie terminu „opisać” może być mylące w tym sensie.
Shamtam
@Shamtam, nie martwiłbym się tym słowem. W końcu jest to język opisu sprzętu . Po prostu opisuje funkcję, a nie implementację.
Photon
9

Twój przykład przypomina modelikę , obiektowy język do symulacji oparty na tworzeniu bloków i łączeniu portów między blokami.

Przykład z wykorzystaniem biblioteki komponentów elektrycznych (z 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;

Chociaż można wygenerować schemat na podstawie modelu, zwykle odbywa się to w graficznym interfejsie użytkownika, który adnotuje komponenty informacjami o położeniu i orientacji.

Pete Kirkham
źródło
3

PSTricks to kolejna biblioteka dla użytkowników TeX-a. Może nawet wykonywać skomplikowane obliczenia matematyczne, takie jak równania różniczkowe.

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

wprowadź opis zdjęcia tutaj

Programista zorientowany na pieniądze
źródło
2

Tak. Możesz użyć HDL do opisania swojego obwodu za pomocą kodu. Możesz użyć verilatora, Xilinx lub dowolnego innego oprogramowania lub możesz użyć https://www.edaplayground.com/ (który działa online bez konieczności instalowania czegokolwiek na twoim komputerze ).

Shunya
źródło