Có thể vẽ mạch thông qua mã?


17

Có cách nào tốt hơn không bằng cách viết các tập tin netlist. cái gì đó như:

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

BIÊN TẬP:

Tôi thấy câu trả lời khá hữu ích. Sẽ thật tuyệt nếu có một cách để mô phỏng mạch được sản xuất bởi mã.


5
FWIW, mã ví dụ của bạn trông giống như một netlist đối với tôi. Nó chỉ định nghĩa một vài phần (có lẽ là một thư viện cho công cụ biết mỗi thiết bị có bao nhiêu thiết bị đầu cuối) và sau đó cho biết thiết bị đầu cuối nào được kết nối với nhau. Nếu bạn đã sử dụng nó một chút, bạn thậm chí có thể thấy việc đặt tên cho các nút và kết nối các thiết bị đầu cuối với các nút dễ dàng hơn là với các thiết bị đầu cuối khác.
Photon

3
Có một khoảng cách rộng giữa "có thể" và "có hữu ích không" đối với nhiều đối tượng.
tên gì

3
Tôi nghĩ rằng bạn có thể đang xem HDL. Mặc dù chúng chủ yếu mô tả các mạch kỹ thuật số nhưng chúng không bị giới hạn về mặt kỹ thuật như vậy (tôi nghĩ Verilog có một số hỗ trợ cho chúng). Theo ghi nhận của @ThePhoton, những gì bạn đã thể hiện trông giống như một netlist, đó là những gì họ thường biên dịch.
Maciej Piechotka

2
Lý do cần có thời gian để suy nghĩ về cách tốt nhất để vẽ nó là bạn phải hiểu rõ về mạch điện và cách làm cho chức năng của nó rõ ràng với mọi người khi nhìn vào bản vẽ. Không ai trong số đó là thứ mà máy tính giỏi, vì vậy yêu cầu một máy tính làm điều đó cho bạn là yêu cầu rắc rối.
Photon

1
Nếu bạn nghĩ rằng bạn sẽ chỉ sử dụng mô tả này làm đầu vào cho công cụ bố trí pcb, vì vậy nó không phải được sử dụng bởi người đọc, thì bạn sẽ sử dụng tài liệu nào cho ai đó (bạn) khắc phục sự cố mạch sau nó được xây dựng hoặc sửa đổi thiết kế sau này. Nếu bạn sử dụng mục nhập sơ đồ, về cơ bản bạn đang viết tài liệu và sử dụng đó làm đầu vào cho công cụ bố trí. Bây giờ bạn biết bố trí của bạn sẽ thực sự phù hợp với tài liệu.
Photon

Câu trả lời:


28

Nếu bạn đã quen thuộc với , bạn có thể sử dụng Circuitikz để vẽ các mạch đẹp bằng cách viết mã.LATEX

nhập mô tả hình ảnh ở đây

Ví dụ .
Thêm ví dụ


4
Để thêm vào điều này - như những người khác đã nói vẽ một sơ đồ tốt đòi hỏi một số trực giác của con người. Tuy nhiên Nếu bạn đang vẽ nhiều mạch tương tự thì sử dụng laTeX và Circuitikz sẽ cho phép bạn xây dựng bố cục mẫu và tùy chỉnh nó với các chi tiết cụ thể. Đây là cách tiếp cận tôi sử dụng trong sản xuất tài liệu khóa học.
Giăng

2
Khoảng trống giữa số và đơn vị trông thật khủng khiếp.
Loong

@Loong Bạn luôn có thể đặt khoảng trắng giữa số và đơn vị nếu bạn muốn. \ hoặc \,có thể thêm không gian trong môi trường toán học latex
nidhin

1
@Loong Đó rõ ràng là một vấn đề nội địa hóa. Là một người Mỹ, dường như luôn có sự kỳ quái khi có thêm không gian ngẫu nhiên giữa các con số và đơn vị.
chrylis -on đình công-

1
@chrylis Đó không phải là vấn đề nội địa hóa, đó là ISO 80000 được chỉ định và nên được sử dụng riêng.
awjlogan

15

Hãy xem SKiDL ( https://github.com/xesscorp/skidl ), đây là dòng bạn đang nghĩ.

Chỉnh sửa (dưới dạng req'd): SKiDL cho phép mô tả thủ tục của tất cả các mạch (thay vì chỉ là kỹ thuật số), thay vì đồ họa vào sơ đồ của bạn. Đầu ra netlist sau đó có thể được nhập vào phần mềm bố trí. Nó cũng sẽ thực hiện kiểm tra ERC và có thể mở rộng. Điều này có nghĩa là, ví dụ, bạn có thể viết bộ lọc một lần và sau đó sử dụng lại nó trong các dự án khác nhau thay vì vẽ mỗi lần. Được viết bằng Python, với tất cả sự hỗ trợ đi kèm với điều đó.


Thêm một chút thông tin.
awjlogan

Các tùy chọn vẽ sơ đồ Python khác là SchemDrawlcacco .
phượng hoàng

13

Nhiều chương trình có thể vẽ sơ đồ. Không ai mà tôi biết có thể vẽ một sơ đồ tốt: Một trong đó nhấn mạnh thông tin quan trọng nhất, và sắp xếp mạch theo cách rõ ràng và dễ hiểu.

Nếu bạn chỉ tìm kiếm một ngôn ngữ mô tả phần cứng (không có đầu ra sơ đồ đồ họa), VHDL và Verilog được sử dụng rộng rãi để xác định các mạch (kỹ thuật số) được triển khai trong IC và cũng có thể được sử dụng cho thiết kế cấp bảng.


Verilog-A cũng có thể được sử dụng để mô tả và mô hình hóa / mô phỏng các mạch tương tự, mặc dù tôi không biết về bất kỳ trình giả lập phi thương mại nào.
Shamtam

Tôi đã thiết kế một số bảng trong đó dễ dàng mô tả các kết nối theo chương trình hơn là với sơ đồ; Tôi đã sử dụng một chương trình để tạo một netlist và sau đó tải nó vào phần mềm PCB. Nếu một trình soạn thảo sơ đồ có thể nhập một danh sách mạng và hiển thị một ratsnest cho các kết nối chưa có dây "thực" hoặc nhãn mạng rõ ràng được vẽ, điều đó có thể hữu ích trong các trường hợp như vậy, ít nhất là cho các phần của sơ đồ nơi dây thực sự được tạo ra ý nghĩa hơn "dây không khí".
supercat

@Shamtam, tôi đã sử dụng Veriolog A, nhưng chỉ là ngôn ngữ mô phỏng. Có hệ thống nào có thể tổng hợp một mạch từ mô tả Verilog A không?
Photon

@ThePhoton Không phải tôi biết. Tôi cho rằng việc sử dụng thuật ngữ "mô tả" của tôi có thể gây hiểu nhầm theo nghĩa đó.
Shamtam

@Shamtam, tôi sẽ không lo lắng về từ này. Nó là một ngôn ngữ mô tả phần cứng sau khi tất cả. Nó chỉ mô tả chức năng chứ không phải là việc thực hiện.
Photon

9

Ví dụ của bạn trông rất giống modelica , một ngôn ngữ hướng đối tượng để mô phỏng dựa trên việc tạo các khối và kết nối các cổng giữa các khối.

Một ví dụ sử dụng thư viện thành phần điện (từ 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;

Mặc dù bạn có thể tạo sơ đồ từ mô hình, nhưng thông thường, điều này được thực hiện trong GUI chú thích các thành phần có thông tin vị trí và hướng.


4

Cirkuit là một trình soạn thảo để chuyển đổi một mô tả văn bản đơn giản thành sơ đồ mạch. Nó cung cấp một bộ macro M4 cho các biểu tượng điện.

Nó có thể được sử dụng cùng với circuitikz được đề xuất bởi nidhin . Circuitikz sử dụng hệ thống đồ họa pgf / TikZ hiện đại hơn . Cộng đồng stackexchange có người dùng rất tích cực của cirkuitikz , nhưng có nhiều giải pháp hơn trong TeX .

Nguồn: https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/quick.png

Ảnh từ https://ece.uwaterloo.ca/~aplevich/Circuit_macros/html/examples.html .


3

PSTricks là một thư viện khác cho người dùng TeX. Nó thậm chí có thể làm phép tính toán phức tạp như phương trình vi phân.

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

nhập mô tả hình ảnh ở đây


2

Có. Bạn có thể sử dụng HDL để mô tả mạch của mình thông qua mã. Bạn có thể sử dụng trình xác minh, Xilinx hoặc bất kỳ phần mềm nào khác hoặc bạn có thể sử dụng https://www.edaplayground.com/ (hoạt động trực tuyến mà không cần phải cài đặt bất cứ thứ gì trên PC của bạn ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.