0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SkiDL:使用 Python 設(shè)計(jì)電路原理圖

KiCad ? 來(lái)源:KiCad ? 作者:KiCad ? 2024-12-09 11:21 ? 次閱讀

持續(xù)更新 8 年,Github 超過(guò) 1k star 的項(xiàng)目。一種使用文本替代原理圖的語(yǔ)言。

追蹤 skidl 項(xiàng)目很久了,之所以之前沒(méi)有分享是因?yàn)槔习姹局荒苤С?KiCad 5.0 符號(hào)庫(kù)的解析,而且生成的網(wǎng)表也僅能支持 KiCad 6,所以用起來(lái)比較麻煩。最近作者又更新了一個(gè)大版本,全面支持 KiCad 7 和 KiCad 8,雖然仍有一些問(wèn)題,但跑起來(lái)比之前方便了很多。AI 時(shí)代的到來(lái),讓自動(dòng)化設(shè)計(jì)又多了一個(gè)研究的方向。由于 skidl 的設(shè)計(jì)初衷就是用文本描述原理圖,這對(duì)于機(jī)器學(xué)習(xí)來(lái)說(shuō)無(wú)疑是非常合適的!感興趣的小伙伴趕緊學(xué)習(xí)起來(lái)吧,有興趣進(jìn)一步討論的也可以私信我或留言。

SKiDL 簡(jiǎn)介

通過(guò) SKiDL Python 軟件包,您可以用文本描述電子元件之間的連接。生成的 Python 程序可對(duì)常見(jiàn)錯(cuò)誤進(jìn)行電氣規(guī)則檢查,并輸出網(wǎng)表,作為 PCB Layout 工具的輸入。
  • 項(xiàng)目主頁(yè):https://github.com/devbisme/skidl

  • License MIT

  • 文檔:http://devbisme.github.io/skidl

  • 用戶論壇https://github.com/devbisme/skidl/discussions

skidl 希望做到的,提供一個(gè)選項(xiàng),既可以通過(guò)傳統(tǒng)方式設(shè)計(jì)原理圖(下圖一),也可以用代碼的方式實(shí)現(xiàn)(下圖二):

wKgZomcy1nyARFGbAAFoqISuyAM789.png

wKgZomcy1nyAYZHsAAFIdOWwVv0704.png

功能
  • 語(yǔ)法強(qiáng)大、靈活(因?yàn)樗?Python)。

  • 允許對(duì)電子電路進(jìn)行簡(jiǎn)潔描述(想象一下不需要在多頁(yè)原理圖中追蹤信號(hào))。

  • 允許對(duì)電子電路進(jìn)行文本描述(想想在電路中使用 diff和 git)。

  • 針對(duì)常見(jiàn)錯(cuò)誤(如未連接器件的 I/O 引腳)執(zhí)行電氣規(guī)則檢查 (ERC)。

  • 支持電子設(shè)計(jì)的平鋪/分層/混合描述。

  • 支持設(shè)計(jì)復(fù)用(想象一下使用 PyPi 和 Github 發(fā)布電子設(shè)計(jì))。

  • 可創(chuàng)建智能電路模塊,這些模塊的行為/結(jié)構(gòu)可通過(guò)參數(shù)改變(想想濾波器,其元件值可根據(jù)你所需的截止頻率自動(dòng)調(diào)整)。

  • 可與任何 ECAD 工具配合使用(只需兩種方法:一種用于讀取元件庫(kù),另一種用于輸出正確的網(wǎng)表格式)。

  • 可執(zhí)行 SPICE 仿真(僅限 Python 3)。

  • 充分利用 Python 生態(tài)系統(tǒng)的所有優(yōu)勢(shì)(因?yàn)樗?Python)。

舉例

下面的 SKiDL 程序描述了一個(gè)由分立晶體管構(gòu)建的雙輸入 AND 門,作為一個(gè)非常簡(jiǎn)單的例子:

wKgZomcy1nyAMyLcAAAuU2yLA6k566.png

from skidl import *
# Create part templates.q = Part("Device", "Q_PNP_CBE", dest=TEMPLATE)r = Part("Device", "R", dest=TEMPLATE)
# Create nets.gnd, vcc = Net("GND"), Net("VCC")a, b, a_and_b = Net("A"), Net("B"), Net("A_AND_B")
# Instantiate parts.gndt = Part("power", "GND")             # Ground terminal.vcct = Part("power", "VCC")             # Power terminal.q1, q2 = q(2)                           # Two transistors.r1, r2, r3, r4, r5 = r(5, value="10K")  # Five 10K resistors.
# Make connections between parts.a & r1 & q1["B C"] & r4 & q2["B C"] & a_and_b & r5 & gndb & r2 & q1["B"]q1["C"] & r3 & gndvcc += q1["E"], q2["E"], vcctgnd += gndt
generate_netlist(tool=KICAD8) # Create KICAD version 8 netlist.
以下是輸出的網(wǎng)表,可以直接在 KiCad 中導(dǎo)入:
(export (version D)  (design    (source "/home/devb/projects/KiCad/tools/skidl/tests/examples/svg/simple_and_gate.py")    (date "07/19/2024 05:54 AM")    (tool "SKiDL (1.2.2)"))  (components    (comp (ref #PWR1)      (value GND)      (footprint )      (fields        (field (name F0) #PWR)        (field (name F1) GND))      (libsource (lib power) (part GND))      (sheetpath (names /top/18388231966295430075) (tstamps /top/18388231966295430075)))    (comp (ref #PWR2)      (value VCC)      (footprint )      (fields        (field (name F0) #PWR)        (field (name F1) VCC))      (libsource (lib power) (part VCC))      (sheetpath (names /top/12673122245445984714) (tstamps /top/12673122245445984714)))    (comp (ref Q1)      (value Q_PNP_CBE)      (footprint )      (fields        (field (name F0) Q)        (field (name F1) Q_PNP_CBE))      (libsource (lib Device) (part Q_PNP_CBE))      (sheetpath (names /top/5884947020177711792) (tstamps /top/5884947020177711792)))    (comp (ref Q2)      (value Q_PNP_CBE)      (footprint )      (fields        (field (name F0) Q)        (field (name F1) Q_PNP_CBE))      (libsource (lib Device) (part Q_PNP_CBE))      (sheetpath (names /top/12871193304116279102) (tstamps /top/12871193304116279102)))    (comp (ref R1)      (value 10K)      (footprint )      (fields        (field (name F0) R)        (field (name F1) R))      (libsource (lib Device) (part R))      (sheetpath (names /top/17200003438453088695) (tstamps /top/17200003438453088695)))    (comp (ref R2)      (value 10K)      (footprint )      (fields        (field (name F0) R)        (field (name F1) R))      (libsource (lib Device) (part R))      (sheetpath (names /top/12314015795656540138) (tstamps /top/12314015795656540138)))    (comp (ref R3)      (value 10K)      (footprint )      (fields        (field (name F0) R)        (field (name F1) R))      (libsource (lib Device) (part R))      (sheetpath (names /top/11448722674936198910) (tstamps /top/11448722674936198910)))    (comp (ref R4)      (value 10K)      (footprint )      (fields        (field (name F0) R)        (field (name F1) R))      (libsource (lib Device) (part R))      (sheetpath (names /top/2224275500810828611) (tstamps /top/2224275500810828611)))    (comp (ref R5)      (value 10K)      (footprint )      (fields        (field (name F0) R)        (field (name F1) R))      (libsource (lib Device) (part R))      (sheetpath (names /top/3631169005149914336) (tstamps /top/3631169005149914336))))  (nets    (net (code 1) (name A)      (node (ref R1) (pin 1)))    (net (code 2) (name A_AND_B)      (node (ref Q2) (pin 1))      (node (ref R5) (pin 1)))    (net (code 3) (name B)      (node (ref R2) (pin 1)))    (net (code 4) (name GND)      (node (ref #PWR1) (pin 1))      (node (ref R3) (pin 2))      (node (ref R5) (pin 2)))    (net (code 5) (name N$1)      (node (ref Q1) (pin 2))      (node (ref R1) (pin 2))      (node (ref R2) (pin 2)))    (net (code 6) (name N$2)      (node (ref Q1) (pin 1))      (node (ref R3) (pin 1))      (node (ref R4) (pin 1)))    (net (code 7) (name N$3)      (node (ref Q2) (pin 2))      (node (ref R4) (pin 2)))    (net (code 8) (name VCC)      (node (ref #PWR2) (pin 1))      (node (ref Q1) (pin 3))      (node (ref Q2) (pin 3)))))

注意事項(xiàng)

skidl 在 Windows 上運(yùn)行的時(shí)候經(jīng)常會(huì)碰到問(wèn)題。最常見(jiàn)的問(wèn)題是沒(méi)有正確設(shè)置符號(hào)庫(kù)的環(huán)境變量,導(dǎo)致無(wú)法找到符號(hào)庫(kù),解析錯(cuò)誤。這個(gè)錯(cuò)誤可以在代碼中加入以下語(yǔ)句解決:

os.environ["KICAD8_SYMBOL_DIR"] = "C:\symbols"
“=” 號(hào)后面的路徑為實(shí)際的符號(hào)路徑。 如果您使用的不是 KiCad 8,而是其他版本的 KiCad,那么最好設(shè)置一下默認(rèn)工具:
set_default_tool(KICAD8)
同樣的,輸出網(wǎng)表的時(shí)候也要指定網(wǎng)表的版本(K8/K7/K6 網(wǎng)表格式有變動(dòng)):
generate_netlist(tool=KICAD8)
此外, 目前版本的 skidl 還可以直接生成原理圖和 PCB,但功能尚不完備,環(huán)境配置比較復(fù)雜,建議編程基礎(chǔ)較好的小伙伴嘗試。

結(jié)束語(yǔ)

skidl 的具體使用方式,這里就不再贅述了,有興趣的小伙伴可以自行閱讀 skidl 的文檔,遇到問(wèn)題也可以搜索倉(cāng)庫(kù)中的 issue 和 forum,作者 Dave 也非常樂(lè)意與大家互動(dòng),解答大家的問(wèn)題。 最后總結(jié)一下 skidl 做了什么:用 python 代碼實(shí)現(xiàn)圖形界面的原理圖設(shè)計(jì)。具體的實(shí)現(xiàn)方式為:
  1. 通過(guò)環(huán)境變量找到需要使用的原理圖符號(hào),parse出符號(hào)的引腳編號(hào)(名稱)
  2. 在文本編輯器(或IDE)中使用編程語(yǔ)言連接這些管腳
  3. 生成 KiCad 格式的網(wǎng)表

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 電路原理圖
    +關(guān)注

    關(guān)注

    40

    文章

    347

    瀏覽量

    38333
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84682
  • KiCAD
    +關(guān)注

    關(guān)注

    4

    文章

    160

    瀏覽量

    8760
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    電路原理圖的看法

    電路原理圖的看法   電器修理、電路設(shè)計(jì)都是要通過(guò)分析電路原理圖,了解電器的功能和工作原理,才能得心應(yīng)手開(kāi)展工作的。作
    發(fā)表于 12-03 13:49 ?2688次閱讀

    PDA電路原理圖

    PDA電路原理圖 MC68VZ328方案開(kāi)發(fā)板原理圖
    發(fā)表于 09-24 16:02 ?168次下載

    modem電路原理圖

    modem電路原理圖
    發(fā)表于 01-14 21:57 ?3712次閱讀
    modem<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>

    電源電原理圖電路圖

    電源電原理圖電路圖
    發(fā)表于 06-12 09:01 ?1430次閱讀
    電源電<b class='flag-5'>原理圖</b><b class='flag-5'>電路圖</b>

    PFC主電路原理圖

    PFC主電路原理圖 PFC主電路原理圖 如圖所
    發(fā)表于 07-17 10:36 ?2w次閱讀
    PFC主<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>

    電路原理圖

    電路原理圖 電路原理圖
    發(fā)表于 07-21 16:55 ?2373次閱讀

    RCD電路原理圖

    RCD電路原理圖 反激開(kāi)關(guān)過(guò)程和RCD電路的影響
    發(fā)表于 11-21 11:09 ?9043次閱讀

    如何快速的讀懂電路原理圖?

    如何快速的讀懂電路原理圖? 如何快速的讀懂電路原理圖,關(guān)鍵是要掌握其要點(diǎn), 要分析電路圖的原理,   初學(xué)人員要分析電子
    發(fā)表于 12-01 10:51 ?3347次閱讀

    電壓頻率計(jì)數(shù)電路原理圖

    下圖為:電壓頻率計(jì)數(shù)電路原理圖 電壓頻率計(jì)數(shù)電路原理圖
    發(fā)表于 05-28 09:46 ?3098次閱讀
    電壓頻率計(jì)數(shù)<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>

    無(wú)線遙控發(fā)射和接收電路原理圖

    下圖為無(wú)線遙控發(fā)射和接收電路原理圖 1 無(wú)線遙控發(fā)射電路原理圖 2 無(wú)線遙控接收
    發(fā)表于 05-29 13:01 ?4.7w次閱讀
    無(wú)線遙控發(fā)射和接收<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>

    電平轉(zhuǎn)換電路原理圖

    電平轉(zhuǎn)換電路原理圖如下圖所示: 電平轉(zhuǎn)換電路原理圖
    發(fā)表于 07-11 13:51 ?9872次閱讀
    電平轉(zhuǎn)換<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>

    開(kāi)關(guān)電源電路原理圖(PCB+原理圖

    電子發(fā)燒友網(wǎng)站提供《開(kāi)關(guān)電源電路原理圖(PCB+原理圖).doc》資料免費(fèi)下載
    發(fā)表于 12-18 11:50 ?579次下載

    開(kāi)源工具SkiDL - 用Python來(lái)描述電路

    SKiDL 是一個(gè)模塊,允許您使用 Python 緊湊地描述電子電路和組件的互連。 生成的 Python 程序執(zhí)行電氣規(guī)則檢查以查找常見(jiàn)錯(cuò)誤并輸出用作 PCB 布局工具輸入的網(wǎng)表。
    的頭像 發(fā)表于 10-30 10:07 ?2804次閱讀
    開(kāi)源工具<b class='flag-5'>SkiDL</b> - 用<b class='flag-5'>Python</b>來(lái)描述<b class='flag-5'>電路</b>

    外圍電路原理圖

    附錄:外圍電路原理圖免費(fèi)下載。
    發(fā)表于 06-08 14:41 ?12次下載
    外圍<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>

    動(dòng)態(tài)電路原理圖分享

    動(dòng)態(tài)電路原理圖分享
    的頭像 發(fā)表于 01-30 17:55 ?3963次閱讀
    動(dòng)態(tài)<b class='flag-5'>電路</b><b class='flag-5'>原理圖</b>分享