PCB导线电阻
我们在初学PCB画板的时候,经常确定不了PCB走线线径,甚至有些新手压根也不关心线径这个问题,最后导致PCB出现许多意料之外的bug。
PCB线径直接影响走线的电阻。
从我们的高中物理可以知道:
其中,
表示导体的电阻率(电导率),
表示导体的长度,
表示导体的横截面面积。
根据上述公式,可以计算出导体的电阻值。
那么回到我们的主角: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格式文件,可以评论区留下你的邮箱。
新人第一次发文,有不足之处还请各位不吝指教。