前阵子改一块四层板的板框,原本是规矩的长方形,客户临时要求改成L形异形板。我花了半小时把Board Shape和机械层整理好,然后Repour全板,顶层GND铜皮一刷新,边缘瞬间多出几十块悬空的碎铜,分布在板框内外的都有。发给制板厂之后,工厂工程直接在确认邮件里贴图问我:这些铜皮要不要留。
这就是孤岛铜,也叫Dead Copper、Orphan Copper。说直白点,就是一块没有和任何同网络导体相连的铜皮。它在网络列表里可能叫GND,也可能干脆是No Net,但它没有任何实际作用——不导电、不散热、不屏蔽,反而可能在PCB加工过程中造成蚀刻残留、药水残留、铜皮起翘。这篇文章把我在Altium Designer里定位、清理、预防孤岛铜的完整做法聊透,按日常改板时遇到的实际顺序来写,不绕弯。
1. 孤岛铜是怎么“长”出来的:三个最容易踩中的生成场景
很多朋友一上来就问“孤岛铜怎么删”,但我建议先花两分钟搞懂它是怎么来的。孤岛铜绝大多数不是设计者故意画出来的,而是灌铜过程中被“切”出来的。想通了这一点,后面怎么清理、怎么预防,思路就全通了。
1.1 灌铜参数变化导致铜皮被重新切碎
最典型的情况是这样的:板上原本有一片完整的GND铜皮,后来你在铜皮上方加了一排过孔,或者把某条电源走线加粗了。走线在铜皮中间穿过,直接把铜皮区域劈成两个子区域——左边有GND过孔,右边一个都没有。Repour的时候,AD会根据新的边界重新计算可填充区域,右边那块就被判定为“没有连接目标”,生成之后就是一块孤岛铜。
这里要理解多边形铺铜的生成逻辑:它在指定的边界范围内,扣掉所有与铜皮网络不同的导体、禁布区域、板框外的部分,再根据Clearance间距算出剩余区域。剩余区域还要根据“是否与同网络连接点连通”来判定是否保留。连接点指的就是同网络的Pad、Via、Track。所以任何一次改动,只要动了铺铜边界的形状、增加了新的挖空区域、改变了网络连接关系,Repour之后就可能爆出一堆孤岛。
1.2 板框和Keepout修改后的边缘残留
第二种常见来源是板框变化。把Board Shape从矩形改成L形之后,原本缩回去的角落区域已经不在板框范围内,Repour应该把它裁掉。但这里有个前提,铜皮必须是有网络的,并且这个网络在板内还有有效的连接点。如果铜皮本身是No Net,AD不会自动把它当作“该死铜”处理,板外的碎铜就会一直留着,你勾不勾Remove Dead Copper它都可能原地不动。
Keepout区域也存在类似情况。在铜皮中央放一个圆形禁布区,如果这个禁布区把一块区域完全圈住,区域内既没有焊盘也没有过孔,Repour之后这一小块就会被判定为孤立区域,变成典型的孤岛。尤其是异形板、多挖空设计的板子,这种Keepout切出来的碎铜数量非常可观。
1.3 切铜、分解多边形与网络替换的连带副作用
第三类来源比较隐蔽,很多人根本没想到。
- 用Slice Polygon(切分多边形)挖掉特定区域时,AD会按切割线生成新的铜皮块。如果只保留其中一部分,另一块没有连接目标的铜皮不会自动消失,它会作为孤岛残留下来。
- 用Explode Polygon(把铜皮分解为自由图元)之后,铜皮脱离自动灌铜机制。后续Repour All不会重新生成被炸开的铜皮,内部的碎铜只会越来越多。
- 把一个铜皮的网络从GND改成AGND,如果原来的铜皮上只有GND过孔、没有任何AGND过孔,Repour之后这块铜皮就会变成AGND网络的孤岛。这种问题极其隐蔽,因为铜皮位置没变、形状没变,看起来没有任何异常,只有检查网络连接时才暴露。
所以我有个习惯:遇到孤岛铜先别急着删。看一眼它是哪个网络、从哪次改动之后出现的,如果刚做完某个操作就冒出来,直接Ctrl+Z回到改动前,可能比手动删几十块碎铜快得多。
2. 先定位再动手:用DRC和连通性选择把孤岛一块块揪出来
定位之前先说一个原则:屏幕上的铜皮层层叠叠,靠肉眼一格一格扫屏去找孤岛,一定会漏。尤其是多层板,底层铜皮被上层导线挡住,视觉干扰非常大。AD本身提供了两套靠谱的定位思路,一个是自动检查,一个是手动反选。
2.1 DRC中的Un-Routed Copper:让规则检查替你报坐标
AD的规则系统里有一项专门针对多边形铺铜连通性的检查,名称叫Un-Routed Copper,中文界面翻译为“未布线铜”或“未连接铜”,不同版本翻译有差异。它的作用就是检查多边形铺铜中是否存在没有连接到本网络其他导体的孤立铜区。
操作路径不复杂:
- 打开Design > Rules,进入PCB Rules and Constraints Editor。
- 左侧规则树里展开Electrical类目,找到Un-Routed Copper。
- 确认这项规则处于启用状态,在线检查(Online)和批量检查(Batch)都可以勾上。
- 关闭规则编辑器,执行Tools > Design Rule Check。
- 在DRC对话框里找到Rules To Check按钮,进入后只勾选Un-Routed Copper这一项。这一步很关键,不然整板几千条间距、线宽报告混在一起,你根本找不到孤岛记录。
- 运行检查,Messages面板里会列出所有Un-Routed Copper Constraint违规项,每条都带坐标。
双击报告项可以直接跳转到对应位置。这个坐标通常就是孤岛铜的中心或边缘,放大后能看到高亮对象。我实测下来,DRC对普通有网络铜皮的孤岛识别非常准,基本不会被误报。
2.2 Connected Copper的反向筛选:选中范围暴露真相
DRC能解决的场景很多,但偶尔也有拿不准的情况。比如DRC报告了某个坐标,跳转过去之后,发现那块铜皮好像有连接,又好像没有。这时候用Connected Copper功能做一次反向验证就非常有效。
操作方法是:单击你怀疑的那块铜皮,然后执行Edit > Select > Connected Copper(编辑 > 选择 > 相连铜皮)。AD会从当前选中对象出发,把所有与它物理相连的同网络导体全部选中。
判断逻辑很简单:
- 如果选中范围只有这块铜皮自己,没有任何Pad、Via、Track跟着亮,那它基本可以断定是孤岛。
- 如果连带选中了走线、过孔、焊盘,说明这块铜皮真的连到网络里去了,删除前要慎重。
这个技巧对单块铜皮的确认非常高效,唯一的限制是它一次只能从一个起点触发,不适合全板批量扫描。所以我的完整流程是先用DRC把明确的孤岛坐标全拉出来,删除后,再对任何拿不准的铜皮用Connected Copper复核。
2.3 层筛选与相似对象选择:多铜皮叠加时减少视觉干扰
铜皮高发区域的视觉干扰是个很现实的问题。同一块区域,顶层有铜、底层有铜、中间层可能还有电源平面,你明明想选中顶层的孤岛,鼠标点到下面其他层铜皮的情况经常发生。
解决办法是让显示变“干净”一些。双击任意铜皮,在属性面板里能看到它的Layer和Net信息。右键选择Find Similar Objects(查找相似对象),可以按Layer、Net、Object Kind等条件筛选出同一批铜皮,然后统一高亮、统一观察。多层板可以在View Configuration面板里关闭非目标层的显示,或者按快捷键Shift+S进入单层显示模式,只看当前编辑层的铜皮和走线。
还有一个小提示:不要直接在大面积铜皮上用框选方式圈选删除,这样太容易误选和铜皮重叠的其他元素。框选永远是最后手段,能点选就点选,能用DRC跳转就用DRC跳转。
3. 三种清理手段的实测对比:直接删、属性选项、批量重灌铜
定位完成之后就是清理环节。清理手段根据孤岛数量分三档:数量少手动删除,数量中等靠Remove Dead Copper选项,数量大配合Polygon Manager批量Repour。下面按顺序实测复盘。
3.1 手动拾取删除的正确姿势
手动删除是基础操作,但很多人连“选中铜皮”这个动作都做得不对。Solid(实心)填充模式下,单击铜皮填充区域内部一般会选中整个多边形;Hatched(网格/栅格)模式下,单击网格线区域才能选中。如果点到铜皮外边框,选中可能是边框线本体,Delete之后会留下铜皮残片。
选定后确认状态栏显示的是Polygon对象,再按Delete删除。如果之前用过Explode Polygon,铜皮已经被拆分成多段自由图元,Delete只会删掉你点中的那一段,需要反复Delete直到删干净。
手动删除适合孤岛数量少、位置分散的板子。数量一多,人的注意力会疲劳,很容易漏掉一两个隐蔽角落。我个人只在小板、双层板或孤岛不超过十块的场景下手动处理。
3.2 Remove Dead Copper选项的真实工作逻辑
Remove Dead Copper是AD多边形铺铜自带的防孤岛机制,中文界面可能显示为“移除死铜”或“删除孤立的铜”。它位于多边形铺铜的设置区域里,双击铜皮打开属性面板就能看到。
很多人的误区是以为勾上这个选项,现存孤岛就会立刻消失。实际上不是。勾选之后,必须重新灌铜(Repour)这块多边形,AD才会按照新设置重新生成铜皮,自动把死铜剥掉。只勾不Repour,选项等于白设。
另外,这个选项是针对单块多边形的,不是全局开关。板子上有十块铜皮,你只勾了其中一块,那另外九块依然会产生孤岛。我每次新建铺铜时都会确认这个选项勾上了,Repour All之前再逐一检查一遍。
实测中,Remove Dead Copper最可靠的使用场景是大面积铺地平面,尤其板上有很多GND过孔和缝合孔的情况。Repour之后,所有无法与任何GND过孔连通的小铜岛会被自动清除,效果非常稳定。
3.3 Polygon Manager与Repour All的批量先后顺序
当整板铜皮数量很多,或者刚改完板框需要全板刷新时,单块Repour显然不现实。这时候用Polygon Manager配合Repour All是标准做法。
打开Tools > Polygon Pours > Polygon Manager,面板里会列出当前PCB上的所有多边形铺铜对象,包括每块铜皮所在的层、网络、以及当前是否需要重新灌铜的状态。在管理器里可以直接选中某块铜皮跳转到PCB视图,也可以调整铜皮之间的优先级。
Repour All在多边形菜单里可以找到,也可以在任意铜皮上右键,进入Polygon Actions子菜单选择Repour All。执行后,AD会按铜皮优先级顺序把所有需要更新的多边形重新灌一遍。
这里有一个顺序问题必须提醒:先把每块铜皮都改成需要的属性(勾上Remove Dead Copper、确认网络、确认层级),再执行Repour All。不要在Repour All之后又去改其中一块铜皮的属性,那样其他铜皮不会跟着更新,等于白跑了一遍。
另外,Repour All是有可能不可完全撤销的。虽然AD有Undo机制,但铜皮数量多、网络复杂时,撤销后经常出现某些铜皮没有恢复到原状的情况。所以执行Repour All之前一定要保存工程,至少可以退回去。
4. 勾选Remove Dead Copper也拦不住的漏网之鱼:实测中的翻车场景
如果你的板子已经勾了Remove Dead Copper,也跑了Repour All,DRC Un-Routed Copper也跑了,结果板子上还是存在孤岛,基本就是下面三种情况。这三种我都在实际项目里遇到过,逐个说清楚。
4.1 No Net铜皮:没有归属网络AD就无法判断死活
第一种是最常见的漏网之鱼:铜皮的Net属性是No Net。Remove Dead Copper判断死铜的逻辑是,一块有网络的铜皮是否连接到了本网络的其他导体,如果没有连接就判定为死铜。但No Net铜皮压根没有网络归属,等于没有参照物,AD无法判断它该不该留。
现象就是:板框外挂着一块铜皮,属性里Net是No Net,Remove Dead Copper勾了,Repour All跑了,DRC也没报告,它仍然原地不动。我在板框修改后经常碰到这种,改板框之前板内铜皮可能是有网络的,板框一缩,网络连接点全被切掉,Repour时AD生成了一块No Net的独立铜皮,后续各种检查都拿它没办法。
解决方案只有手动选中删除,或者把它手动指定到某个真实网络后再Repour。预防措施也很简单:大面积铜皮尽量绑定真实网络,不要用No Net铺铜。板外的零碎铜皮在收尾时专门检查一遍。
4.2 机械层Keepout:很多“切不开”的根源
第二种情况跟Keepout设置有关。有些工程师习惯在Mechanical 1层画禁布区域,用来表示“这里不要铜皮”。结果Repour之后铜皮照样从那条线下面铺过去,或者只切了一部分,边缘全是碎铜。
原因在于:多边形铺铜的裁剪边界只认板框(Board Shape)、Keepout对象和不同网络的导体。机械层线条在AD里属于普通图元,不是灌铜边界,AD不会拿它去裁铜皮。你把禁布区画在机械层,从视觉效果上好像“挡住了”,但灌铜引擎根本不看这一层。
正确做法是把禁布区域画在Keepout层,或者直接在对象属性里勾选Keepout选项。例如用走线、填充或区域对象在Top Keepout层画一个范围,再Repour,铜皮才会被真正裁掉。注意Keepout承载层要和你想要裁掉的铜皮层对应,想让顶层和底层都不铺铜,就用Multi-Layer的Keepout对象。
4.3 功能性死铜:连通了但存在意义存疑的地铜
第三种情况最微妙,不是软件能自动判断的。有些铜皮明明连着网络,Connected Copper能选中一整片,DRC也不报任何错误,但从功能设计角度看它就是不该留。
我举个例子:射频板上一块GND铜皮,只连了一个GND过孔,但位置紧贴敏感射频走线。从网络连接角度它不是死铜,但它的存在相当于给信号路径旁边竖了一根额外的耦合天线,对噪声抑制没有任何帮助。这种铜皮属于“功能性死铜”,软件无法识别,只能靠设计师根据布局和信号走向判断。
我的经验是,在射频或高频信号附近,看到“只连一个过孔、面积又很大”的地铜时要格外敏感。要么给它补足够的地过孔阵列,让它真正成为地平面的一部分;要么干脆删掉,不要留半吊子。低频数字板里这种问题不那么敏感,但板子只要走高频信号,这块就值得认真对待。
5. 进阶玩法:写一个小脚本按网络批量清理孤岛
如果板子改了很多版,每次都能生出一堆孤岛,靠手工删除确实折腾。这时候可以考虑写一个小脚本做批量清理。AD的脚本系统不算难,我用DelphiScript写过类似的清理工具,分享下思路。
5.1 脚本解决什么问题
脚本的核心任务很简单:遍历PCB板上所有多边形对象,把“有网络但没有连接到任何同网络导体”的铜皮找出来,记录坐标或者直接删除。对几十块铜皮的整板而言,这种批量扫描比人眼一个个翻快得多,也不会漏掉隐藏在角落的小碎铜。
但脚本删除有一个致命问题:操作不可完全撤销。如果脚本逻辑有一点瑕疵,可能把一些边缘情况误判为孤岛并删除,恢复会非常麻烦。所以我的建议是,脚本第一阶段只做报告,不执行删除。先把疑似孤岛的坐标、所在层、网络名输出到Message面板或导出文本文件,人工或DRC复核后再手动清理。跑通几次确认逻辑没问题了,再加删除功能。
5.2 实现思路与伪代码
脚本逻辑大致分五步:
- 获取当前PCB板对象。
- 遍历所有Polygon(多边形铺铜)对象。
- 读取每块多边形的Net属性。
- 如果Net为No Net,直接列入可疑列表。
- 如果Net存在,查找同网络的所有Pad、Via、Track,判断它们是否与这块多边形存在物理连接。如果没有任何连接,就判定为孤岛。
用DelphiScript风格写出来大概是这个雏形:
// 伪代码,需按具体AD版本调整API var Board : IPCB_Board; Iterator : IPCB_BoardIterator; Poly : IPCB_Polygon; begin Board := PCBServer.GetCurrentPCBBoard; Iterator := Board.BoardIterator_Create; Iterator.AddFilter_ObjectSet(MkSet(ePolygonObject)); Iterator.AddFilter_LayerSet(AllLayers); Iterator.AddFilter_Method(eProcessAll); Poly := Iterator.FirstPCBObject; while Poly <> nil do begin // 1. 读取 Poly.Net 名称 // 2. 若为 No Net,标记为可疑孤岛 // 3. 若网络存在,查找同网络Pad/Via/Track // 判断是否与Poly连通 // 4. 无连接则输出坐标到Messages面板 Poly := Iterator.NextPCBObject; end; Board.BoardIterator_Destroy(Iterator); end;这段代码只是思路版本,AD不同版本的Scripting API有差异,函数名和对象属性会有出入,实际使用时到你安装的AD版本安装目录下查一下对应文档。Ad的是否能直接调用物理连接判断?不能,物理连通性判断逻辑比听起来复杂得多,尤其当走线从铜皮内部穿过、或者同一网络存在多块铜皮时,需要处理的情况很多。
5.3 脚本的适用范围和边界
实测下来,脚本适合的场景是大批量、规则相对单一的同网络铜皮,比如整板的GND铜皮。它的优势是稳定、全面、一次扫完;劣势是无法处理“功能性死铜”,也没办法判断“这块铜皮连了一个过孔但连得不合理”。所以脚本只能作为DRC的补充,不能完全替代人工判断。
如果你不想写脚本,其实DRC加Connected Copper已经能覆盖90%的场景。脚本更多是给那些每周都要改板、天天跟孤岛搏斗的工程师提供一个省时间的出口。
6. 从源头减少孤岛铜:铺铜策略和操作习惯
聊完清理和坑,最后说说怎么少折腾。清理手段再强,也不如让孤岛根本不出现。我自己的铺铜阶段基本上固定了一套流程,执行下来,孤岛数量比早期凭感觉操作时少了太多。
6.1 铺铜前固定板框和禁布区
板框(Board Shape)、Keepout、板内挖孔这些边界条件,一定要在铺铜开始之前全部确定。不要边铺铜边改板框,更不要先铺完一整板铜再去改L形角、加螺丝孔挖空。每一次改边界,整板的铜皮网络连接关系都可能被重新洗牌,孤岛就会一批批地冒出来。
异形板尤其要注意。L形、圆弧下部、不规则缺口这些位置,天然就是孤岛的高发区。角落和狭小窄带区域的铜皮,Repour后经常因为间距不够变成孤立小块。如果板框还没最终确定,可以临时用Keepout把不确定的区域先封掉,等板框定型再放开铺铜。
6.2 同网络铜皮与Clearance设置
多边形铺铜的属性面板里有Net Options区域,其中有一个关于覆盖同网络对象的下拉选项,准确名称是Pour Over Same Net Objects,中文可能是“覆盖同网络对象”。选择覆盖所有同网络对象或覆盖同网络铜皮,会让同一网络的多块铜皮尽量合并,而不是各自为战。铜皮合并得越好,被切出碎岛的概率越低。
Clearance间距也不能无脑设太小。间距越小,可生成的细窄铜带就越多,这些细窄铜带在生产环节更容易被蚀刻分离,看起来也像孤岛。很多新手喜欢把铺铜间距压到0.1mm以下追求所谓“高利用率”,结果反而制造出一堆细碎铜条。在满足电路板工艺规则的前提下,把铺铜间距稍微放宽一点,孤岛数量会明显下降。
另外,如果为了抑制噪声而给大面积铜皮加Via Stitching过孔阵列,注意尽量均匀分布。过孔疏密不均,会在铜皮内部形成复杂的切割边界,Repour时容易把大片铜皮切成零碎小片。
6.3 灌铜后的自查流程:一个小习惯减少返工
我的个人习惯是:每完成一次Repour All,立刻跑一遍DRC里的Un-Routed Copper。即使当时不准备清理,也先看一眼报告数量。数量从几十块变成零,心里才有底;如果跑了之后数量反而上升,说明这次改动引入了新的边界问题,趁早回退。
出Gerber之前再跑一遍。因为钻孔文件、板框文件在CAM工具里会再次“切割”铜皮,有些碎铜只有在CAM视图里才暴露出来。用CAM工具或者AD自带的Output Job打开覆铜层对比一眼,确认没有多余的浮铜再下单。
最后补一条经验:无论用哪种方法清理孤岛,都不要在完全没保存的情况下直接按Delete。铜皮操作最忌讳的就是改了一堆才发现想回退但回不去。保存工程、执行操作、验证结果,这个顺序任何时候都不要乱。