美文网首页
疯了吧,你竟然用Python来画电路原理图!

疯了吧,你竟然用Python来画电路原理图!

作者: IEEE1364 | 来源:发表于2019-02-20 17:08 被阅读0次

    前言

    前路茫茫,最怕标题党!哈哈哈!

    今天给大家介绍一个Python库——SchemDraw,可以用来画电路原理图。当然,也仅仅是个原理图而已,并不能导出到到PCB工具去进行PCB设计。这个库用来画一些演示用的电路还是很方便的。

    一、相关介绍

    这个库有以下特点:

    a.自带模拟和数字库
    b.自定义黑盒
    c.支持LaTeX风格的标注
    d.模糊布局,智能布线

    可以直接使用 pip install SchemDraw来安装,也可以去下面这个链接下载源文件。
    https://pypi.org/project/SchemDraw/

    二、简单示例

    先画个模电书上经常使用的运放反向放大电路


    SCD_Demo1.jpg

    源码如下:

    import SchemDraw as schem
    import SchemDraw.elements as e
    
    d = schem.Drawing(inches_per_unit=.5)
    op = d.add(e.OPAMP)
    d.add(e.LINE, d='left', xy=op.in2, l=d.unit/4)
    d.add(e.LINE, d='down', l=d.unit/5)
    d.add(e.GND)
    d.add(e.LINE, d='left', xy=op.in1, l=d.unit/6)
    d.add(e.DOT)
    d.push()
    Rin = d.add(e.RES, d='left', xy=op.in1-[d.unit/5,0], botlabel='$R_{in}$', lftlabel='$v_{in}$')
    d.pop()
    d.add(e.LINE, d='up', l=d.unit/2)
    Rf = d.add(e.RES,  d='right', l=d.unit*1, label='$R_f$')
    d.add(e.LINE, d='down', toy=op.out)
    d.add(e.DOT)
    d.add(e.LINE, d='left', tox=op.out)
    d.add(e.LINE, d='right', l=d.unit/4, rgtlabel='$v_{o}$')
    d.draw()
    

    再画一个555电路,稍微复杂一点。


    SCD_Demo2.jpg

    源码见第三部分。

    三、使用XKCD转换为手写风格

    效果如下,怎么样,看上去很二逼吧!


    SCD_Demo3.jpg

    手写风格的源码如下:

    import SchemDraw as schem
    import SchemDraw.elements as e
    
    #import matplotlib.pyplot as plt
    #plt.xkcd()
    
    d = schem.Drawing()
    left = {'cnt':3,
            'labels':['TRG','THR','DIS'],
            'plabels':['2','6','7'],
            'loc':[.2,.35,.75],
            'lblsize':12,
            }
    right = {'cnt':2,
             'labels':['CTL','OUT'],
             'plabels':['5','3'],
            'lblsize':12,
             }
    top = {'cnt':2,
           'labels':['RST','Vcc'],
           'plabels':['4','8'],
           'lblsize':12,
           }
    bot = {'cnt':1,
           'labels':['GND'],
           'plabels':['1'],
           'lblsize':12,
            }
    
    IC555 = e.blackbox(d.unit*1.5, d.unit*2.25,
                       linputs=left, rinputs=right, tinputs=top, binputs=bot,
                       leadlen=1, mainlabel='555')
    T = d.add(IC555)
    BOT = d.add(e.GND, xy=T.GND)  # Note: Anchors named same as pin labels
    d.add(e.DOT)
    d.add(e.RES, endpts=[T.DIS, T.THR], label='Rb')
    d.add(e.RES, d='up', xy=T.DIS, label='Ra', rgtlabel='+Vcc')
    d.add(e.LINE, endpts=[T.THR, T.TRG])
    d.add(e.CAP, xy=T.TRG, d='down', toy=BOT.start, label='C', l=d.unit/2)
    d.add(e.LINE, d='right', tox=BOT.start)
    d.add(e.CAP, d='down', xy=T.CTL, toy=BOT.start, botlabel='.01$\mu$F')
    d.add(e.DOT)
    d.add(e.DOT, xy=T.DIS)
    d.add(e.DOT, xy=T.THR)
    d.add(e.DOT, xy=T.TRG)
    d.add(e.LINE, endpts=[T.RST,T.Vcc])
    d.add(e.DOT)
    d.add(e.LINE, d='up', l=d.unit/4, rgtlabel='+Vcc')
    d.add(e.RES, xy=T.OUT, d='right', label='330')
    d.add(e.LED, flip=True, d='down', toy=BOT.start)
    d.add(e.LINE, d='left', tox=BOT.start)
    d.draw()
    

    后记

    这个库并不能真的用来实现一个具备电气特性的电路设计,实现一个复杂设计也显得过于复杂和庞大,也没有一般EDA工具图形界面那么直观。但是用来演示一些电路原理,或者在写文档的时候设计一些需要的电路图,还是很有帮助的。比如下面这个


    想想了解更多关于这个库的使用,请看下面这个链接:
    https://cdelker.bitbucket.io/SchemDraw/SchemDraw.html

    相关文章

      网友评论

          本文标题:疯了吧,你竟然用Python来画电路原理图!

          本文链接:https://www.haomeiwen.com/subject/azihyqtx.html