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

前言

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

今天给大家介绍一个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来画电路原理图!)