疯了吧,你竟然用Python来画电路原理图!
2019-02-20 本文已影响0人
IEEE1364
前言
前路茫茫,最怕标题党!哈哈哈!
今天给大家介绍一个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