当前位置:首页 > 嵌入式 > 嵌入式分享
[导读]PCB设计完成后,走线宽度是否符合工艺规则是制板前的硬门槛——电源线要求20mil以上、信号线8mil、差分对5mil,任何一个违规都可能导致短路或断路。人工肉眼检查几十上百条走线既费时又容易漏,而Python配合Altium文件解析库可以一键扫描整个板子,把违规项列成表格。下面以开源库py-altium为例,展示如何批量识别Altium Designer的.PcbDoc文件中的走线宽度违规。


PCB设计完成后,走线宽度是否符合工艺规则是制板前的硬门槛——电源线要求20mil以上、信号线8mil、差分对5mil,任何一个违规都可能导致短路或断路。人工肉眼检查几十上百条走线既费时又容易漏,而Python配合Altium文件解析库可以一键扫描整个板子,把违规项列成表格。下面以开源库py-altium为例,展示如何批量识别Altium Designer的.PcbDoc文件中的走线宽度违规。

一、环境准备

首先安装py-altium库(支持读取Altium二进制格式):

pip install py-altium

该库能解析走线、过孔、焊盘等元素,并提供几何信息和属性。

二、单文件检查脚本

以下脚本加载一个Altium PCB文件,遍历所有走线(Track),与预设的最小/最大宽度对比,输出违规项。

import altium

from pathlib import Path


# 规则定义:不同网络的宽度要求(单位:mil)

WIDTH_RULES = {

   "POWER": {"min": 20, "max": 50},

   "SIGNAL": {"min": 8, "max": 15},

   "GND": {"min": 20, "max": 100},

   "DIFF_PAIR": {"min": 5, "max": 8},

}


def check_width(file_path):

   board = altium.load(str(file_path))

   violations = []

   for track in board.tracks:

       net_name = track.net.name if track.net else "UNKNOWN"

       rule = None

       # 根据网络名前缀匹配规则

       for key, limits in WIDTH_RULES.items():

           if key in net_name.upper():

               rule = limits

               break

       if rule is None:

           continue  # 未匹配规则的网络不检查

       width_mil = track.width * 1000  # 假设库返回的单位是inch

       if width_mil < rule["min"] or width_mil > rule["max"]:

           violations.append({

               "net": net_name,

               "width_mil": round(width_mil, 2),

               "layer": track.layer.name,

               "location": f"({track.x:.2f}, {track.y:.2f})",

               "rule": f"{rule['min']}-{rule['max']}mil"

           })

   return violations


# 使用示例

violations = check_width("demo.PcbDoc")

print(f"发现 {len(violations)} 处违规:")

for v in violations:

   print(f"  网络 {v['net']} 宽度 {v['width_mil']}mil (规则 {v['rule']}) "

         f"位于 {v['layer']} {v['location']}")

三、批量处理与报告生成

实际项目中往往有多个PCB文件需要检查,可以遍历文件夹,将所有违规汇总到一个CSV报告中。

import csv, os


def batch_check(folder, output_csv):

   all_violations = []

   for f in Path(folder).glob("*.PcbDoc"):

       try:

           viol = check_width(f)

           for v in viol:

               v["file"] = f.name

           all_violations.extend(viol)

       except Exception as e:

           print(f"处理 {f.name} 失败: {e}")

   with open(output_csv, "w", newline="") as csvfile:

       fieldnames = ["file", "net", "width_mil", "layer", "location", "rule"]

       writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

       writer.writeheader()

       writer.writerows(all_violations)

   print(f"违规报告已保存至 {output_csv}")


batch_check("./pcb_files", "width_violations.csv")

四、注意事项

库的兼容性:py-altium目前支持Altium 20–23版本,较旧的格式可能解析失败。建议先将Altium文件另存为最新格式。

规则定义:实际生产中应根据工艺能力和设计要求设定宽度范围,本例仅为演示。

备份文件:脚本只读不写,不会修改原始PCB文件,但建议在副本上运行以防意外。

性能:大型PCB(数千条走线)解析耗时约几秒,批量处理时建议加进度提示。

五、扩展思路

除了走线宽度,还可以检查过孔孔径、间距、铜皮间隙等规则。py-altium还支持读取过孔、焊盘、敷铜等元素,只需扩展相应的检查函数即可。结合Jenkins或GitLab CI,可以将该脚本嵌入到设计流程中,每次提交PCB文件后自动检查并邮件通知违规项。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

25Gbps SerDes(如 SFP28、QSFP28 光模块)的 NRZ 信号 UI 仅 40 ps,PCB 上每 1 dB 插损都会让眼图闭合 10% 以上。光模块的 PCB 通常只有 30×50 mm,却要容纳激...

关键字: 光模块 PCB

BMS的单体电压采样精度直接决定SOC估算和均衡策略的有效性。常见的误差来源有两类:一是采样回路中的导线电阻和接触电阻引入的压降(尤其在百安级电流下,毫欧级电阻就能产生数十毫伏误差);二是分压电阻和ADC参考源的温漂。K...

关键字: BMS电池 PCB 采样回路

SFP+(10.3125 Gbps,UI ≈ 97 ps)模块的 PCB 往往只有 30×70 mm 上下,金手指 + TX/RX 各一对差分走 Host ↔ Module,模块里塞激光器驱动、TIA、CDR,空间挤但回...

关键字: 光纤通信 PCB

产线测试、实验室老化、器件筛选——这些场景里,"手动点按钮→读数据→记 Excel"的方式已经跟不上节奏了。Python + PyVISA 是目前最通用的仪器控制方案,支持 Keysight、R&S、Tektronix、...

关键字: 自动化测试 Python VISA

PCB 走线的阻抗不连续(过孔、拐角、连接器、BGA 扇出颈缩)在高速信号中就是反射源——S11 在频域上看可能只是 -15 dB,但在 TDR 时域上能清晰看到“哪里 Z 变了、变了多少、有多长”。TDR 的价值不在“...

关键字: TDR 时域反射法 PCB

智能音箱的圆形 PCB(直径 60–120 mm 常见)比矩形板多了一个“环形地陷阱”——整面铺铜虽然好看,但数字噪声(Wi-Fi/BLE、DDR、DCDC)会沿着圆周形成共模环路,耦合进模拟音频前端,表现为“无播放时底...

关键字: 智能音箱 PCB

当智能手机的SoC芯片里集成了上百亿个晶体管,当智能手表的主板上要在指甲盖大小的空间里塞进上百个元器件,传统的PCB焊接工艺早已无法满足现代电子产品的需求。电子微组装封装作为先进制造领域的核心技术,早已跳出了“给芯片套个...

关键字: 晶体管 PCB

PCB(Printed Circuit Board)设计是电子产品开发的核心环节,直接影响电路性能、成本及可靠性。本文系统总结PCB设计的关键技巧,涵盖布局、布线、层叠设计、信号完整性及成本优化等方面,帮助设计师提升效率...

关键字: PCB

同一颗器件换一块板零点就不同,很多时候不是芯片离散性,而是装配把微结构拉到了另一个工作点。陀螺仪对安装应力敏感,根因在于它测的是极小位移和极小电容变化。

关键字: 陀螺仪 芯片 PCB

板上串扰不是只由走线靠太近造成的。射频PCB里只要回流路径被切断,高频电流就会自己找路,沿途把能量耦合到原本安静的网络上。

关键字: 射频 PCB 过孔
关闭