PCB导线线宽计算工具(基于python3)

PCB导线电阻

我们在初学PCB画板的时候,经常确定不了PCB走线线径,甚至有些新手压根也不关心线径这个问题,最后导致PCB出现许多意料之外的bug。

PCB线径直接影响走线的电阻

从我们的高中物理可以知道:

R=\rho \frac{l}{A}

其中,

\rho表示导体的电阻率(电导率),

l表示导体的长度,

A表示导体的横截面面积。

根据上述公式,可以计算出导体的电阻值。

那么回到我们的主角:PCB上,PCB上的走线使用的通常是薄薄的一层铜线,其横截面面积=厚度x线宽,厚度(铜厚)常用盎司(oz,ounce)表示,盎司是个重量单位,1盎司=28.35克,大约可以换算为35um的铜厚。PCB上铜的电导率约为5.96x10^7 S/m。

原理就是如此。

PCB走线线径计算

走线电阻大了,对PCB的温升、信号的质量会造成很大的影响,因此,常常需要根据线上的电流要求来计算走线线宽(线径)。

由于计算过程较为复杂,通常采用查表法,可以参考:PCB走线宽度和走过的电流对照表_pcb铜厚电流对照表-CSDN博客

那么,只要是计算,就可以通过软件实现,把算法搞明白,就可以写代码了。可以把算法写成代码,甚至写成Excel,就可以重复套用啦。

具体算法我是参考这个:PCB Trace Width Calculator

上述链接提供了一个PCB导线线宽的计算方法:

这部分描述的是:通过导线的横截面积A和厚度t,可以计算导线线宽W。

这部分描述的是:通过导线上的最大电流I、温升Trise,计算导线的横截面积A。

这部分描述的是:通过导体的电阻计算公式,以及温升(Ttemp - 25℃),可以计算出导线的横截面面积A’。

Python实现

正好最近在学习python,想通过代码来实现这整套计算,只要有python入门基础,实现起来不复杂,是一个不错的python练手项目。

为了方便使用,我还用tkinter模块做了个潦草的UI界面,下面直接上代码。

from tkinter import *

#计算
def cacu():
    current_in = float(en_current.get())/1000
    delta_t_in = float(en_delta_t.get())
    thickness_in = float(en_thickness.get())                    #读取输入框的数值
    global area,width
    area = (current_in/(0.048*delta_t_in**0.44))**(1/0.725)     #计算导线横截面面积
    width = area/1.378/thickness_in                             #计算导线线宽
    lb_area.config(text='导线横截面面积 = %f mils^2'%area)   #更新标签
    lb_width.config(text='导线线宽 = %f mil'%width)            #更新标签

#清空所有标签和输入框
def clear_en():
    en_current.delete(0,END)
    en_delta_t.delete(0,END)
    en_thickness.delete(0,END)
    lb_area.config(text='导线横截面面积 = 0 mils^2')
    lb_width.config(text='导线线宽 = 0 mil')
    
root = Tk()
root.title('导线线宽计算工具')
root.minsize(300,250)

lb_input = Label(text='输入参数')
#输入框,输入导线的最大电流
lb_current_ti = Label(text='最大电流',justify='right')
en_current = Entry()
lb_current = Label(text='(mA)')

#输入框,输入导线的最大温升
lb_delta_t_ti = Label(text='最大温升',justify='right')
en_delta_t = Entry()
lb_delta_t = Label(text='(℃)')

#输入框,输入PCB铜厚
lb_thickness1 = Label(text='铜厚',justify='right')
en_thickness = Entry()
lb_thickness = Label(text='(oz/ft^2)')

#计算按钮
bt_ca = Button(text="计算",command=cacu)
#清零按钮
bt_clr = Button(text="清零",command=clear_en)

#输出参数
lb_output = Label(text='输出参数')
lb_area = Label(text='导线横截面面积 = 0 mils^2 ')
lb_width = Label(text='导线线宽 = 0 mil',anchor='e')

#布局
lb_input.grid(row=0,column=1)
lb_current_ti.grid(row=1,column=0)
en_current.grid(row=1,column=1)
lb_current.grid(row=1,column=2)
lb_delta_t_ti.grid(row=2,column=0)
en_delta_t.grid(row=2,column=1)
lb_delta_t.grid(row=2,column=2)
lb_thickness1.grid(row=3,column=0)
en_thickness.grid(row=3,column=1)
lb_thickness.grid(row=3,column=2)

bt_ca.grid(row=4,column=1)
bt_clr.grid(row=5,column=1)

lb_output.grid(row=6,column=1)
lb_area.grid(row=7,column=1)
lb_width.grid(row=8,column=1)

root.mainloop()

代码详解

首先,导入tkinter模块,该模块是用于制作Python GUI界面的。

from tkinter import *

子函数cacu(),首先,读取输入框内的数值,转换为浮点数格式;根据公式计算出导线的横截面面积和线宽,并更新到输出标签。

#计算
def cacu():
    current_in = float(en_current.get())/1000
    delta_t_in = float(en_delta_t.get())
    thickness_in = float(en_thickness.get())                    #读取输入框的数值,并转换为浮点数格式

    global area,width                                           #声明全局变量
    area = (current_in/(0.048*delta_t_in**0.44))**(1/0.725)     #计算导线横截面面积
    width = area/1.378/thickness_in                             #计算导线线宽

    lb_area.config(text='导线横截面面积 = %f mils^2'%area)      #更新标签
    lb_width.config(text='导线线宽 = %f mil'%width)            #更新标签

定义GUI界面窗口标题、窗口最小尺寸。

root = Tk()
root.title('导线线宽计算工具')
root.minsize(300,250)

定义输入框,其中Label是标签组件,Entry是输入框组件。

lb_input = Label(text='输入参数')
#输入框,输入导线的最大电流
lb_current_ti = Label(text='最大电流',justify='right')
en_current = Entry()
lb_current = Label(text='(mA)')

#输入框,输入导线的最大温升
lb_delta_t_ti = Label(text='最大温升',justify='right')
en_delta_t = Entry()
lb_delta_t = Label(text='(℃)')

#输入框,输入PCB铜厚
lb_thickness1 = Label(text='铜厚',justify='right')
en_thickness = Entry()
lb_thickness = Label(text='(oz/ft^2)')

定义按钮组件Button。

#计算按钮
bt_ca = Button(text="计算",command=cacu)
#清零按钮
bt_clr = Button(text="清零",command=clear_en)

定义输出标签。

#输出参数
lb_output = Label(text='输出参数')
lb_area = Label(text='导线横截面面积 = 0 mils^2 ')
lb_width = Label(text='导线线宽 = 0 mil',anchor='e')

布局所有组件。

#布局
lb_input.grid(row=0,column=1)
lb_current_ti.grid(row=1,column=0)
en_current.grid(row=1,column=1)
lb_current.grid(row=1,column=2)
lb_delta_t_ti.grid(row=2,column=0)
en_delta_t.grid(row=2,column=1)
lb_delta_t.grid(row=2,column=2)
lb_thickness1.grid(row=3,column=0)
en_thickness.grid(row=3,column=1)
lb_thickness.grid(row=3,column=2)

bt_ca.grid(row=4,column=1)
bt_clr.grid(row=5,column=1)

lb_output.grid(row=6,column=1)
lb_area.grid(row=7,column=1)
lb_width.grid(row=8,column=1)

进入GUI窗口循环。

root.mainloop()

运行代码

python环境下运行后,获得如下界面:

输入导线电流1000mA,温升常用的是10或20,铜厚根据PCB工艺不同,常用的是0.5或1。

输入上述参数以后,点击“计算”,可以得到结果是23.65mil。

根据PCB对温升的要求不同,其实最终线径的可选范围还是比较宽的,计算结果与查表法也比较接近,建议在上述计算值基础上再保留少许裕度。

导出exe

通过auto-py-to-exe模块,可以快速地将py代码导出为exe可执行文件。如需exe格式文件,可以评论区留下你的邮箱。

新人第一次发文,有不足之处还请各位不吝指教。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值