做PCB设计这些年,每次要给板厂发Gerber之前,我几乎都会在DRC面板里看到一串“Silk To Silk”或者“Silk To Solder Mask”的报错。一开始我也挺崩溃,明明电气规则都清干净了,器件也摆得整整齐齐,怎么一到丝印检查就冒出一堆问题?后来踩坑踩多了才明白,丝印报错虽然不是电气错误,却直接影响板子的可制造性、可读性和整体观感,很多小批量打样被板厂退回,罪魁祸首就是它。这篇博文就围绕PCB设计中最常见的3种丝印报错,把原因、解决方法和规则配置一次讲透,帮你少走弯路。
无论你是刚接触PCB Layout的新人,还是被丝印整理搞得焦头烂额的老工程师,这篇文章都能给你一套可以直接抄作业的流程。我会把丝印层的原理、DRC规则怎么设、器件位号怎么排、Gerber前怎么巡检全部拆开讲,最后再分享几个我亲测好用的排查技巧,保证实用。
1. 丝印报错到底在报什么:DRC规则里的“隐形地雷”
1.1 丝印层、阻焊层与丝印报错的本质
丝印层(Silkscreen Layer)在PCB上负责承载元器件位号、极性标识、版本信息、防静电标识这些内容,说白了就是板子上的“标签层”。而阻焊层(Solder Mask)是覆盖在铜箔表面的绝缘油墨层,正常情况不影响丝印附着。但阻焊层上会有开窗(Soldermask Opening),也就是焊盘、金手指这些需要裸露铜面或镀层的区域。丝印报错的本质,就是标签层的内容和焊盘、开窗、过孔或者其他丝印图形之间,间距小于了设计规则允许的值。
举一个比较生活化的例子:丝印相当于往板子上贴标签,阻焊开窗相当于板子上的“窗户”,标签不能贴到窗户上,否则窗户会被挡,标签本身也会因为底下是铜面或焊料而粘不牢。如果标签互相叠在一起,那就是“Silk To Silk”;标签压到窗户框,就是“Silk To Solder Mask”;标签直接贴到窗户玻璃上,就是“Silk To Pad”。理解了这层关系,再看DRC报错就不会一头雾水了。
1.2 常见丝印报错信息的英文含义
很多工程师第一次看到英文报错会懵,特别是“Silk To Silk”“Silk To Solder Mask”这种带层叠关系的名词。我整理了一个速查表,大家可以直接对照:
| 报错信息 | 实际含义 | 典型影响 |
|---|---|---|
| Silk To Silk | 丝印与丝印之间的间距小于规则值,比如两个位号字符重叠 | 字符糊成一团,位号无法辨认 |
| Silk To Solder Mask | 丝印边缘进入了阻焊开窗区域,比如压到焊盘的开窗范围 | 丝印油墨附着不牢,可能脱落或污染焊盘 |
| Silk To Pad | 丝印与焊盘边缘距离不足,甚至直接压住焊盘 | 影响可制造性,严重时造成焊接不良、位号被镀层覆盖 |
| Silk To Via | 丝印压到过孔区,尤其开窗过孔 | 丝印油墨流入孔内,文字残缺,影响外观 |
这里要特别说明:很多EDA工具会把“Silk To Solder Mask”和“Silk To Pad”合并成一个检查项,因为阻焊开窗的范围通常就是焊盘大小,所以报错时看不出来是压到开窗还是压到焊盘。要想定位准确,得在报错列表里双击跳到具体位置,再看对象属性。这也是我后面要强调的排查习惯。
1.3 丝印报错为什么必须处理:从外观到可制造性
有人觉得丝印报错是“小问题”,不处理也能打样,结果板子到了手里才发现位号看不清,维修时全靠猜。更麻烦的是,丝印油墨如果直接印在裸铜或焊盘上,过回流焊时受热容易起翘、脱落,污染焊盘表面,影响焊接可靠性。板厂收到这种文件,轻则邮件提醒你修改,重则直接以“超出工艺能力”为由拒绝下单。
换句话说,丝印报错直接牵连三件事:第一是可制造性,画板子最终要做出来;第二是可读性,位号不清楚,后期调试、维修、返修都痛苦;第三是观感,同一个板子,丝印整整齐齐和东倒西歪,客户感受完全不一样。所以别嫌DRC报错烦,把丝印规则设好,反而能省掉后面一大堆沟通成本。
2. 三种高频丝印报错:原因拆解与针对性解法
2.1 Silk To Silk:字符互相“打架”的真相与处理
Silk To Silk是我见过发生频率最高的一类丝印报错。它的直接表现就是两个或以上丝印对象之间的距离小于了设置值。常见原因有三个:一是器件位号字体太大,器件本体之间间距又很小,位号文字互相挤压;二是阵列复制器件后没有重新整理位号,比如4个LED灯一字排开,位号分别是D1、D2、D3、D4,但复制过程中文字位置没有刷新,全部叠在第一个位置上;三是手动添加的注释文本、版本号、框线和其他丝印重叠。
遇到Silk To Silk,不要一个个去拖字符,效率太低。正确的做法是先在DRC规则里把丝印到丝印的间距设好,一般建议不小于0.2mm,也就是8mil左右。如果板子密度不高,可以设到0.25mm甚至0.3mm,给生产留余量。然后在报错列表里按坐标排序,集中处理。如果是位号字符重叠,用批量重排功能把器件位号移到统一方向;如果是多余文本,直接删掉或移到空白区。
实际操作中最让我印象深刻的是处理一块电源板,密密麻麻都是电阻电容,位号几乎全堆在器件中间。当时我采取的办法是:先将所有位号字号统一改成1.2mm高、0.15mm线宽,然后使用EDA里的“位号重排”工具,把位号全部放到器件本体外侧,再手动微调个别交叉位置。这样处理完之后,Silk To Silk的报错从200多个直接降到了个位数。“统一字号+统一放置方向”这个组合拳,应对Silk To Silk非常有效。
2.2 Silk To Solder Mask:位号压住开窗区的坑
Silk To Solder Mask报错比Silk To Silk更隐蔽,因为很多器件位号虽然不在焊盘上,但它的丝印边缘已经伸进了阻焊开窗区。最容易出现的场景是:位号放在器件本体的丝印框内,而该类器件的丝印框距离焊盘只有0.05mm,当位号字体稍大,就直接压到开窗边缘。还有一种情况是封装设计阶段,丝印线条本身就画在焊盘附近,等到位号一放上去,问题就暴露了。
要解决这类报错,核心是把丝印到阻焊开窗的间距规则提前设好。在Altium Designer里,可以到Design -> Rules -> Manufacturing -> Silk To Solder Mask,新建规则并设置最小间距为0.2mm。Allegro则在Constraint Manager里的Spacing中设置Package Geometry Silkscreen与Soldermask相关子类的间距。嘉立创EDA更直观,在设计规则里选择“丝印到阻焊”的间距,填0.2mm就行。
但规则设置只是事后兜底,我更推荐在布局阶段就规划好位号位置。尤其是贴片电阻电容这类小封装,位号不要放在两个焊盘之间,也不要放在器件本体正中央,除非本体丝印框足够大。对于QFP、BGA这种引脚密集的器件,位号最好放在器件外侧0.3mm以外,再用短丝印线或箭头指向本体,这样既能保证不压开窗,又能让位号清清楚楚。
2.3 Silk To Pad:丝印压焊盘、压过孔的连锁问题
第三种高频报错是Silk To Pad,也就是丝印直接压到了焊盘上,或者离焊盘边缘太近。虽然很多情况下这类报错会被Solder Mask检查覆盖,但个别EDA会单列一项,比如Allegro的“Package Geometry Silkscreen to Pad”。它产生的原因,一是位号文案实在没地方放,被迫放在焊盘上;二是过孔开窗后,丝印线从那上面经过;三是底层丝印没有考虑镜像关系,导致视觉上没问题,实际却压在焊盘上。
处理Silk To Pad时,我的建议是“该躲就躲”。焊盘是必须裸露铜的区域,丝印油墨如果印上去,高温焊接时油墨会变脆、脱落,甚至挡住焊盘导致虚焊。过孔也一样,如果过孔不开窗、塞了油,丝印压上去影响不大;但如果是开窗过孔,丝印油墨可能会顺着孔壁流进去,形成空洞和残留物。所以规则里至少要设置0.2mm的间距,能躲多远躲多远。
有一个比较麻烦的场景是双面布局时,底层器件的位号会和顶层焊盘交错。这时候不能只看当前层,建议在DRC里同时打开所有层的丝印检查,或者分层检查,避免顶层丝印压到底层焊盘的“假通过”情况。我自己的习惯是:凡是Silk To Pad报错,第一选择是移动位号,第二选择是缩小子号和线宽,第三才是忽略。如果你发现某个报错实在无法消除,比如板边特别小的位置必须放标记,那至少要确认该区域不是焊盘或开窗,再在DRC里做例外处理。
3. 从规则设置到实操:把丝印报错扼杀在布局阶段
3.1 主流EDA的丝印间距规则配置(AD/Allegro/嘉立创EDA)
每个EDA的规则设置路径不同,但核心思路一致:找到间距规则,给丝印相关对象单独设置最小距离。我以三款最常用的工具为例,给大家列一下常规配置方法。
先说Altium Designer。菜单路径是Design -> Rules -> Manufacturing,在里面分别找Silk To Solder Mask和Silk To Silk,新建规则后把间距改成0.2mm。要注意规则优先级,如果你建了多个规则作用于不同对象,必须检查最上层的规则是否覆盖所有需要检查的区域,否则会有一条走不到导致报错没生效。
Allegro相对复杂一点,丝印在封装里属于Package Geometry下的Silkscreen子类,焊盘和开窗则分布在Pin和Soldermask等子类。打开Constraint Manager后,在Spacing的不同网络或同网络约束里,把Package Geometry Silkscreen与Pad、Package Geometry Silkscreen与Soldermask Opening的Minimum Spacing设成0.2mm。如果找不到对应条目,可以先用所有对象范围布一个通用规则,再慢慢细化。Allegro里很经典的一个问题是丝印层被误删,后面我在排查部分会专门说。
嘉立创EDA是最适合小白上手的。在“设计规则”里面找到“间距规则”,新建一条规则,分别选择丝印层和阻焊开窗,以及丝印层和丝印层,间距都填0.2mm。嘉立创EDA默认规则对丝印检查相对宽松,如果不手动设置,很多隐患不会被报出来,所以我建议大家画完板子后不要偷懒,一定自检一下规则配置。
下面放一张参数推荐表,方便按需填写:
| 检查项 | 推荐最小间距 | 说明 |
|---|---|---|
| Silk To Silk | 0.2mm(8mil) | 高密度板可放宽到0.15mm,但不建议 |
| Silk To Solder Mask | 0.2mm(8mil) | 字符边缘到开窗边缘 |
| Silk To Pad | 0.2mm(8mil) | 必要时可缩至0.15mm |
| 丝印线宽 | 0.15mm(6mil)以上 | 低于0.1mm容易断线 |
| 丝印字高 | 0.75mm(30mil)以上 | 推荐1.0mm以上,清晰度更好 |
3.2 位号自动重排与手工整理的实用技巧
很多工程师处理丝印报错都是最后统一手工拖位号,这种方式在板子器件少的时候行得通,一旦超过200个元器件,基本就变成了体力活。我的经验是分成三步:先用自动重排把位号全部刷一遍,再按方向和格点统一调整,最后用DRC验证。
自动重排这个功能在AD里叫“Reposition Selected Components”或者配合“PCB Inspector”批量修改文字位置;Allegro里可以使用“Auto Silkscreen”功能,它能够按你指定的偏移距离自动把位号放到器件外;嘉立创EDA也有“位号调整”按钮,一键把位号分散到本体外侧。自动重排不一定完美,但能把大多数重叠问题解决掉,剩下几个顽固分子再手工微调。
手工整理时,我有一个高标准:所有同类型器件的位号位置尽量保持一致。比如所有0603电阻的位号都放在本体左侧,并且保持固定偏移0.25mm;所有电容的位号都放在本体上方0.3mm。这样板子看起来非常整齐,后期的丝印检查也会很干净。还有就是极性标识,比如电解电容的“+”、二极管的方向条,一定不要放在两个焊盘正中间,尽量放在器件本体外侧,否则既容易触发丝印报错,又容易在贴片后被遮挡看不见。
3.3 出Gerber前的丝印巡检清单
画完板子不急着导Gerber,先过一遍丝印巡检清单,能省掉一多半返工时间。我一般按下面这个顺序检查:
- 检查丝印线宽和字高是否满足板厂最小工艺要求,线宽低于0.1mm的必须改粗
- 检查所有器件位号是否完整,有没有被改成“***”或者乱码
- 检查顶层丝印是否镜像,底层丝印是否需要镜像输出
- 检查丝印有没有覆盖板边、外形线、V割线、螺丝孔边缘
- 检查版本号、日期、公司Logo这些特殊标记有没有被误删
- 打开DRC,按照我前面说的三项规则重新跑一遍,确认没有丝印报错
这里插一句,很多人会忽略“底层丝印镜像”的问题。在PCB视图里看底层丝印是正面的,但Gerber文件是按顶层视角生成的,如果底层文字不打镜像标记,实际做出来的板子底层文字就是反的。最保险的做法是在Gerber预览里把底层镜像翻转一次,确认文字可读。
4. 常见问题排查与避坑实录
4.1 丝印报错排查流程:从DRC定位到批量修复
如果你已经拿到一份满是丝印报错的工程文件,不要慌。先按类型把报错分类,比如Silk To Silk是一类,Silk To Solder Mask是一类,Silk To Pad是一类,然后从数量最多的那一类开始处理。DRC列表通常支持按对象类型、坐标、网络名排序,我一般先按坐标排序,这样能快速找到同一个区域里密集报错的位置,一次处理一整块区域。
双击某一条DRC报错,视图会自动跳到对应坐标,并且高亮冲突对象。这时候要分辨是文字和文字打架,还是文字压焊盘,还是丝印线和阻焊开窗重叠。处理方式分别是移动、缩小、绕行。如果是文字和文字打架,通常选中其中一个文字,用“相似对象”选择功能把同类文字字体统一缩小;如果是压焊盘,就手动拖到空白区;如果是线压开窗,就把线往板内或板外挪一下。
批量修复时,我最推荐用“相似对象”加“对齐工具”。比如一块板子有50个位号全部压在焊盘上,可以全选这50个位号,统一设置水平偏移0.3mm,让它们从焊盘中心“弹”到本体外侧。这个操作比一个个拖快十倍,缺点是某些密度过高的区域需要二次调整,但整体效率依然很高。
4.2 那些年我们踩过的丝印坑:Allegro丝印丢失、镜像、板厂要求
先讲一个很多Allegro用户都遇到过的问题:丝印被删除了。有时候是误操作,有时候是更新封装时没保留丝印,结果板子上所有器件的位号都不见了。遇到这种情况,不要重新画位号,效率太低。如果你的工程有备份,直接恢复备份最稳。没有备份的话,可以尝试用“Auto Silkscreen”重新生成,它能根据器件属性把位号重新摆在器件外围。还有一种办法是在器件库中导出封装再重新Placement,但那样会破坏已经调好的位置,所以最好养成定期备份的习惯。
再说字体问题。AD中偶尔会出现位号变成“***”的情况,多半是因为字体映射错误。AD支持TrueType字体,但有些PCB文件在别的电脑打开时找不到对应字体,就会显示成乱码。解决方案是切换到内置的Stroke Font(笔画字体),或者把所有文字统一用同一种TrueType字体并嵌入项目。板厂最不希望看到的也是丝印字体过于个性化,印刷出来容易变形,所以我推荐使用标准矢量字体。
最后说板厂要求。不同板厂对丝印的工艺能力差异很大,有的能印刷0.1mm线宽的丝印,有的做不了,所以下单前最好问清楚。常规要求是丝印线宽不小于4mil、字高不小于30mil,丝印到焊盘间距不小于0.2mm。如果你画的是高密度板,确实无法满足0.2mm,至少也要做到0.15mm,并在给板厂的工艺备注里写明,让他们的工程人员评估。最怕的是你不说、他也不检查,等到板子出来丝印模糊不清,那时候谁都不好收场。
4.3 独家经验:怎么让报错数量从几百降到个位数
我在处理一个200多个器件的中型板卡时,曾经一次性清理过600多条丝印DRC报错。那次之后我总结了一套方法,现在新项目几乎不会出现大规模丝印报错。
第一,建立自己的封装库时,就把丝印间距问题解决掉。封装里位号默认位置不要放在焊盘边缘,丝印线的宽度统一设置为0.15mm,丝印框离焊盘至少0.2mm。这样画完板子,基础层就不会埋雷。第二,布局阶段就要随时开DRC,不要等最后所有器件都摆完了再跑。每一版布局调整后,用热键跑一次丝印检查,顺手修掉几个报错,避免问题堆积。第三,所有新进项目的规则文件必须统一。团队里如果有三个人画板,很可能三人设置了不同的丝印间距,最好由一个人维护一份规则文件,其他人直接导入,这样产出文件的一致性会好很多。
还有一个小技巧是善用脚本。Allegro里可以写一段简单的Skill脚本,一键把所有位号移动到器件中心外固定偏移位置;AD里也有类似的Queries和脚本系统。虽然学习脚本需要一点时间,但处理重复性工作特别顶用,几百个位号几秒就能重排完。
我个人在实际操作中的体会是:丝印报错本身不可怕,可怕的是没有一套固定流程,每次都在最后一刻手忙脚乱。只要在规则里把Silk To Silk、Silk To Solder Mask、Silk To Pad的最小间距都设到0.2mm,然后养成中途检查、统一字号、固定位置的好习惯,你会发现出Gerber前的那一版DRC变得非常安静,剩下的几个报错基本都是特殊情况,一眼就能判断要不要管。这种“安静”带来的安全感,真的只有被板厂退回好几版之后才懂。