疯了吧,你竟然用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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 姓名:仝启龙 学号:17101223413 本文转自 PCB行业工程师技术交流 【嵌牛导读】 作为从事硬件设计工...
    軒轅龍阅读 1,048评论 0 2
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,276评论 4 61
  • 特定的研究领域内,专用术语实际上是一种通用语言,它不是妨碍而是便于专业研究者更好地表达和交流思想。在一定情况下,深...
    媒趣小姐阅读 310评论 0 1
  • 我不是佛教信徒,但对包括佛教在内的各种宗教一直给予充分的尊重。包括对各地的寺庙或道观,即使做不到心驰神往,可那份敬...
    渝夫2016阅读 659评论 0 0
  • 以前对人,毫不留情,说走就走。现在反倒是畏手畏脚的,不敢果断离开,也许是失去太多了越长大却越优柔寡断了。 这种抑郁...
    秋扇_阅读 173评论 0 0