0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SkiDL:使用 Python 设计电路原理图

KiCad 来源:KiCad 作者:KiCad 2024-12-09 11:21 次阅读

持续更新 8 年,Github 超过 1k star 的项目。一种使用文本替代原理图的语言。

追踪 skidl 项目很久了,之所以之前没有分享是因为老版本只能支持 KiCad 5.0 符号库的解析,而且生成的网表也仅能支持 KiCad 6,所以用起来比较麻烦。最近作者又更新了一个大版本,全面支持 KiCad 7 和 KiCad 8,虽然仍有一些问题,但跑起来比之前方便了很多。AI 时代的到来,让自动化设计又多了一个研究的方向。由于 skidl 的设计初衷就是用文本描述原理图,这对于机器学习来说无疑是非常合适的!感兴趣的小伙伴赶紧学习起来吧,有兴趣进一步讨论的也可以私信我或留言。

SKiDL 简介

通过 SKiDL Python 软件包,您可以用文本描述电子元件之间的连接。生成的 Python 程序可对常见错误进行电气规则检查,并输出网表,作为 PCB Layout 工具的输入。
  • 项目主页:https://github.com/devbisme/skidl

  • License MIT

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

  • 用户论坛https://github.com/devbisme/skidl/discussions

skidl 希望做到的,提供一个选项,既可以通过传统方式设计原理图(下图一),也可以用代码的方式实现(下图二):

wKgZomcy1nyARFGbAAFoqISuyAM789.png

wKgZomcy1nyAYZHsAAFIdOWwVv0704.png

功能
  • 语法强大、灵活(因为它是 Python)。

  • 允许对电子电路进行简洁描述(想象一下不需要在多页原理图中追踪信号)。

  • 允许对电子电路进行文本描述(想想在电路中使用 diff和 git)。

  • 针对常见错误(如未连接器件的 I/O 引脚)执行电气规则检查 (ERC)。

  • 支持电子设计的平铺/分层/混合描述。

  • 支持设计复用(想象一下使用 PyPi 和 Github 发布电子设计)。

  • 可创建智能电路模块,这些模块的行为/结构可通过参数改变(想想滤波器,其元件值可根据你所需的截止频率自动调整)。

  • 可与任何 ECAD 工具配合使用(只需两种方法:一种用于读取元件库,另一种用于输出正确的网表格式)。

  • 可执行 SPICE 仿真(仅限 Python 3)。

  • 充分利用 Python 生态系统的所有优势(因为它是 Python)。

举例

下面的 SKiDL 程序描述了一个由分立晶体管构建的双输入 AND 门,作为一个非常简单的例子:

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.
以下是输出的网表,可以直接在 KiCad 中导入:
(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)))))

注意事项

skidl 在 Windows 上运行的时候经常会碰到问题。最常见的问题是没有正确设置符号库的环境变量,导致无法找到符号库,解析错误。这个错误可以在代码中加入以下语句解决:

os.environ["KICAD8_SYMBOL_DIR"] = "C:\symbols"
“=” 号后面的路径为实际的符号路径。 如果您使用的不是 KiCad 8,而是其他版本的 KiCad,那么最好设置一下默认工具:
set_default_tool(KICAD8)
同样的,输出网表的时候也要指定网表的版本(K8/K7/K6 网表格式有变动):
generate_netlist(tool=KICAD8)
此外, 目前版本的 skidl 还可以直接生成原理图和 PCB,但功能尚不完备,环境配置比较复杂,建议编程基础较好的小伙伴尝试。

结束语

skidl 的具体使用方式,这里就不再赘述了,有兴趣的小伙伴可以自行阅读 skidl 的文档,遇到问题也可以搜索仓库中的 issue 和 forum,作者 Dave 也非常乐意与大家互动,解答大家的问题。 最后总结一下 skidl 做了什么:用 python 代码实现图形界面的原理图设计。具体的实现方式为:
  1. 通过环境变量找到需要使用的原理图符号,parse出符号的引脚编号(名称)
  2. 在文本编辑器(或IDE)中使用编程语言连接这些管脚
  3. 生成 KiCad 格式的网表

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路原理图
    +关注

    关注

    40

    文章

    347

    浏览量

    38318
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84628
  • KiCAD
    +关注

    关注

    4

    文章

    149

    浏览量

    8747
收藏 人收藏

    评论

    相关推荐

    电路原理图的看法

    电路原理图的看法   电器修理、电路设计都是要通过分析电路原理图,了解电器的功能和工作原理,才能得心应手开展工作的。作
    发表于 12-03 13:49 2685次阅读

    胆机的电源电路和延时电路原理图

    胆机的电源电路和延时电路原理图 1为
    发表于 12-21 19:01 2w次阅读
    胆机的电源<b class='flag-5'>电路</b>和延时<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    用protel制作电路原理图设计技巧

    电路原理图设计步骤?在进行电路原理图设计之前首先应创建一个原理图文件,然后打开该原理图文件并按以
    发表于 09-17 19:15 0次下载

    PDA电路原理图

    PDA电路原理图 MC68VZ328方案开发板原理图
    发表于 09-24 16:02 168次下载

    网卡电路原理图

    网卡电路原理图RTL8019A9
    发表于 02-02 22:17 6306次阅读
    网卡<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    modem电路原理图

    modem电路原理图
    发表于 01-14 21:57 3706次阅读
    modem<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    PFC主电路原理图

    PFC主电路原理图 PFC主电路原理图 如图所
    发表于 07-17 10:36 2w次阅读
    PFC主<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    电路原理图

    电路原理图 电路原理图
    发表于 07-21 16:55 2373次阅读

    如何读懂电路原理图

    如何读懂电路原理图 初学维修的青少年朋友在维修电子产品前,必须首先弄清电原理图,然后才能顺利维修。同时,仅对单元电路的原理和各种元
    发表于 01-16 10:50 5509次阅读

    车载功放电源电路原理图

    下图为车载功放电源电路原理图 车载功放电源电路原理图
    发表于 05-28 15:54 3w次阅读
    车载功放电源<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    无线遥控发射和接收电路原理图

    下图为无线遥控发射和接收电路原理图 1 无线遥控发射电路原理图 2 无线遥控接收
    发表于 05-29 13:01 4.7w次阅读
    无线遥控发射和接收<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    电平转换电路原理图

    电平转换电路原理图如下图所示: 电平转换电路原理图
    发表于 07-11 13:51 9866次阅读
    电平转换<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>

    电路原理图该如何阅读?

    电路原理图直接体现了电子电路的结构和工作原理,如何阅读和循序原理图是电气工程师的基本技能。这里来讲一下阅读电路
    的头像 发表于 12-26 10:06 1.1w次阅读
    <b class='flag-5'>电路</b><b class='flag-5'>原理图</b>该如何阅读?

    开源工具SkiDL - 用Python来描述电路

    SKiDL 是一个模块,允许您使用 Python 紧凑地描述电子电路和组件的互连。 生成的 Python 程序执行电气规则检查以查找常见错误并输出用作 PCB 布局工具输入的网表。
    的头像 发表于 10-30 10:07 2762次阅读
    开源工具<b class='flag-5'>SkiDL</b> - 用<b class='flag-5'>Python</b>来描述<b class='flag-5'>电路</b>

    动态电路原理图分享

    动态电路原理图分享
    的头像 发表于 01-30 17:55 3952次阅读
    动态<b class='flag-5'>电路</b><b class='flag-5'>原理图</b>分享