1. 项目概述:异形焊盘为什么绕不开Shape Symbol
1.1 异形焊盘的真实需求
做电源、射频或者接口防护时,PCB上经常出现非标准形状的焊盘。比如射频天线的弹片焊盘是L形,电源模块的大电流引脚是中间挖槽的U形,还有一些半圆D形焊盘用于定位或散热。这些形状用Padstack Editor里那几种常规几何图形(圆形、方形、椭圆、圆角矩形)根本拼不出来。虽然你可以在PCB页面画一个Shape然后Assign Net,但这样做封装库不完整,换板子、换库、转厂导出Gerber都容易出问题。真正规范的做法,是在Allegro里用Shape Symbol把异形焊盘先定义出来,再被Padstack引用,然后放进封装。
1.2 Shape Symbol与普通Padstack的本质区别
普通焊盘在Padstack里只需要填参数,比如Regular Pad的Shape是Rectangle,Width=1.0mm,Height=0.6mm,剩下的上下层、锡膏层、阻焊层都按规则自动生成。而Shape Symbol是一个独立的图形文件,后缀一般是.ssm,它不是参数化的,而是用绘图工具画出来的一个实际图形。这个图形里,你可以画出任意多段线、圆弧、圆角组合,再通过Compose Shape生成一块铜箔。然后Padstack里指定这个Shape Symbol作为某个引脚某一层的焊盘形状。这样一来,焊盘的形状、阻焊开窗、助焊层都可以完全自定义,而不是只能套用固定的几种几何图形。
1.3 这篇文章能帮你解决什么
这篇文章的核心,是所有异形焊盘中最容易忽视的两个环节:导入层设置和阻焊开窗。很多工程师创建Shape Symbol时,只画了Etch层,导致阻焊开窗没有;或者从AD/PADS转过来的异形焊盘,因为层名称映射不对,导入Allegro后要么焊盘变绿油覆盖,要么DRC一片红。这篇文里我会从零演示一个D形焊盘的完整制作流程,把每一步的层设置、文件类型、Padstack引用、Artwork输出全部讲透,顺便把自己踩过的坑和排查方法一并列出来。适合刚切换到Allegro的硬件工程师,也适合正在给模块封装做库的老手。
2. Shape Symbol导入层设置,拆开揉碎讲
2.1 一张Shape Symbol里到底要放哪些层
首先要明确,Shape Symbol不是只能画铜皮。在创建.ssm文件时,工作区里同样有Class和Subclass的概念。对异形焊盘来说,最终要在封装中被识别的层包括:
- Etch Top / Etch Bottom:实际导电层,必须是闭合的Shape。
- Soldermask Top / Soldermask Bottom:阻焊开窗层,决定哪里露铜哪里盖绿油。
- Pastemask Top / Pastemask Bottom:锡膏层,开钢网用,SMT焊接时决定上锡区域。
- Silkscreen Top / Silkscreen Bottom:丝印层(可选)。
- 可能还有Boundary / Place_Bound_Top:用于器件占位,一般可以在封装里加。
在Padstack引用Shape Symbol时,核心是Etch层和Soldermask。Pastemask在很多异形焊盘上反而不需要,比如压接端子、大面积散热焊盘通常不锡膏印刷,这一点后文会说。
2.2 层设置实操:从新建Shape Symbol到保存
新建文件:菜单File -> New,Drawing Type选择Shape symbol,文件名比如DPAD_SSM。这里有个基础但是很多人会弄混的点:不要选Package symbol,也不要选Mechanical symbol。Shape Symbol的编辑界面没有封装引脚,只画图形。
画Etch Shape:在工具栏的“Layer”下拉框中,找到Etch Top作为当前层,然后用Add -> Shape(或直接点击右侧的Shape图标),开始画外形。可以是矩形加圆弧,也可以直接用Add -> Rectangle和Add -> Arc画好边界,再用Shape -> Compose Shape把它们组合成一个完整的Shape。注意组合时,边界必须是闭合的,不能有交叉或缺口。如果不闭合,系统会弹窗警告。
画Soldermask:画完Etch后,把当前层切到Soldermask Top,再用同样方法画一遍外形。通常做法是用Edit -> Z-copy直接把Etch复制到Soldermask层,然后向外扩大一定的值,比如0.1mm。对于异形焊盘,这个操作建议手动调整边界,而不是简单粗暴地把整个shape膨胀,因为有些异形区域不需要开窗,例如两个引脚之间的凹槽可能要保留阻焊桥。
画Pastemask:按实际焊接需求画,大多数异形焊盘用于插件或压接,不需要Pastemask。如果是有SMT需求的异形焊盘(如屏蔽罩焊盘),则同样Z-copy Etch并略小一些或者等大,避免锡膏外溢。
画完后保存为DPAD_SSM.ssm。注意保存路径要放在Allegro能搜索到的库路径下,最简单的方法是设置HOME变量,或者放到当前工程的symbols目录。我在刚学的时候,保存完直接去Padstack里引用,结果系统报找不到Shape Symbol,后来才发现是库路径没加。
2.3 层设置常见误区:Etch、Soldermask、Pastemask必须分清
这里集中说三个我见过的翻车现场,你大概率也会遇到:
第一个误区是只画Etch层,不画Soldermask层。有些教程演示简单焊盘时,为了省事只在Etch层画了Shape,然后在Padstack的Solder Mask选项里填一个膨胀值就算完了。但对于异形焊盘,这种方式问题很大:Padstack的Soldermask膨胀是基于焊盘的中心和边界自动生成的,如果异形焊盘形状复杂,膨胀出来的开窗不一定和焊盘完美匹配,凹角处可能开窗过大,导致焊盘之间的阻焊桥变细甚至消失。更稳妥的做法,是在Shape Symbol里手动画Soldermask开窗。
第二个误区是层选反。比如做一个Top层焊盘,却在Etch Bottom里画了Shape,这样从正面看焊盘完全消失,容易怀疑人生。检查方法:在Allegro里用Color/Visibility把Etch Top打开,如果只看到Etch Bottom的shape,那说明层选错了。
第三个误区是只顾着画Shape,忘了在Padstack中设置Shape Symbol。很多人画完.ssm就以为完事了,直接在PCB Editor里放一个symbol却找不到焊盘。实际上,Shape Symbol不能单独作为焊盘使用,必须先在Padstack Editor里指定它。
3. 阻焊开窗的正确姿势:大小、形状与工艺
3.1 为什么异形焊盘的阻焊开窗比普通焊盘更容易翻车
阻焊开窗直接决定PCB出厂后哪些铜皮是裸露的。普通焊盘的开窗,Allegro的Padstack Editor里可以用Solder Mask选项卡设置一个比焊盘尺寸大的膨胀值,例如Regular Pad宽度1.0mm,Soldermask膨胀0.1mm,那么开窗就是1.2mm。这个方法对圆形、方形等规则焊盘非常省事。但异形焊盘不一样,它往往包含凹槽、尖角、细长条等特征。如果你也是只填一个膨胀值,系统是用焊盘的外接矩形或者原始形状往外扩展,扩展后很可能把焊盘之间的阻焊膜全部推掉,造成大面积开窗。
我举个实际案例:一个U形焊盘,中间有个方孔,如果只在Padstack里设置Soldermask膨胀0.2mm,生成的开窗往往会变成一个外接矩形+方孔也开窗,导致中间不该露铜的地方露铜,不仅影响美观,还可能形成锡珠短路。正确做法是Shape Symbol里单独画Soldermask区域,比如U形焊盘只在铜皮边界上向外延伸0.1mm,中间的凹槽区域依然保留绿油。
3.2 阻焊开窗的形状设计:膨胀值、最小阻焊桥
开窗尺寸到底预留多少?行业内常用经验值是0.1mm到0.15mm,也就是单边比焊盘铜皮大4到6mil。这个值要结合PCB厂的工艺能力来定。如果你的板厂最小线宽线距是0.1mm,阻焊桥最小能做到0.1mm,那么开窗膨胀值就不能太大,否则相邻焊盘开窗会连在一起。另外,对于BGA类细间距器件,异形焊盘很少见,但如果有,开窗建议做到焊盘等大甚至内缩,因为BGA焊盘本身很小,绿油桥很关键。
设计开窗形状时,要遵守两条:
- 保证焊盘铜皮每个面都被开窗覆盖,不能有一侧被绿油盖住。可以用“Etch shape向外偏移0.1mm后,检查是否完全包含Etch shape”这种方式在软件里确认。
- 保证两个不同网络的焊盘之间的阻焊桥宽度不小于板厂最小要求,通常≥0.1mm。可以量一下Soldermask层两个shape的间距。如果小于0.15mm,就要去调整开窗形状,比如局部内缩,或者加大焊盘间距。
3.3 在Shape Symbol里画Soldermask的具体方法
打开已经画好Etch shape的.ssm文件,切换到Soldermask Top层。这里推荐用Z-copy来复制Etch shape,并在Options面板里设定Expand值。具体:选择Edit -> Z-copy,在Options里Target layer选择Soldermask Top,Expand设为0.1mm,然后点击Etch shape。这样会生成一个外扩0.1mm的Shape,而且它和Etch shape保持同心同形状。实际操作有几个细节:
第一,Z-copy生成的Shape类型,默认可能不是Static Solid,建议在Options里设为Static Solid。因为阻焊层不需要动态铜皮,动态层在Gerber输出时偶尔会出幺蛾子。
第二,如果Etch shape本身是由多个边界组成的复杂Shape,Z-copy有时候会把内外边界一起复制,生成一个带缺口的Soldermask shape,这时候要手动检查,尤其注意凹槽部分。如果复制出来的开窗太大,可以用Edit -> Shape -> Edit Boundary手动把向内凹的那段边界拉回去。
第三,如果一个焊盘里有多个独立的Etch shape(比如两个不相连的铜皮共用一个焊盘引脚),你需要在Soldermask层分别复制它们,或者画一个大的连通的Soldermask shape包住它们。但要注意,连通的开窗之间如果跨过不同网络,可能会在焊接时形成桥连。绝大多数情况下,不同网络的Pin不会共用一个焊盘,这个问题不大。
4. 实操案例:从零做一个D型异形焊盘
4.1 第一步:创建D形Shape Symbol
D形焊盘在很多定位结构件中使用,外形是半圆加矩形。我们演示一个直径1.6mm半圆、矩形长度1.0mm的D形焊盘。
新建Shape Symbol,文件名DPAD_D_SSM。当前层选Etch Top。用Add -> Arc画出以(0,0)为圆心、半径0.8mm的半圆,起点(0,0.8)终点(0,-0.8);再用Add -> Line从(0,0.8)到(1.0,0.8)再到(1.0,-0.8)再到(0,-0.8)。注意矩形长度1.0mm是额外延伸的长度,整个D形焊盘的总长度是1.0mm+0.8mm=1.8mm(如果矩形与半圆相切,则边界交点处会有重叠;实际绘制时按自己的尺寸逻辑处理即可)。
画完后选Shape -> Compose Shape,在Options面板里Class选择ETCH,Subclass选Top,然后依次点击半圆和矩形边界,点击Complete。此时会生成一个闭合的Etch shape。为了保险,用Shape -> Check检查一下。
然后切到Soldermask Top,用Edit -> Z-copy,Expand设0.1mm,复制Etch shape。再切到Pastemask Top,如果需要,Z-copy Expand设-0.05mm(因为钢网开口通常比焊盘小一点,防止锡膏外溢)。保存。
4.2 第二步:在Padstack Editor里精准引用Shape Symbol
打开Padstack Editor,新建一个Through hole或Single top焊盘,名称比如DPAD_D_T。在Layers表格中,找到Regular Pad对应的ETCH TOP单元格,点击下拉框选择Shape,然后在下方的Symbol Name栏输入DPAD_D_SSM。注意选项卡顶部还有一个类似“Regular Pad”和“Thermal Relief”的选择,异形焊盘一般不用Thermal Relief,因为热焊盘形状复杂,如果用Thermal Relief通常用Flash symbol,但异形焊盘上不建议,除非你专门画Flash。
同时,在SOLDERMASK TOP那一行,同样选择Shape并指定DPAD_D_SSM,因为我们在Shape Symbol里已经包含了阻焊开窗。如果Padstack里也设置了Soldermask膨胀,Allegro会以哪个为准?实际规则是:如果选择了Shape作为Soldermask形状,就会忽略Padstack里定义的Regular Soldmask膨胀值,完全以Shape Symbol中的SolderMask shape为准。这点很重要,避免你填了0.2mm但自定义shape没有膨胀,出现开窗比想象小的情况。
需要说明的是,Padstack里每一层焊盘类型有Undefined、Null、Circle、Square、Oblong、Rectangle、Octagon、Shape等选项,异形必须选Shape。不要在Regular Pad里填数值,而是选Shape后指定Symbol name,再设置Width/Height。我个人习惯把Width和Height设成Shape的实际外框尺寸,方便生成封装时预览和坐标对齐。有些工程师设成0,也能工作,但不推荐。
4.3 第三步:在PCB Editor中验证与DRC检查
把Padstack保存后,新建或打开一个封装Symbol,放置一个引脚,在Pin编辑框里选择刚刚建好的Padstack DPAD_D_T。放置完成后,放大查看:D形焊盘上应该有铜、绿油窗,且丝印可加。
这时建议打开两个显示面板:Color/Visibility里勾选ETCH TOP、SOLDERMASK TOP、PIN等。观察D形焊盘边缘:如果Soldermask shape没有完全包住Etch shape,你会看到一圈绿油间隙,需要回.ssm里调整Z-copy的Expand。
然后跑DRC。重点看Manufacturing类的Solder Mask Sliver、Shape to Shape Spacing等。如果出现红色错误,多半是Soldermask shape与相邻Pin或铜皮的间距不够。异形焊盘因为形状不规则,特别容易触发与内层平面的距离问题。如果报的是Etch到Etch短路,检查一下是否在Shape Symbol里误把Soldermask层画成了Etch层,或者Z-copy时把Class选错了。
4.4 第四步:Gerber输出与阻焊检查
在输出光绘前,先到Manufacture -> Artwork的Film Control里确认:
- 顶层铜:Film包含ETCH/TOP,并且有对应线宽;如果使用了Shape Symbol,CHK的Shape图形会自动包含进去。
- 顶层阻焊:Film包含SOLDERMASK/TOP。很多人这里漏了,导致Gerber里看不到开窗。
输出Gerber后,建议用CAM350或Allegro自带的Artwork审查工具载入光绘文件。重点看Soldermask Top是否有完整的D形开窗,且开窗不能覆盖到相邻焊盘。检查时可以用D码显示Shape。CAM350里如果发现开窗缺失,回到Allegro检查是不是该层没有被选入Artwork,或者Shape Symbol的Soldermask层根本没画。
5. 常见问题与排查技巧实录
5.1 导入后只有外形没有焊盘是怎么回事
这个问题我在新手期遇到过很多次。症状是封装里放了引脚,但PCB上只看到丝印和外形,焊盘铜皮显示不出来。大多数原因是Padstack中ETCH TOP的Shape没有选择正确,或者Shape Symbol文件不在库路径下。检查方法:打开Padstack Editor,看ETCH TOP那一格是Shape,Symbol Name是否显示DPAD_D_SSM。如果是Null或者Undefined,重新选择。另外还要确认Shape Symbol文件是否在同一目录且命名正确,Allegro对文件名大小写其实不敏感,但对路径很敏感。还有种冷门原因:Shape Symbol里Etch shape被放在了Board Geometry层而不是Etch层,导致Padstack能引用但生成不了铜皮。
5.2 从AD/PADS转过来的异形焊盘为什么老掉层
很多同事用AD或PADS做好异形焊盘,然后通过转换工具导入Allegro,结果发现焊盘变成方孔或者完全丢失。这是层映射没设对。AD里的Top Layer对应Allegro的ETCH/TOP,AD的Top Solder对应Allegro的SOLDERMASK/TOP,AD的Top Paste对应PASTEMASK/TOP。如果转换时没有指定这些映射,Allegro会把AD的Top Layer错误转到Board Geometry或干脆落到DEFAULT层。
遇到这种情况,我建议先转成较低版本,比如Allegro 16.6能开的格式,因为高版本转换可能带有额外的DBC信息。然后在转换设置里仔细核对Layer Map,把每个网络层、阻焊层一一对应。另外还有一种“allegro转pads文件”的需求刚好反过来,转出去时也容易把Shape Symbol转成普通铜皮,导致后续编辑困难,这个要特别提醒:转了之后,最好在PADS里重新检查焊盘属性,因为格式转换的本质是中间数据重排,没有哪种工具能100%无损保留异形焊盘的几何定义。
5.3 DRC报错信息逐个看
异形焊盘最常见的DRC是Shape on Shape spacing。比如D形焊盘旁边的走线距离不够,会报Shape to shape间距不足。解决方法是调整走线,或者放大焊盘间距。还有Solder Mask Sliver错误,意思是两块阻焊开窗之间的绿油桥小于最小宽度。排查时可以打开DRC浏览器,点击错误,Allegro会高亮两个对象,其中一个是绿油shape边缘。如果确实太窄,就需要手动修Soldermask shape,把开窗收窄一点,保证阻焊桥大于0.1mm。
还有Etch to Etch短路类错误。如果你用Z-copy时把Soldermask shape误选为Copper层,导致搞出了一个铜皮,就会和原Etch shape完全重叠,Allegro直接报短路。这类错误在Color View里可以看到两个重叠的Etch shape,删除其中一个即可。经验是:在Shape Symbol里创建Soldermask时,千万注意Class要选SOLDERMASK,不是ETCH。很多时候点得急,一不留神就把层选成了Etch。
5.4 阻焊开窗在光绘里消失的三大原因
第一个原因:Artwork Film里没有包含Soldermask层。很多工程师在设置Film时只勾了ETCH,忽略了Soldermask。打开Manufacture -> Artwork,找到对应层的Film,把SOLDERMASK/TOP加进去。
第二个原因:Shape Symbol的Soldermask shape是动态铜皮还是静态shape?如果是动态铜皮,且在PCB里没有指定网络或未再流,可能会在Gerber输出时被吞掉。我在Shape Symbol里一律使用静态Shape,因为焊盘的Soldermask开窗不需要动态铜皮行为。确认方法:在Shape Symbol编辑器里选择该Shape,看属性,如果显示Dynamic Copper,建议用Shape -> Change Shape Type改成Static Solid。
第三个原因:输出光绘时Undefined Line Width警告。如果Soldermask shape的线宽定义为0,Artwork可能会拒绝输出线宽为零的图形。虽然对Shape的填充不影响,但对轮廓可能有问题。一般我们在Artwork的设置里把Undefined Line Width填上6mil或10mil,这样就不会漏掉细线图形。
6. 效率优化:用Skill和规范库管理异形焊盘
6.1 用Skill批量创建Shape Symbol
当板上需要几十个不同尺寸的异形焊盘时,一个个手动画Shape Symbol太痛苦。Allegro支持Skill脚本,可以用axlDBCreateShape函数,在新建的Shape Symbol窗口里,传入坐标数组和层名,就可以批量生成任意多边形。再比如D形焊盘,可以用三角函数生成半圆+矩形顶点坐标,然后循环生成多组尺寸。
不过我建议,如果只是偶尔做一两个,不要轻易去写Skill,因为调试环境比较复杂,还得排查版本兼容。真正常用的场景是,公司有统一封装库,需要对几十个异形焊盘做参数化更新。这时候花半天时间写一个脚本,比手动快很多。我写过最实用的一个Skill,是输入宽度、长度、圆角半径后自动生成一个圆角矩形异形焊盘的Shape Symbol和对应Padstack,然后直接输出封装。这类脚本的难点在于要正确设置当前层的Class和Subclass,以及保存文件时要用axlSaveDesign。有兴趣的可以在Cadence的Skill文档里找axlDBCreateShape的用法试一下。
6.2 统一层命名与封装库管理的经验
异形焊盘的库管理,最怕的就是各做各的,层命名混乱。比如有人在Shape Symbol里把阻焊开窗画在BOARD GEOMETRY/SOLDERMASK_TOP,而不是标准的SOLDERMASK/TOP,那Allegro的Padstack和Gerber输出都可能识别不到。我建议公司内部定一个规范:所有Shape Symbol文件统一用.ssm后缀,文件命名以SHAPE_前缀加引脚功能描述;所有层必须使用Allegro标准Class/Subclass,不另建自定义层。库路径统一维护,用Cadence的库管理器统一管理,比散在各项目文件夹里靠谱得多。
再一个经验是:Shape Symbol里不建议同时画多个尺寸的焊盘图形,一个文件只画一个焊盘形状。不要试图把一个复杂的组合封装放进去。我在一个项目里偷懒,把一个L形加一个U形全部画在同一个Shape Symbol里,结果Padstack引用时只能引用其中一块,另一个无法独立使用,最后只能拆成两个文件。
7. 最后再分享几个小技巧
7.1 调用异形焊盘时用Z-copy还是直接放
在PCB Editor里,你可能需要通过Create Shape给某个异形焊盘铜皮重新画一块。但真正做库的时候,我不建议直接在板级画Shape来模拟焊盘,因为那样难以维护,且换网表容易丢。推荐封装里直接放Padstack。如果需要在板上对某个异形焊盘做局部修整,可以用Edit -> Z-copy先把Shape Symbol的轮廓复制到Board Geometry层作为辅助,修改完再删除。这样不会破坏原库。
7.2 电源大电流焊盘的开窗与补泪滴处理
电源模块的大电流异形焊盘,阻焊开窗通常要比焊盘大0.15mm到0.2mm,并且要避免开窗跨过via。因为大电流焊盘需要上锡加厚,开窗大一点,但这也可能导致Soldermask与旁边信号焊盘间距不够。这种情况我建议先在SolderMask层用静态shape手动修出隔离槽,而不是整体膨胀。还有,这类焊盘接走线时建议加泪滴,Allegro的Route -> Gloss -> Parameters里可以开启Add Teardrop,泪滴从Shape边缘延伸到线宽,能有效减少应力断裂。
7.3 个人总结的检查清单
做完异形焊盘,我通常会按下面这张表过一遍,避免出厂后才发现问题:
- 形状是否正确:Etch Shape闭合,无自交。
- 层是否齐全:ETCH、SOLDERMASK、PASTEMASK(如需)、SILKSCREEN。
- Soldermask是否完全包裹Etch shape,且与相邻焊盘间距≥0.1mm。
- Padstack中ETCH和Soldermask都指定了Shape。
- 库路径能否被Allegro找到,保存后重新打开已放置的封装验证。
- Gerber输出前确认Artwork Film包含所有相关层。
- 用CAM350或在线Gerber查看器核对开窗位置。
我之前做个异形焊盘时,就是因为漏了检查最后一项,结果板厂反馈顶层阻焊开窗缺失,只能重新投料,时间和费用都浪费了。从那以后,这七条检查项成了我所有封装库的标准动作,现在基本没再出过这类问题。