Apakah mungkin untuk menggambar sirkuit melalui kode?


17

Apakah ada cara yang lebih baik tidak dengan menulis file netlist. sesuatu seperti:

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

EDIT:

Saya menemukan jawabannya cukup membantu. Akan lebih bagus jika ada cara untuk mensimulasikan rangkaian yang dihasilkan oleh kode.


5
FWIW, kode contoh Anda seperti netlist bagi saya. Itu hanya mendefinisikan beberapa bagian (dengan perpustakaan mungkin mengatakan alat berapa banyak terminal masing-masing) dan kemudian mengatakan terminal mana yang terhubung satu sama lain. Jika Anda menggunakannya sedikit, Anda bahkan mungkin merasa lebih mudah untuk dapat memberi nama node dan menghubungkan terminal ke node daripada ke terminal lain.
The Photon

3
Ada jurang pemisah yang lebar antara "apakah mungkin" dan "apakah itu berguna", bagi banyak subjek.
whatsisname

3
Saya pikir Anda mungkin melihat HDL. Walaupun mereka kebanyakan menggambarkan sirkuit digital, secara teknis mereka tidak terbatas pada itu (saya pikir Verilog memiliki beberapa dukungan untuk mereka). Seperti dicatat oleh @ThePhoton apa yang telah Anda tunjukkan terlihat seperti netlist, yang biasanya mereka kompilasi.
Maciej Piechotka

2
Alasan mengapa perlu waktu untuk memikirkan cara terbaik untuk menggambarnya adalah bahwa Anda harus memiliki pemahaman yang baik tentang sirkuit, dan bagaimana membuat fungsinya jelas bagi orang yang melihat gambar. Tidak satu pun dari hal-hal itu yang bisa dikerjakan dengan baik oleh komputer, jadi meminta komputer untuk melakukannya untuk Anda adalah masalah.
The Photon

1
Jika Anda berpikir Anda hanya akan menggunakan deskripsi ini sebagai input ke alat tata letak PCB, sehingga tidak harus digunakan oleh pembaca manusia, lalu apa yang akan Anda gunakan sebagai dokumentasi untuk seseorang (Anda) yang memecahkan masalah rangkaian setelah itu dibangun, atau memodifikasi desain nanti. Jika Anda menggunakan entri skematis, Anda pada dasarnya menulis dokumentasi dan menggunakannya sebagai input ke alat tata letak. Sekarang Anda tahu tata letak Anda akan benar-benar cocok dengan dokumentasi.
The Photon

Jawaban:


28

Jika Anda terbiasa dengan , Anda dapat menggunakancircuitikzuntuk menggambar sirkuit yang bagus dengan menulis kode.L.SEBUAHTEX

masukkan deskripsi gambar di sini

Contoh .
Lebih banyak contoh


4
Untuk menambah ini - seperti yang orang lain katakan menggambar skema yang baik membutuhkan intuisi manusia. Namun Jika Anda menggambar banyak sirkuit serupa maka gunakan laTeX dan circuitikz akan memungkinkan Anda untuk membangun tata letak template dan menyesuaikannya dengan spesifik. Ini adalah pendekatan yang saya gunakan dalam memproduksi materi pelajaran.
John

2
Ruang yang hilang antara nomor dan unit terlihat mengerikan.
Loong

@ Long Anda selalu dapat memberi ruang antara angka dan unit jika Anda mau. \ atau \,dapat menambahkan ruang di lingkungan matematika lateks
nidhin

1
@ Long Itu rupanya masalah lokalisasi. Sebagai orang Amerika, selalu terasa aneh memiliki ruang ekstra acak antara angka dan satuan.
chrylis -on strike-

1
@chrylis Itu bukan masalah pelokalan, ini adalah ISO 80000 yang ditentukan dan harus digunakan secara eksklusif.
awjlogan

15

Lihat SKiDL ( https://github.com/xesscorp/skidl ), ini sesuai dengan yang Anda pikirkan.

Sunting (seperti yang dipersyaratkan): SKiDL memungkinkan uraian prosedural semua sirkuit (bukan hanya digital), alih-alih secara grafis memasukkan skema Anda. Output netlist kemudian dapat diimpor ke perangkat lunak tata letak. Ini juga akan melakukan pemeriksaan ERC, dan dapat diperpanjang. Ini berarti, misalnya, bahwa Anda dapat menulis filter sekali dan kemudian menggunakannya kembali dalam proyek yang berbeda daripada menggambar setiap waktu. Ditulis dengan Python, dengan semua dukungan yang menyertainya.


Menambahkan sedikit info lagi.
awjlogan

Opsi menggambar skematis Python lainnya adalah SchemDraw dan lcapy .
phoenix

13

Banyak program dapat menggambar skema. Tidak ada yang saya tahu dapat menggambar skema yang baik: Yang menekankan informasi paling penting, dan mengatur sirkuit dengan cara yang jelas dan mudah dimengerti.

Jika Anda hanya mencari bahasa deskripsi perangkat keras (tanpa output skematis grafis), VHDL dan Verilog banyak digunakan untuk mendefinisikan sirkuit (digital) yang akan diimplementasikan di IC, dan juga dapat digunakan untuk desain tingkat papan.


Verilog-A dapat digunakan untuk menggambarkan dan memodelkan / mensimulasikan sirkuit analog, juga, meskipun saya tidak mengetahui adanya simulator non-komersial.
Shamtam

Saya telah merancang beberapa papan di mana lebih mudah menggambarkan interkoneksi secara terprogram daripada dengan skema; Saya menggunakan program untuk menghasilkan netlist dan kemudian memuatnya ke perangkat lunak PCB. Jika editor skematis dapat mengimpor netlist dan menunjukkan ratsnest untuk koneksi yang belum memiliki kabel "nyata" atau label net yang ditarik, yang dapat membantu dalam kasus seperti itu, setidaknya untuk bagian skematis di mana kabel nyata dibuat lebih masuk akal dari "kabel udara".
supercat

@Hamtam, saya telah menggunakan Veriolog A, tetapi hanya sebagai bahasa simulasi. Apakah ada sistem yang dapat mensintesis rangkaian dari deskripsi Verilog A?
The Photon

@ThePhoton Bukannya aku sadar. Saya kira penggunaan istilah "menggambarkan" saya bisa menyesatkan dalam arti itu.
Shamtam

@Hamtam, saya tidak akan khawatir tentang kata itu. Bagaimanapun, ini adalah bahasa deskripsi perangkat keras . Itu hanya menjelaskan fungsi daripada implementasi.
The Photon

9

Contoh Anda sangat mirip modelica , bahasa berorientasi objek untuk simulasi berdasarkan pada pembuatan blok dan menghubungkan port antara blok.

Contoh menggunakan perpustakaan komponen listrik (dari 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;

Meskipun Anda dapat menghasilkan skematis dari model, biasanya ini dilakukan dalam GUI yang menjelaskan komponen dengan informasi posisi dan orientasi.


4

Cirkuit adalah editor untuk mengubah deskripsi teks sederhana menjadi diagram sirkuit. Ini menyediakan satu set makro M4 untuk simbol listrik.

Ini dapat digunakan bersama dengan circuitikz yang disarankan oleh nidhin . circuitikz menggunakan sistem grafis pgf / TikZ yang lebih modern . Komunitas stackexchange memiliki pengguna cirkuitikz yang sangat aktif , tetapi ada lebih banyak solusi di TeX .

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

Gambar dari https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html .


3

PSTricks adalah perpustakaan lain untuk pengguna TeX. Bahkan dapat melakukan perhitungan matematika yang rumit seperti persamaan diferensial.

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

masukkan deskripsi gambar di sini


2

Ya. Anda dapat menggunakan HDL untuk menggambarkan sirkuit Anda melalui kode. Anda dapat menggunakan verilator, Xilinx atau perangkat lunak lain atau Anda dapat menggunakan https://www.edaplayground.com/ (yang berfungsi online tanpa harus memasang apa pun di PC Anda ).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.