
1. 项目概述异形焊盘为什么绕不开Shape Symbol1.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是RectangleWidth1.0mmHeight0.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 - NewDrawing 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.0mmSoldermask膨胀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 TopExpand设为0.1mm然后点击Etch shape。这样会生成一个外扩0.1mm的Shape而且它和Etch shape保持同心同形状。实际操作有几个细节第一Z-copy生成的Shape类型默认可能不是Static Solid建议在Options里设为Static Solid。因为阻焊层不需要动态铜皮动态层在Gerber输出时偶尔会出幺蛾子。第二如果Etch shape本身是由多个边界组成的复杂ShapeZ-copy有时候会把内外边界一起复制生成一个带缺口的Soldermask shape这时候要手动检查尤其注意凹槽部分。如果复制出来的开窗太大可以用Edit - Shape - Edit Boundary手动把向内凹的那段边界拉回去。第三如果一个焊盘里有多个独立的Etch shape比如两个不相连的铜皮共用一个焊盘引脚你需要在Soldermask层分别复制它们或者画一个大的连通的Soldermask shape包住它们。但要注意连通的开窗之间如果跨过不同网络可能会在焊接时形成桥连。绝大多数情况下不同网络的Pin不会共用一个焊盘这个问题不大。4. 实操案例从零做一个D型异形焊盘4.1 第一步创建D形Shape SymbolD形焊盘在很多定位结构件中使用外形是半圆加矩形。我们演示一个直径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.0mm0.8mm1.8mm如果矩形与半圆相切则边界交点处会有重叠实际绘制时按自己的尺寸逻辑处理即可。画完后选Shape - Compose Shape在Options面板里Class选择ETCHSubclass选Top然后依次点击半圆和矩形边界点击Complete。此时会生成一个闭合的Etch shape。为了保险用Shape - Check检查一下。然后切到Soldermask Top用Edit - Z-copyExpand设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 SymbolCHK的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那一格是ShapeSymbol 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/TOPAD的Top Solder对应Allegro的SOLDERMASK/TOPAD的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的线宽定义为0Artwork可能会拒绝输出线宽为零的图形。虽然对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查看器核对开窗位置。我之前做个异形焊盘时就是因为漏了检查最后一项结果板厂反馈顶层阻焊开窗缺失只能重新投料时间和费用都浪费了。从那以后这七条检查项成了我所有封装库的标准动作现在基本没再出过这类问题。