上个月帮同事处理一块射频电源板的改版,板边需要加两排接地过孔做边缘屏蔽。他打开Edit菜单,用老办法复制、粘贴、对齐,一颗一颗排,快两小时没弄完。我过去看了一眼,在Allegro 17.4里调出Via Array面板,框选目标区域、设好间距、把网络指向GND,五分钟,所有过孔整整齐齐一次打完。同事当场愣住,问我这是什么功能。这功能就是Allegro 17.4的Via Array,藏在Place菜单下面,特别不起眼,但处理板边和铺铜区的批量过孔阵列时,效率高得离谱。这篇我不打算只列步骤,会把三种模式怎么选、参数怎么设、哪些地方容易翻车都讲清楚,最后给你一组可以直接照抄的参考值。
1. 哪些设计任务会用到Via Array,以及为什么手动做又慢又错
1.1 三个高频使用场景:板边屏蔽孔、缝合孔、散热孔
Via Array往实际设计里落地,最典型的场景有三个,分别对应板边、铜皮和器件散热。
先说板边屏蔽孔。高速电路板特别是射频板,PCB边缘会打一整圈接地过孔,孔的间距和位置都有讲究。这些孔不加不行,因为板边的电场最强,是辐射泄漏的主要通道。一圈接地孔相当于一个法拉第笼,把噪声关在层叠内部。这类孔一般沿着板边框分布,数量动辄几十上百颗,如果靠手动一颗颗打,光是对齐边缘就够喝一壶的。
然后是铺铜区的缝合孔,也叫Stitching Via。多层板里大面积的地铜和电源铜之间需要大量过孔连通,返回电流才有低阻抗路径。比如高速信号换层,如果周围没有缝合孔,返回电流就得绕一个大圈子,形成天线把噪声辐射出去。缝合孔的间距在射频设计中甚至有明确的电气要求,但它的分布不需要太精确,均匀即可,这就非常适合阵列生成。
最后是功率器件或电源模块下方的散热过孔。这类孔通常整齐地排列在器件底部的铜皮上,孔径不能太大,防止回流焊漏锡,间距也有行业习惯。我见过很多工程师做散热孔时还在用复制粘贴大法,其实用Via Array做一个矩形网格,一两分钟就能搞定,而且后续调整间距只需要改一个数。
1.2 手动复制粘贴的暗坑:效率低,改一次参数全军覆没
手动打孔为什么效率低?我看过很多小伙伴的操作流程:放第一颗孔,复制,设置x/y增量,连续粘贴,然后还要检查间距是否一致、是否对齐、有没有重叠。这个过程有一个致命问题——如果做到一半发现间距应该从50mil改成80mil,或者板边到孔的距离要调整,全部得重来。更难受的是孔太多时容易漏粘、重复粘,检查也要花半天时间。
Via Array是参数化生成,不是"复制粘贴"。它一次性定义整组规则,间距、偏移、行列数、网络属性全部在面板里给定,然后一次性生成整组孔。规则定了,后面要改间距,直接把参数改掉重新生成就行,不需要动任何一颗单孔。这一点让它在可维护性上完全胜过手动方式。
手动打孔还有一个隐性成本:人眼对齐的误差。你觉得自己对齐了,放大一看,两列孔之间差了0.1mm。对于板边屏蔽孔,这种误差可能导致边缘辐射泄漏点不在预期位置;对于散热孔,不均匀分布会导致局部过热。Via Array是程序按数学规则排布,不存在这种问题。
2. 17.4里Via Array三种模式的选型逻辑与参数逐个解读
2.1 三种模式分别适合什么任务
在Allegro 17.4里,Place菜单下的Via Arrays有三个子命令:Bounding Box、Outline、Edge。很多人一上来就晕,不知道选哪个。按我个人的项目经验,可以简单分这么三类:
- Edge模式:沿PCB板边、板框线段或任意已选线段,生成一列或多列过孔。板边屏蔽孔就选它。
- Bounding Box模式:在一个矩形区域内生成规则的二维网格过孔,行距和列距单独设置。铺铜区的缝合孔、散热孔都走它。
- Outline模式:沿一个闭合多边形或异形轮廓生成一圈过孔。适合屏蔽罩接地、焊盘围孔、圆形或异形边界的情况。
选型的核心逻辑就一句话:你要的是"一排孔"还是"一片孔"还是"一圈孔"。一排选Edge,一片选Bounding Box,一圈选Outline。
2.2 参数面板里的每个字段的含义和设置思路
三种模式对话框里的参数高度相似,理解核心字段,基本就能覆盖全部场景。
| 参数名 | 含义 | 设置注意事项 |
|---|---|---|
| Via Type | 使用的过孔封装类型,如Via10d8表示外径10mil内径8mil | 需要在封装库中已定义,否则下拉列表为空 |
| Direction | 阵列排列方向,Vertical为竖直单列,Horizontal为水平单行,Both为双列镜像 | Edge模式下最常用,选错会导致孔朝板外排 |
| Origin Offset | 第一颗孔相对参考点的偏移量 | 设置不当会导致整组孔整体平移 |
| Left/Right/Top/Bottom Offset | 四边到阵列边界的留边距离 | Bounding Box模式下控制孔区相对框选区域的缩进 |
| Via to Via Distance | 相邻两孔的中心间距 | 这是中心距,不是边到边间距,设置时容易混淆 |
| Net Name | 生成后分配给所有过孔的网络 | 建议直接填GND,省去后续改网络 |
另外一个要注意的是Active Class/Subclass。Edge模式下选边时,要确认你选的是BOARD GEOMETRY/OUTLINE层的线段,而不是ETCH层的铜皮边缘。选错层的后果是孔的参考基准完全错误,生成位置会飘。
2.3 动手前必须确认的过孔封装和库路径
用Via Array前有一个经常被忽略的前置条件:过孔封装必须已经在当前设计库中可用。Allegro的规则是,如果库路径里找不到对应Padstack,面板里Via Type下拉菜单就是空的,或者生成时报错。
所以第一步,先确认Setup → User Preferences → Design Paths → Library里的padpath和psmpath都指到了正确的库目录。如果是团队协作,还要确认大家用的都是服务器上同一版本的库,不然同一个Via Type在不同机器上生成出的孔径不一致,画板时看不出来,出Gerber时就会出问题。
我在新项目里还习惯把不需要的过孔类型从padpath里临时移除,只留常用的那几种,这样Via Type下拉列表干净,不容易选错。
3. 板边过孔阵列:Edge模式的完整操作流程与关键参数校验
3.1 选边与多边批量选择的细节
以板边屏蔽孔为例,打开Place → Via Arrays → Edge后,面板里会让你选择线段。这里分两种情况:如果你的板框画在BOARD GEOMETRY/OUTLINE层,用Pick Segments方式可以点选板框线;如果是异形板框,还可以在Options面板里把Selected Type设为All segment,一次框选一整圈边线。
多选边线时,最稳定的操作是按住Shift逐段加选,或者右键调出Pick Many框选。如果板框不是封闭图形,建议先在板框属性里确认闭合,再执行阵列,否则无法正确判断边的方向。
我踩过的第一个坑就在这:有次板框是带圆弧段的异形板,我选了半圈边线后没注意圆弧的弧长被系统按弦长处理,生成的孔间距在圆弧处明显变稀。后来我把弧段单独选中,并在参数里把弧长设置打开,才对上。所以处理圆弧段时,要留意软件是按弦长还是弧长来计算间距。
另一个细节:如果你不是一次选完整圈边线,而是分多次选中,每次选中的线段会作为独立组生成阵列。这会带来一个问题——转角处可能会出现两颗孔距离过近的情况。解决方法是:选中所有边线后,在Options里勾选Unify segments选项,让系统把多个线段当成一个连续路径处理,重新计算转角处的均匀间距。这个选项默认是关闭的,不打开的话,转角处基本必然出现重叠孔。
3.2 From Edge Distance和Via to Via Spacing的工程取值
板边孔的间距和距边距离是两个必须认真取的参数,不是随便填个好看的数字就行。
From Edge Distance是孔中心到板边的距离。这个值不能只按"看起来好看"来取,要考虑板厂的钻孔公差。常规FR-4制造工艺下,孔边到板边的最小距离建议保持在0.3mm以上,小于这个值,钻孔时薄边容易崩裂。换算成孔中心到板边的距离,就得再加上孔径半径。比如用10mil钻孔的过孔,中心距板边至少要0.3mm+0.127mm,约0.43mm,按英制大概17mil。
实际项目里,板边屏蔽孔的From Edge Distance我一般取20mil到40mil,再小就看工艺了。如果你拿不准,发板之前先跟板厂确认他们的最小孔边距要求,别等到样片回来发现边缘破孔才后悔。
Via to Via Distance(中心距)的取值,从电磁角度讲,边缘屏蔽孔想有效抑制辐射,间距需要远小于你关心的最高频波长的1/20。说人话就是频率越高,孔要排得越密。如果只是做一般数字板的板边地孔,经验值取100mil到150mil问题不大;射频板建议60mil到80mil。别一上来就设25mil,过密除了好看没额外收益,反而增加加工成本和时间。
3.3 生成方向与位置偏移修正
Edge模式生成后,偶尔会出现过孔落在板框外侧或者跑偏的情况,这时候先别急着删,从这几个方向排查:
- 检查Direction设置。如果Direction参数是Vertical,而你的边是横向的,生成的孔会垂直于边线朝外排,看起来就是"跑偏"。
- 检查Origin Offset。如果正值方向与边线方向相反,整组孔会整体位移。
- 边线被选中了两次时,会在同一位置生成两列重叠孔。这种情况先选中全部孔,右键Delete,重新选择一次边线再生成。
修正方法其实很快:把参数里的Left/Right Offset符号对调,或者重新生成前把原有的临时孔全部删除。还有个技巧,生成后如果只有个别孔位置不理想,不要删孔,选中后用右键Exclude功能排除,再单独手工放一颗。这样不会破坏整组阵列,后续整组调整时,这颗特殊位置的孔也不会被误动。
3.4 板边孔离边缘太近导致的制造问题
这里专门提一下板边孔打太近的后果。我遇到过一版产品,改板时把板边孔间距从100mil调到了50mil,想着屏蔽效果更好,结果加工的样片回来一看,板边有条细微的裂纹。板厂反馈说孔边距板边只有0.25mm,钻孔应力直接把薄壁挤裂了。
这类问题在Via Array里几乎没有预警提示,因为DRC的Board Outline间距规则如果没配好,根本不会报。所以提醒一句:跑完Via Array后,务必检查一下板框到孔的间距。用Manufacture → Dimension/Draft的测量工具量一下,或者在Constraint Manager里加一条Physical Rule,设定Board Outline to Via的最小间距,让系统替你把关。
4. 铺铜区缝合孔阵列:Bounding Box与Outline模式的工程设置
4.1 缝合孔的电磁作用与间距设计依据
铺铜区的缝合孔,很多人的理解就停留在"铺铜时打点过孔连接地层"。但缝合孔的间距其实是有设计依据的。高速信号换层回流时,如果周围没有地过孔,返回电流只能往远处找通路,这个回路面积一大,就成了天线。仿真会发现,在信号换层处附近放几个地孔,辐射就能明显降下来。
经验法则是:缝合孔间距不要超过信号在介质中波长的1/20。举个例子,2.4GHz的WiFi信号在FR4中的波长大约60mm(考虑到介电常数约4.2,实际波长约为自由空间波长126mm的一半左右),1/20约3mm,换成mil大概120mil。也就是说,120mil以内的缝合孔间距对这个频段是安全的。如果你的板子只跑低速I2C、GPIO,那缝合孔间距大点问题也不大,按150mil到200mil做即可。
反过来也要提醒一句:缝合孔不是越多越好。太密集的孔阵会把电源平面和地平面割成筛子,直流载流能力和参考平面完整性反而变差。所以工程上盯住"够用"两个字,按频率要求算一下上限,再留点裕量。
4.2 Bounding Box模式的参数设置与网格孔生成
铺铜区常规缝合孔推荐用Bounding Box。操作逻辑是:用鼠标拉一个矩形框,系统在这个框内生成网格阵列。
具体步骤:
- 打开Place → Via Arrays → Bounding Box。
- 在Options面板里选好Via Type,填Net Name为GND。
- 设置Row Spacing和Column Spacing,即行方向和列方向的中心距。
- 设置Left/Right/Top/Bottom Offset,让阵列离矩形框四边各缩进一段距离,避免孔落到铜皮边缘外。
- 设置Origin Offset,决定第一颗孔从哪个角开始排。
- 回到画布,拉框选择铺铜区的矩形范围,系统立即生成。
举个实际值:要给一片30mm×20mm的GND铺铜做缝合孔,用10/16mil过孔,间距取100mil(2.54mm),四边缩进1mm。算下来横向约(30-2)/2.54≈11颗,纵向(20-2)/2.54≈7颗,总共约77颗。手动放这些孔至少要半小时,Bounding Box一分钟不到就出来了。
生成后建议快速目检一遍,重点看四边缩进是否均匀、有没有孔落在禁布区或其它器件丝印下。如果元件密集区有丝印被孔穿过,用前面说的Exclude方法处理掉个别孔就行。
4.3 不规则铺铜区的处理办法
不规则铜皮是另一个常见痛点。L形、圆形、带斜边的区域,直接用Bounding Box会把孔打在不该打的位置,需要手动删除,反而更慢。
我的办法是分情况处理:
- L形或T形区域:拆成两个矩形,分别跑Bounding Box。两个矩形角落重叠部分的孔,用Exclude方式去掉重复的。
- 圆形或圆弧边界:在Via Arrays里选Outline,直接选中圆的轮廓线,设置From Boundary Distance和间距,沿圆周生成一圈孔。
- 完全异形边界:先生成一个大矩形网格,再用Temp Group选中所有孔,配合Shape的边界检查删除外部孔。实测下来比一个个试参数快很多。
对了,如果是屏蔽罩焊盘内侧的过孔,还有一个经验:孔不要贴着屏蔽罩的焊盘中心线放,往铜皮方向多缩进一点,避免上锡时孔内爬锡改变外形。
4.4 阵列孔的Net属性处理与铜皮连接验证
Via Array生成后的过孔,网络属性取决于面板里Net Name有没有填。如果没填,生成出来的孔就是空网络的孤儿,你在铺铜时选中同一块GND铜皮,正常情况下这些孔会被并入GND网络,但如果孔旁边有其它网络走线紧挨着,就可能出现铜皮没连接上或者报短路。
我的建议很简单:生成阵列前就把Net Name填上,一劳永逸。生成后想验证网络属性,选中任意一颗孔,右键Properties看一下Net那一栏,确认是GND。如果发现个别孔网络不对,选中后按Edit → Change,把Net改过来就行。这里不建议用全局替换去覆盖整组,因为有可能误伤同位置带其他属性的孔。
5. 性能对比与实战避坑:把Via Array用出最高效率
5.1 单位不一致导致的阵列偏位问题
Allegro的单位系统坑过不少人。设计文件可能从客户或者其他工具转过来,单位是mil还是mm,有时候只在右下角状态栏里一个小地方显示。我在Via Array里就翻过一次车:参数面板默认单位是mil,我把一段本来打算按mm输入的间距填进了mil框,出来的阵列间距直接变大了25.4倍,整组孔飞到板外去了。
所以操作前第一件事:看设计单位。输入I键打开Setup,确认Units里显示的是Mils还是Millimeter。如果设计是mm,你在参数框里输入的数值就会以mm为单位被接受;如果设计是mil,输入50就是50mil,不是50mm。
这个坑之所以反复出现,是因为很多设计文件是从DXD或PADS转过来的,转换过程中单位设置没有同步。我的习惯是:接手任何外部设计文件后,第一步统一设置单位,再做任何阵列或布局操作。
5.2 生成后批量修改过孔类型与网络
阵列已经生成在板上了,但发现孔径不对怎么办?不需要重来。选中阵列里任意一颗孔,右键Select Similar,把同样Via Type的孔全部选中,然后Tools → Padstack → Replace,选择正确的过孔类型,一次替换。
网络属性同理:选中所有目标孔,Edit → Change,把Find面板里只勾选Vias,在Options里选择Net → GND,框选后Apply,所有孔的Net就会一次性改过来。这两个操作配合起来,基本能处理所有"生成之后想改规格"的情况。
有一点要留意:如果这些过孔已经被铺铜覆盖并联通了,替换Padstack之后软件要重新动态铺铜,时间会明显变长,这是正常现象,不用以为是卡死。
5.3 手动打孔与Via Array的实测数据对比
为了说明效率,我这里列一组实际项目里记录的数据。任务是在一块120×80mm的板子上完成两件事:板边一圈屏蔽地孔共64颗,内部GND铺铜缝合孔120颗。
| 操作环节 | 手动方式 | Via Array方式 |
|---|---|---|
| 放置并排列全部孔 | 约50分钟 | 约5分钟 |
| 对齐与间距修正 | 反复人工调整 | 参数自动保证 |
| 网络分配 | 逐颗或分批修改 | 面板直接填GND |
| 后续改间距/孔径 | 全部重来 | 改参数重新生成 |
实测下来,中途如果发现间距要调整,手动方式时间还要翻倍;Via Array说30秒就30秒。这个对比很能说明问题,尤其是一想到后面还有可能改版,参数化带来的收益更大。
5.4 团队复用与脚本化建议
最后聊点让团队整体受益的做法。Via Array的参数其实可以沉淀成规范。我们组在Layout Design Guide里专门加了一节,规定:
- 板边屏蔽孔:孔径10/16mil,孔中心距板边25mil,孔间距80mil(射频板)/120mil(数字板)。
- 铺铜缝合孔:孔径10/16mil,孔间距100mil,四边缩进1mm。
- 散热孔:孔径12/20mil,孔间距1.0mm,阵列覆盖器件中心铜皮。
新工程师接手时,直接按这个规范设参数,不用从零试。更进一步,Allegro支持Skill脚本,可以把常用阵列参数封装成菜单命令。我们组内写了个简单脚本,一键生成"板边射频屏蔽孔"和"GND缝合孔"两类任务,参数录在脚本里,点一下菜单就出结果。
脚本化的价值在于两件事:消除人为输入参数的错误,统一组内工程师风格。即便不做脚本,只要每个项目都用Via Array而不是手动复制,一致性就已经比很多团队强了。