做封装这几年,我最怕的不是走线,而是异形焊盘。射频屏蔽罩那圈L形接地脚、MOS管底部带镂空的大散热焊盘、连接器带缺口的焊接端子——这些形状在Allegro原生库里根本找不着,靠手绘shape又容易画出自相交的非法图形。后来我养成了一个习惯:把结构工程师给的那份DXF当作起点,在Allegro 16.6里从导入、闭合轮廓、构Shape,再到Shape Symbol、Pad Designer和Package Symbol,把整条链路完整跑通。这篇文章就是那套流程的复现和踩坑复盘,适合手里正拿着DXF不知道从哪下手的封装工程师、PCB工程师,以及自学的硬件开发。
1. 什么情况下非用DXF不可:需求盘点与方案取舍
1.1 异形焊盘最常见的四类场景
先用一张表把典型场景说清楚,方便你对号入座:
| 场景 | 形状特征 | 典型器件 |
|---|---|---|
| 射频屏蔽罩接地脚 | 沿屏蔽罩外圈分布的一长条L形或阶梯形焊盘 | WiFi/蓝牙模组屏蔽罩 |
| 功率器件散热焊盘 | 大面积矩形铜皮,中央开槽或开孔避让过孔 | MOSFET、IGBT、电源模块 |
| 连接器焊脚 | 带圆角、缺口或非对称轮廓的金属端子 | 板对板连接器、USB座 |
| 特殊天线/接触弹片 | 弧形、环形或不规则多边形 | NFC天线触点、弹片接地 |
这类焊盘有一个共同点:形状由机械结构决定,而不是由电气规则决定。屏蔽罩的L形脚要跟罩子底框完全贴合,散热焊盘的避让槽要跟螺钉位、过孔位对齐,这些尺寸最早都出现在结构工程师的DXF图纸里。
1.2 为什么绕道DXF,而不是在Allegro里手绘
在Allegro里手绘shape不是不行,但有几个现实问题。一是复杂轮廓的圆弧、相切、倒角在GUI里一点一点描,效率极低,还容易在拐角处留下肉眼看不见的微缝;二是手绘出来的图形没有"原始依据",后面结构改版,你根本不知道当初那个圆角是怎么定出来的。
DXF路线的核心优势是"坐标系即真相"。机械工程师在AutoCAD里画好的焊盘轮廓,本身就是闭合的、带精确尺寸的图形,导入后只需要做拓扑整理,不需要重新设计。对于需要跟金属外壳、屏蔽罩做1:1贴合的场景,DXF是误差最小的传递方式。另外从流程协作上看,结构给DXF、硬件给原理图、封装工程师在中间做转换,这本身就是大多数公司已经跑通的协作模式,你没有理由绕开它。
1.3 整条技术链路先看一眼
在进入细节之前,先把全流程骨架放在这里,后面每个环节都会展开:
DXF文件清洗 → Allegro导入DXF → 图层映射 → Compose Shape闭合轮廓 → 生成Shape Symbol(.ssm) → Pad Designer构建异形Padstack → Package Symbol摆放焊盘 → 丝印/装配/Place_Bound → DRC与报告验证。
这条链路在Allegro 16.X各版本里都通用,16.6最稳,17.4/17.2的菜单入口略有差异,但逻辑一致。
2. 开工前的三步准备:DXF清洗、单位统一与画布设置
2.1 DXF文件的三项清洗工作
很多人拿到DXF直接就往Allegro里灌,结果导入后一堆文字、标注、填充图案全部堆在图形上,选轮廓线段时眼都花了。我的习惯是在AutoCAD里先花五分钟做清洗,后面省两小时。
第一,炸开块。DXF里的焊盘轮廓很可能是块引用,Allegro对块的内层实体支持不友好,用X(Explode)全部炸开成基本实体。第二,删除文字、尺寸标注、剖面线和辅助线,只保留真正的轮廓图层。如果图层命名规范,可以用图层隔离+删除的方式快速清理。第三,检查闭合性。用PEDIT把连续的线段和圆弧合并成多段线,或者用BO(Boundary)命令生成一个闭合边界来验证:如果BO能生成闭合多段线,说明轮廓没问题;如果BO报错,说明有断点或重叠。
还有一个清洗要点:把图形移动到接近坐标原点的位置。机械图纸的坐标经常在几万甚至几十万毫米的量级,直接导入Allegro容易超出设计范围(Drawing Extents),后面选点、对齐都非常痛苦。
2.2 Allegro 16.X的设计参数设置
打开Allegro后先别急着导入,进入Setup → Design Parameters,把三样东西设好:
- Design选项卡里的User Units:如果你准备按毫米做,就选Millimeter,精度Accuracy设为2位小数;如果板子是英制,就选Mil。
- Extents:给足画布范围。做封装一般几毫米到几十毫米,但保险起见可以设到±100mm,避免后面丝印、Place_Bound超出范围。
- Grid:Setup → Grids,把非引脚格点设小一点,比如0.1mm或5mil。DXF导入后的线段端点往往不在整数格点上,如果格点太大,后面画丝印、画轮廓时捕捉会非常痛苦。
2.3 单位换算的坑:mm和mil的双向迷惑
这是整个流程里翻车率最高的一步。DXF图纸一定要先问清楚结构工程师是用什么单位画的。如果DXF画的是mm,你的Allegro设计单位也是mm,那么导入时DXF Units选Millimeter,就是1:1,不用做任何换算。
如果你的PCB设计单位是mil,而DXF是mm,也完全没问题:导入时DXF Units仍然选Millimeter,Allegro会自动把数值按单位换算成mil,10mm会显示为393.7mil。真正出问题的是"我觉得DXF是mil"这种想当然,或者把导入对话框里的单位选成了Inch,导致尺寸整体放大25.4倍。这个坑我在最后一章会给出完整的排查链路。
3. 导入DXF的操作细节与图层映射方案
3.1 DXF导入对话框逐项设置
在Allegro里执行File → Import → DXF,弹出导入对话框。逐项说明:
- DXF File:选择清洗好的文件。
- DXF Units:这里填的是源文件单位,也就是DXF自己当初用的单位。选错了后面全错,务必跟结构确认。
- Increment:默认值1即可。它是控制导入时圆弧/曲线离散化精度的参数,数值越小离散越细,但对一般的焊盘轮廓,1已经足够光顺。
- Text:如果DXF里有文字,建议直接选择忽略(Ignore),反正清洗时已经删掉了,这里只是兜底。
重点说一下Layer Mapping(图层映射)。Allegro导入DXF时,每个DXF图层都要落到一个Class/Subclass上,而不是自动落到某种默认层。点开Layer Mapping按钮,你会看到DXF图层名和Allegro层的一一对应关系。
3.2 图层映射表怎么设计
我建议不要把DXF轮廓直接映射到Etch层。原因很简单:导入的DXF线段在做Compose Shape之前只是参考图形,直接进Etch层容易被误当成铜皮,后续DRC也会报一堆莫名其妙的问题。稳妥的做法是先把轮廓线放到一个专门的参考工作层,等Compose Shape成功后再导入/拷贝到目标层。
一个典型的映射方案如下:
| DXF图层 | Allegro目标Class/Subclass | 用途 |
|---|---|---|
| PAD_OUTLINE | Board Geometry/PAD_REF | 焊盘轮廓工作层 |
| PKG_OUTLINE | Board Geometry/PKG_REF | 封装外形参考层 |
| MASK_OUTLINE | Board Geometry/MASK_REF | 阻焊轮廓工作层 |
| SILK | Package Geometry/SILKSCREEN_TOP | 丝印参考层 |
这样设计的好处是,导入完成后打开对应层就能一眼区分焊盘轮廓和外形轮廓,不会混在一起。等所有工作完成后,这些REF层可以保留也可以删除,不影响封装本身。
3.3 导入后的三个验证动作
导入完成别急着构Shape,先做三个验证动作。
一是测距。用Display → Measure(测量工具)去量一个已知尺寸,比如焊盘总长应该是5mm,量出来如果是127mm,说明单位选错了,赶紧撤销重来。二是看图层。打开颜色设置,把Board Geometry/PAD_REF单独打开,确保轮廓线齐全,没有被映射到别的隐藏层。三是看图形完整性。放大检查每个拐角,确认圆弧、倒角都导进来了,没有断裂或丢失线段。
4. Compose Shape:把DXF线段变成闭合形状的关键一战
4.1 为什么线段不能直接当Pad用
很多新手导入DXF后,看到屏幕上有一条条线段,就以为焊盘已经出来了,结果在Pad Designer里根本选不到这个图形。原因在于Allegro的Padstack识别的是"形状对象"(Shape),而不是由线段和圆弧组成的轮廓线框。
打个比方:DXF给的是围墙的平面图,但你要的是一个实心的地块。线段只是围墙,Shape才是被围墙圈起来的那块地。从墙到地块,必须经过Compose Shape这个动作,让Allegro自动识别闭合边界并填充生成一个真正的Shape对象。网上常有人搜"allegro铜皮只有轮廓",多半就是卡在这一步——轮廓在,Shape没生成。
4.2 Compose Shape标准操作步骤
以Allegro 16.6为例,操作如下:
- 把当前活动的Class/Subclass设成Board Geometry/PAD_REF。在Options面板或工作区顶部的Subclass下拉里切换,确保后续操作落到正确图层。
- 执行Shape → Compose Shape。
- 在Options面板里确认:Class/Subclass为Board Geometry/PAD_REF;Boundary Type选Boundary;Create Shape选Yes。
- 用鼠标框选所有的轮廓线段和圆弧,注意不要漏选,也不能多选其他图层的线。
- 框选后右键选择Done,结束选取。
- 此时Allegro会提示你在边界内部点一下,指定填充区域。鼠标移到轮廓内部,单击一次,Shape就会生成。
- 右键Done退出命令。
成功后,原来只有线框的位置会出现一个有填充色的Shape对象。选中它,用Display → Element查看属性,Type应该显示为Shape。
4.3 开口、自相交与"只有轮廓"的排查
Compose Shape最常见的报错是提示边界未闭合(Boundary not closed)。视觉上轮廓明明看起来是闭合的,为什么Allegro不认?因为在AutoCAD里,两条线段可能只是端点挨着端点,并没有真正相交或合并,两者之间有一条肉眼难以分辨的缝隙;或者一条线段画了两遍,重叠的线段导致边界自相交。
处理思路分两步。第一步,回到AutoCAD用PEDIT把所有连续线段合并成一条完整多段线,再用OVERKILL命令删除重叠实体。第二步,如果嫌回CAD麻烦,可以在Compose Shape时把Boundary Type选成Auto,Allegro会自动把距离接近的端点连接起来,但要注意Auto模式可能会把不该连的线也连上,生成结果一定要目视检查。
如果构Shape时提示存在自相交,先用Shape → Check检查,Allegro会高亮出问题位置,通常是某个拐角有出头线或交叉线,在CAD里修剪掉,重新导入,再做一次Compose Shape。
5. 生成Shape Symbol:异形焊盘的核心文件
5.1 两种Shape Symbol生成路径对比
Compose Shape完成后,你只是有了一个Shape对象,Pad Designer还不能直接用。Allegro的Padstack机制要求异形焊盘的正规焊盘引用一个独立的Shape Symbol文件(.ssm)。生成这个文件有两条路径。
路径一:独立创建Shape Symbol。File → New,Drawing Type选Shape symbol(.ssm),然后在这个新文件里重复导入DXF、Compose Shape的流程,最后保存为.ssm文件。这条路径最干净,因为你可以单独控制原点位置,也可以把焊盘轮廓单独维护在独立文件里,方便复用和版本管理。我推荐用这条。
路径二:从已打开的板子或封装文件里导出。选中已经构好的Shape,执行File → Export → Shape,指定文件名保存。这条路径快,但导出时的原点与当前文件原点绑定,如果文件原点没设置好,后面Pad摆放会偏,不推荐作为首选。
5.2 原点定在哪:比想象中重要
Shape Symbol的原点就是这颗焊盘在Pad Designer里的参考点,也是之后在封装里摆放Pin时用来对齐坐标的点。原点定错了,所有焊盘位置会整体偏移,而且DRC查不出来。
例如,一个连接器接地焊盘的参考点按惯例定在靠近板边的一侧,方便与机械边框对齐。在Shape Symbol文件里,用Setup → Change Drawing Origin,把原点设到你要的位置,然后移动Shape,使Shape上对应的那个角落在(0,0)处,保存。这样在Package Symbol里输入坐标(0,0)或(x,y)时,对齐的就是这个角。
如果你手上同时有多个异形焊盘,每个Shape Symbol都要单独确认原点约定,不要想当然认为所有原点都在图形正中心——实际项目中,中心偏离的反而常见。
5.3 带镂空的焊盘Shape怎么建
功率器件的散热焊盘经常要挖一个中央槽孔,用来避让过孔或做 solder mask dam。带镂空的Shape不能只靠Compose Shape一步完成,正确的操作是分两步。
第一步,先把外轮廓构成一个实心Shape,方法与前面完全一样。第二步,选中这个Shape,执行Shape → Manual Void → Add Polygon,然后选择内部镂空轮廓的线段,系统提示后在镂空区域内部点一下,镂空部分就从Shape里被挖掉了。
挖完之后一定要用Shape → Check校验,确认没有自相交,并且镂空边界完全落在Shape内部。如果镂空边界触及外轮廓,Check会直接报错。还有一种情况是"浮岛"——内部本应镂空的地方反而残留了一个小Shape,这是因为你直接对外轮廓和内轮廓分别做了Compose Shape,而没有做Manual Void。记住:Allegro的Shape只能通过Void来挖孔,不能用两个Shape叠加代替。
6. Pad Designer中构建异形Padstack
6.1 Regular Pad选择Shaped Symbol
在Allegro安装目录下打开Padstack Designer(Pad Designer)工具,File → New,输入一个能表达含义的名字,比如SMD_SHIELD_L_SHAPE。
进入Layers选项卡,找到单层面板(Single Layer Mode),以TOP层为例:
- Regular Pad一栏,默认是Circle或Square,把它改成Shaped Symbol。
- 修改后旁边会出现一个文件名输入框和浏览按钮,选中之前保存的
.ssm文件。 - 如果有Offset(偏移)需求,在这个界面里输入X/Y偏移,一般情况下默认0即可。
关键点是,Regular Pad的几何尺寸此时已经不再由数字决定,而是由.ssm文件决定。你在Pad Designer里看到的是一个不可编辑的图形预览,这很正常。
6.2 热焊盘与Flash:什么时候才需要
很多教程一讲到Padstack就要提Thermal Relief(热焊盘)、Anti-Pad(反焊盘),但异形SMD焊盘根本用不上这些。热焊盘是给通孔焊盘连接内层电源/地平面用的,防止焊接时热量被平面吸走。而绝大多数异形焊盘是表贴焊盘,不涉及内层连接,Thermal Relief直接设为Null即可。
如果遇到异形通孔焊盘(比如屏蔽罩固定脚用通孔固定),可以在Thermal Relief里引用一个Flash Symbol(.fsm),但这个Flash的形状必须和焊盘形状匹配,制作方式和Shape Symbol类似,只是保存类型选Flash Symbol。说实话,我做了这么多年封装,真正需要给异形焊盘配Flash的场景屈指可数,绝大多数情况用Null反而最安全。
6.3 阻焊与助焊层的处理习惯
异形焊盘在SolderMask层的处理最容易翻车。如果你直接把金属层的.ssm也引用到Soldermask层,等于阻焊开窗和焊盘完全等大,PCB工厂的阻焊层对位公差稍有偏差,焊盘边缘就会被绿油盖上一点,焊接时上锡不良。
正确的做法是从源头上准备两个.ssm文件:一个是金属焊盘轮廓,一个是阻焊开窗轮廓。阻焊轮廓通常在CAD里由机械工程师把原轮廓外扩0.1mm到0.15mm(4到6mil),或者你自己在Shape Symbol里用Offset曲线功能生成。在Pad Designer里,TOP层Regular Pad引用金属.ssm,Soldermask Top层引用阻焊.ssm,PasteMask Top层可以引用金属.ssm或略微缩小的版本,缩不缩小取决于钢网开口设计,一般建议跟金属等大,钢网厂会在开口时自己调整。
设置完成后保存.pad文件,注意记住保存目录,并且把这个目录配置到Allegro的User Preferences → Design Paths → padpath里,否则后面Package Symbol加载不到这颗焊盘。
7. 封装符号落地:在Package Symbol中完成最终装配
7.1 焊盘坐标从哪来:让DXF自己说话
打开File → New,Drawing Type选Package Symbol(.dra),进入封装编辑器。首先别急着摆焊盘,先把DXF再导入一次,映射到Board Geometry/PKG_REF作为参考层。这样做的原因是:焊盘在封装里的坐标,必须跟DXF里的机械坐标一一对应。
然后执行Layout → Pins,在Options面板里通过Padstack选择器选中刚才建的异形Padstack。在命令窗口输入x 0 0、x -2.5 3.2这类绝对坐标,逐个放置焊盘。坐标来源直接参考DXF参考层上的焊盘中心位置,或者更简单粗暴的做法:把网格设小,然后用捕捉模式让光标吸附到DXF轮廓的端点或中点上。
摆放完成后,把参考层关闭,焊盘位置应该正好与DXF轮廓重合。如果不重合,优先检查是不是Shape Symbol原点设置的问题,而不是急着挪焊盘。
7.2 丝印、装配层与Place_Bound搭建
焊盘摆好后,封装还缺三件套:丝印、装配外形、Place_Bound。
丝印(Package Geometry/SILKSCREEN_TOP)用Add → Line,沿着DXF外形轮廓的偏移位置画一圈,线宽设5到8mil,不要骑在焊盘上。接着用Layout → Labels → RefDes在丝印层放一个参考编号,字号按板子密度设,一般50mil左右。
装配层(Package Geometry/ASSEMBLY_TOP)用矩形或多边形把整个封装的实体范围框出来,这是给贴片机和产线看的,不需要太精细。
Place_Bound最关键,它决定了器件在布局时的占位区域和高度。执行Setup → Define Package,在弹出的对话框里设置Place Bound层为Package Geometry/PLACE_BOUND_TOP,然后框选或画一个刚好容纳整个器件的图形。同时在这个对话框里设置Height,即器件高度,一定要填,否则板级DRC的高度冲突检查会失效。
7.3 报告验证与DRC检查
保存封装之前,用Tools → Reports,选择Package Summary和Package Pin报告,检查焊盘数量、焊盘名称和坐标是否与原理图符号一致。再执行Display → Element逐个点选焊盘,确认异形Padstack正确引用,没有加载到空Pad。
最后用Tools → Database Check跑一次数据库完整性检查。如果Shape轮廓有残留问题,这一步通常会暴露出来。确认无误后保存为.dra文件,并生成.psm封装文件。
8. 实战复盘:四个高频坑位的完整排查链路
8.1 尺寸整体放大25.4倍还是缩小39.37倍
现象:导入后测量,原本10mm的焊盘长度变成了254mm,或者变成了0.254mm。
排查链路:先用Display → Measure量一个知道绝对值的尺寸;然后回到File → Import → DXF,查看DXF Units选项。这个选项代表的是源文件单位,而不是你的设计单位。如果源文件是mm,你误选了Inch,10mm的数值10会被当成10英寸,也就是254mm,这正好是放大25.4倍;如果你把mm误选成Mil,数值10会被当成10mil,等于0.254mm,缩小39.37倍。
修复方法:撤销导入,重新选择正确的DXF Units。记住一个规则:DXF Units永远填DXF自己使用的单位,与Allegro的设计单位无关,剩下的换算交给软件。实测下来16.6这一版在这个逻辑上没有任何歧义,出错基本都是人选的。
8.2 Compose Shape提示Boundary not closed的完整排查链路
现象:所有轮廓线段明明首尾相接,但Compose Shape就是报未闭合。
排查步骤按顺序来:第一步,用Zoon In放大每一个拐角,肉眼找缝隙。很多时候线段端点在CAD里看着重合,实际坐标差0.0001mm,放大后就是一条缝。第二步,在AutoCAD里用PE命令框选所有轮廓,执行Join,把所有线段合并成一条多段线,再用LI(List)查看这个多段线的属性,如果显示Open,说明没有闭合,找到断点位置。第三步,用OVERKILL清掉重叠线段,再用FILLET半径设为0把拐角连起来。
如果确实只想在Allegro里补救,Compose Shape的Boundary Type可以切到Auto,Allegro会把距离小于容差的端点自动连接。但Auto模式会对所有选中线段生效,可能出现"连错线"的结果,生成后必须肉眼确认。
8.3 镂空Pad回流后偏位:void做错的连锁反应
现象:散热焊盘在SMT打样后出现上锡不均、器件轻微偏位,用X-Ray看,中央散热焊盘的实际焊接区域比预期多了或少了。
排查链路:回到Shape Symbol,用Display → Element选中Shape,查看Void数量。如果发现中央本该镂空的位置其实是一个独立的小Shape,而不是Void,就会导致实际情况和PCB厂理解的不一致。另一个常见问题是Void边界没有完全落在Shape内,导致DRC报Void out of shape。
修复方法:重新按5.3的步骤做Manual Void,然后用Shape → Check确认。记住,Allegro只认Void,不认"Shape里的Shape",这是导致镂空焊盘各种奇怪问题的根源。
8.4 用反向DXF导出做最终校验
等到封装做完,我强烈建议做一次反向校验:File → Export → DXF,把Package Symbol里的焊盘层、装配层和丝印层导出一份DXF,叠到结构工程师原始DXF上进行比对。注意在导出对话框里选择合适的DXF单位,保证1:1。
打开对比,焊盘轮廓与机械图纸轮廓的重合度一目了然。我在16.6里实测过,正向导入时如果单位、原点都处理正确,反向导出再叠图时,焊盘边缘与原始轮廓之间的偏差几乎为零,最多是圆弧离散化带来的0.01mm级误差,完全在可接受范围内。如果叠图时发现明显偏移,优先检查Shape Symbol原点,其次检查封装的Pin坐标是否有取整误差。这个方法也顺便帮你验证了将来出光绘文件、Gerber的时候层设置是否正确,因为你在导出DXF时用到的层名和光绘层名是一致的。
最后再分享一个小习惯:每做一个异形封装,我都会把DXF清洗、导入、导出这三份中间文件连同.ssm、.pad、.dra统一归档在一个以物料编码命名的文件夹里。后面结构改版,结构工程师只需更新DXF,我再走一遍流程然后叠图对比,半个小时就能收工,比在Allegro里对着轮廓抠形状快了不止一个量级。希望这套流程能帮你少走几个我当年绕过的弯路。