
1. 生产文件到底要交给谁先把清单和原点定下来画完板子点几下鼠标就能出文件这话没错但我见过太多人把一堆.gbr打包发出去第二天板厂回一句缺钻孔文件或者贴片厂回一句坐标全是负的对不上板子。问题不在于软件不好用而在于出图之前没人把谁要什么、以哪里为基准这件事想清楚。生产文件Fabrication Outputs本质上是两份合同一份给板厂说明铜箔、阻焊、丝印、孔径和外形长什么样一份给贴片厂说明每个元件贴在哪、朝哪、用哪个料号。这两份文件必须共享同一套坐标基准否则就会出现板子做对了但贴片贴偏了这种最冤的返工。1.1 板厂要的那一包铜层、阻焊、丝印、板框、钻孔标准两层板的交付清单一般是这样的F.Cu、B.Cu铜层 GerberF.Mask、B.Mask阻焊层开窗图形F.Silkscreen、B.Silkscreen丝印Edge.Cuts板框外加 PTH金属化孔和 NPTH非金属化孔两个 Excellon 钻孔文件。四层板还要补In1.Cu、In2.Cu。这里有个容易被忽略的点阻焊层输出的是开窗图形不是覆盖图形。你在板上看到的绿色是阻焊覆盖区Gerber 里画的是哪里要露铜。所以如果你手动改过阻焊层的图形一定要在 Gerber 查看器里确认改的是开窗而不是覆盖这个方向搞反了板子直接废。Edge.Cuts板框层还有个硬性要求必须是一条闭合的轮廓线不能有断点不能有重叠的重复线段。实际生产中我遇到过一次板框右下角有一小段线被误删KiCad 的 DRC 只给了一条 Board outline is not closed 的警告我当时当成普通警告放行了结果板厂按最外侧轮廓铣出来板子多了个奇怪的小尾巴。1.2 贴片厂要的那一包坐标文件、BOM、装配图贴片厂通常要三个东西元件坐标文件.pos或.csv、BOM 表含位号、值、封装、料号、以及一份装配图PDF 或图片标注顶面底面元件位置和极性。有些厂还会要钢网文件F.Paste、B.Paste这个在 Gerber 包里顺手带上就好。坐标文件最容易出问题的就是原点和角度。KiCad 里元件的旋转角度是按它自己的坐标系算的贴片机的角度定义可能是另一套比如从 0 度开始逆时针还是顺时针。这个差异通常由贴片厂的工程师在编程时人工修正但你至少要保证坐标原点是板上一个明确的、可复现的点而不是图纸页面的原点。1.3 原点、单位和格式三份文件必须对齐的基准我在出图前的第一件事永远是去 PCB 编辑器里用Place → Drill/Place File Origin不同版本菜单文字略有差异把原点设置在板框的左下角或者左下角外侧的一个整数值位置。这一下按键决定了三件事Gerber 文件里所有图形的坐标基准虽然 Gerber 有自己的绝对坐标但原点影响辅助轴系钻孔文件的坐标基准选 Drill/Place File Origin 时坐标文件里元件的位置数值选 Drill/Place File Origin 时单位我固定用毫米Gerber 精度用 4.6单位 mm整数 4 位、小数 6 位钻孔文件用十进制格式 3 位小数。这套组合是所有板厂都能无脑吃进去的配置不要为了所谓的节省文件体积去用英寸或者省略小数位那点体积换来的是板厂打电话问你要重新出图。提示原点一旦定了中途不要改。改一次原点已发出的坐标文件就全废了。2. 出图前的最后一次自查DRC、丝印、阻焊与 DNP我在早期有个坏习惯画完就出图DRC 报的错扫一眼觉得这些都是误报就跳过。后来赔过两次板费现在流程固定出图前必须跑完 DRC设计规则检查和 ERC电气规则检查针对原理图并且逐条确认每一条报错的处置理由。2.1 DRC 报错里哪些必须清零哪些可以放行我的处理标准很简单按是否影响制造和焊接来分报错类型是否必须修说明铜层间距不足Clearance必须修板厂按你的最小间距走太细直接说做不了或加价未连接网络Unconnected必须修除非你确认那是刻意留的测试点板框未闭合必须修外形铣不出来丝印压焊盘建议修板厂通常会裁掉但裁掉后位号可能缺失焊盘间距小于阻焊桥最小值建议修会导致阻焊桥断开、连锡元件重叠必须确认结构干涉或者装配撞件看情况处理板框闭合这类错误在Board Setup → Design Rules → Constraints里能看到具体的最小值设定你可以根据板厂能力调整。常合作的板厂一般能稳定做 6/6 mil0.15mm线宽线距更高密度就要加钱或者改设计。2.2 丝印、阻焊开窗和焊盘之间的三角关系这里有个经常被搞混的机制Gerber 输出的丝印层是完整的丝印图形但板厂会把压在阻焊开窗上的丝印裁掉。这是行业惯例因为丝印油墨印在露铜的焊盘上会污染焊接面。所以有两种处理方式一是自己在 KiCad 里勾选 Plot 对话框的 Subtract soldermask from silkscreen从丝印中扣除阻焊开窗让输出文件本身就干净板厂不用再猜二是交给板厂处理但结果不可控尤其是位号被裁掉一半的情况很常见。我现在的做法是先在设计里就把位号挪开焊盘。丝印线宽保持在 0.15mm 以上位号最小高度 1mm字符高度小于 0.8mm 板厂印出来会糊。这些不是 KiCad 的技术约束是生产端的实际限制DRC 不会帮你检查。2.3 位号、DNP 与排除标记的字段管理KiCad 从 7 之后部分属性在更早版本就有给元件加了几个属性开关Exclude from BOM不参与 BOM、Exclude from Position Files不参与坐标文件、DNPDo Not Populate不贴。这几个开关的意义完全不同用错会直接导致贴片厂多贴或者漏贴。正确的用法是结构上必须存在但不贴的元件比如预留的滤波电容只勾 DNP让它出现在坐标文件和 BOM 里但标记为不贴测试点、螺丝孔、Logo 这类非元件对象勾 Exclude from BOM 和 Exclude from Position Files 两个都勾掉调试用的跳线电阻勾 Exclude from BOM 但保留在坐标里方便贴片厂预留位置。多板打样的话这个区分比什么都重要我见过一次把测试点也出了坐标贴片厂直接问这个 TP1 是什么封装料号呢。2.4 板框的完整性检查除了闭合性板框还有两个细节值得在出图前看一眼。第一是线宽板厂铣外形是按轮廓线的中心线走的所以你把板框线画成 0.1mm 还是 0.5mm最终尺寸都是一样的但太细的线在某些版本的 DRC 里可能被判定为过细。我习惯用 0.1mm 或 0.15mm 线宽画板框。第二是异形槽和开孔。板上的长条开槽如果画在Edge.Cuts层会被识别为铣槽如果画成机械层里的孔规格不同。这个必须在和板厂沟通时明确尤其是有内圆角要求的时候。3. Gerber 与钻孔文件的导出Plot 对话框逐项拆解File → Fabrication Outputs → Gerbers (.gbr)打开的就是 Plot 对话框新旧版本界面差别挺大但核心选项就那么几个。我按哪些选项会影响板子能不能做出来的顺序说。3.1 层清单和输出目录的组织层选择框里两层板的标准勾法是F.Cu、B.Cu铜层F.Mask、B.Mask阻焊F.Silkscreen、B.Silkscreen丝印Edge.Cuts板框四层板再加In1.Cu、In2.Cu。如果板上有金手指或者碳油还要勾对应的专用层。F.Paste和B.Paste只有贴片厂要而且不需要单独出一份 Gerber 给板厂——阻焊层本身就隐含了钢网信息但钢网厂需要单独的 Paste 层文件。输出目录我习惯建一个gerber/子目录文件名让 KiCad 自动生成但层文件名必须能一眼看懂。KiCad 生成的 Gerber 文件名格式是板名-F_Cu.gbr这种可读性还行如果勾了 Use Protel Gerber extensions会变成.GTL、.GBL、.GTO、.GTS这种老式扩展名好处是某些老厂家的 CAM 系统能自动识别层类型坏处是肉眼分不清。我的判断标准是如果你在跟板厂沟通时对方没提要求就用.gbr加可读文件名。3.2 精度、X2 格式和扩展名怎么选Plot 对话框里的几个关键选项我用一张表说明白选项我的选择理由Precision精度4.6mm英寸用 2.4精度足够板厂无脑识别不要再高Use X2 format勾选带网络名和属性信息方便 CAM 工程核对Protel extensions不勾除非板厂明确要求.gbr更通用Plot border and title block不勾图纸边框会变成一层多余的图形干扰 CAMDrill marksNone 或 Small这不是真实钻孔只是给钢网厂看的标记通常不需要Subtract soldermask from silkscreen勾选丝印自动避开开窗减少沟通成本Use negative plot不勾老工艺遗留选项现代流程不用X2 格式有个小坑它会把网络名写进 Gerber 文件里理论上能帮板厂做网络比较Netlist Comparison但如果你的网络名里包含空格或者特殊字符某些老版本 CAM 工具解析会出错。稳妥起见网络命名保持简洁避免中文和符号。3.3 钻孔文件Excellon 格式和槽孔的处理点 Plot 对话框里的 Generate Drill Files 进入钻孔设置。这是整个流程里最容易被忽略、也最容易出问题的环节。关键选项格式Excellon这是通用标准原点Drill/Place File Origin必须和前面设置的原点一致单位毫米零抑制格式Decimal format十进制直接写1.000这种——不要用前导零省略/尾随零省略那是给老式数控机读的PTH 和 NPTH 分开文件勾选分开。板厂更习惯两个文件且非金属化孔的处理工艺不同镜像 Y 轴不勾除非板厂明确要求这是给特定设备用的槽孔Oval / Slot的处理是重点。板上的长条孔有两种实现方式画成一排重叠的圆孔Rod或者画成椭圆焊盘/槽Oval。前者在 CAM 里会被合并成铣槽路径后者需要钻孔文件里用特殊的槽孔格式。如果你的板子上有 USB 接口的固定槽、金手指槽这类结构务必在 Gerber 查看器里确认槽孔的形状是长条而不是一串圆点。3.4 Gerber job file 值不值得出较新版本的 KiCad 在 Plot 对话框里多了一个 Generate Job File 的选项生成一个.gbrjob文件。这个文件里记录了什么层是铜层、什么层是阻焊、板子叠层结构、材料要求等信息相当于给板厂一份说明书。我的态度是出但不要指望板厂一定读它。大厂和小厂的 CAM 流程差别很大有的系统能自动解析.gbrjob有的工程师还是靠文件名自己判断。出了不亏但压缩包里该有的层一个都不能少。真正决定沟通成本的是你的文件命名习惯不是这个附加文件。4. 坐标文件、BOM、装配图和 3D贴片厂那套怎么出板厂那边出完还有贴片厂这边。这块的文件数量不多但字段含义和格式非常讲究出错一次就是几百块贴片费。4.1 坐标文件对话框里的选项和原点一致性菜单路径在 7 及以前版本叫File → Fabrication Outputs → Component Placement (.pos)8 之后改叫 Footprint Position File界面里能选格式CSV 或 ASCII、单位毫米/英寸、包含的面正面/反面/两面、以及原点基准。我固定这样配格式CSV单位毫米包含面Both贴片厂需要知道哪些件在背面原点Drill/Place File Origin和钻孔文件保持一致坐标文件里会出现三列关键数据Ref位号、PosX/PosY坐标、Rot旋转角度。角度这个值不同版本的定义可能有细微差异最稳的验证方法是自己拿坐标文件去 Gerber 查看器里对着看或者让板上的两个已知元件比如一个 0805 电阻和一个 IC在文件里的数值和实测比对一下。4.2 BOM 的字段管理让采购和贴片厂一次看懂KiCad 自带的 BOM 生成方式有几种原理图菜单里的Tools → Generate BOM会调用一个外部脚本输出 CSV。但这个脚本的输出字段取决于你元件库里的自定义字段默认输出只有位号、值、封装几个基础列。我建议在原理图符号里至少加这几个自定义字段MPN厂商料号Manufacturer厂商名LCSC或Supplier_PN采购料号方便电商下单Tolerance精度对电阻电容有用Voltage耐压对电容有用然后 BOM 导出时按Value Footprint分组位号合并成一格。这样采购拿到的是一张能直接下单的表而不是一堆需要手工合并的位号。另外一个经验BOM 里保留 DNP 元件但单独标注。有些贴片厂会直接忽略标注 DNP 的行有些会按你文件里的行数上料这个差异必须在发料邮件里写清楚不要指望对方通过字段名猜。4.3 3D 模型与 STEP装配干涉和结构件核对File → Export → STEP导出的 3D 模型是给结构工程师用的用来检查板子装进外壳后会不会撞件、连接器位置对不对。这个文件的质量完全取决于你给每个封装关联的 3D 模型.step或.wrl。我的处理原则是关键连接器、大体积元件、高度受限区域的元件必须有关联 3D 模型0402 电阻这种可以用通用的方块代替不需要精确模型。导出 STEP 时勾上 Substitute models用简化模型代替复杂模型能显著减小文件体积但会丢失细节看你的用途。装配图我一般用File → Export → PDF或者 Plot 到 SVG勾选顶层和底层的丝印层加铜层输出一份标了位号的图。有些贴片厂的老师傅更喜欢看 PDF 而不是坐标文件尤其是手工贴片的时候。5. 用自带 Gerber 查看器做交付前自检出完图直接发出去是我最不推荐的操作。KiCad 自带 Gerber 查看器独立程序或者编辑器里的 open in Gerber viewer花五分钟检查一遍能省掉几天的来回。5.1 图层对齐和镜像的检查方法打开 Gerber 查看器后先做一件事把所有层同时显示看各层是否对齐。铜层、阻焊、丝印、板框应该完全重合。如果某个层的图形整体偏移了通常是导出时的原点选项不一致导致的。然后单独看底层B.Cu、B.Silkscreen、B.Mask确认底层的图形是否需要镜像。Gerber 查看器里有一项 Flip board 或者用鼠标旋转视图用来模拟从板子背面看过去的效果。底层的丝印文字必须是可读的有些设计软件默认底层文字是镜像的导出时忘了翻转板厂印出来就是反的。5.2 阻焊、钻孔、板框的交叉核对阻焊层和焊盘的关系必须逐一看把F.Mask配F.Cu一起显示每个焊盘应该都有对应的阻焊开窗且开窗比焊盘略大一般单边大 0.05mm 左右具体由板厂工艺决定。钻孔文件导入后检查每个孔的位置是否落在焊盘中心NPTH 孔是否落在板框上或者结构件位置上。我遇到过一次定位孔因为原点设置错误在钻孔文件里偏移了 5mm板厂直接打电话来问是不是设计有问题。板框检查很简单看外形线是不是一条连续闭合的线有没有明显的缺口或者重叠段。5.3 我固定会看的几个细节每次检查我都会逐条过一遍这几项所有层的文件都生成了包括容易漏的B.Mask丝印没有压在焊盘中心尤其是 IC 的引脚和连接器阻焊开窗没有互相连成一片细间距 IC 的相邻开窗之间要有阻焊桥板框的圆角和内孔没被其他层的图形遮挡孔的数量和孔径对照制造规格确认常规板厂最小机械钻孔 0.2mm激光钻孔另算拼板如果有 V-CUT 或者邮票孔位置标在板框层或者专门的机械层这套检查流程我在最开始做的时候觉得麻烦做了十几块板之后就形成肌肉记忆了前后不超过十分钟。6. 把出图变成一条命令kicad-cli 批量化手动点对话框的问题在于不可复现半年后你要重新出一次图还得回忆当时勾了哪些选项。KiCad 从 7.0 开始带了一个命令行工具kicad-cli可以把整个出图流程固化成脚本这块我用得非常多。6.1 命令行参数怎么落到你的板子上kicad-cli的命令结构是kicad-cli {pcb|sch} export {格式}加参数。几个常用命令# 导出所有 Gerber 层 kicad-cli pcb export gerbers -o out/ board.kicad_pcb # 导出钻孔文件Excellon 格式十进制 kicad-cli pcb export drill -o out/ --format excellon \ --drill-origin absolute --excellon-zeros-format decimal \ --excellon-oval-format route --units mm \ --generate-map --map-format gerber board.kicad_pcb # 导出坐标文件 kicad-cli pcb export pos -o out/board-pos.csv --format csv \ --units mm --side both board.kicad_pcb # 导出 BOM kicad-cli sch export bom -o out/board-bom.csv \ --fields Reference,Value,Footprint,MPN \ --group-by Value,Footprint board.kicad_sch # 导出 STEP kicad-cli pcb export step -o out/board.step \ --subst-models --force board.kicad_pcb参数名在不同小版本之间会有调整用之前先跑一次kicad-cli pcb export drill --help确认这一步比你猜参数快得多。尤其是--excellon-oval-format这种不同版本取值可能是route、alternate之类的看帮助文档最稳。6.2 一条脚本搞定整包输出Linux 和 macOS 上我一般写这样一段#!/usr/bin/env bash set -euo pipefail BOARDmyboard OUTout/${BOARD} mkdir -p $OUT kicad-cli pcb export gerbers -o $OUT/ $BOARD.kicad_pcb kicad-cli pcb export drill -o $OUT/ \ --format excellon --drill-origin absolute \ --excellon-zeros-format decimal --units mm \ --generate-map --map-format gerber $BOARD.kicad_pcb kicad-cli pcb export pos -o $OUT/${BOARD}-pos.csv \ --format csv --units mm --side both $BOARD.kicad_pcb kicad-cli sch export bom -o $OUT/${BOARD}-bom.csv \ --fields Reference,Value,Footprint,MPN \ $BOARD.kicad_sch echo Done. Files in $OUTWindows 上如果kicad-cli不在 PATH 里用完整路径调用echo off set KICADC:\Program Files\KiCad\8.0\bin\kicad-cli.exe set BOARDmyboard set OUTout\%BOARD% if not exist %OUT% mkdir %OUT% %KICAD% pcb export gerbers -o %OUT%\ %BOARD%.kicad_pcb %KICAD% pcb export drill -o %OUT%\ --format excellon --units mm %BOARD%.kicad_pcb %KICAD% sch export bom -o %OUT%\%BOARD%-bom.csv %BOARD%.kicad_sch echo Done.用脚本出图的最大好处不是省时间而是版本可追溯。你可以把脚本和板文件一起提交到版本管理里出问题时对比两次输出差异能快速定位是哪次改动引起的。6.3 版本回滚和出图对比我通常会在脚本里加一步把出图的时间戳和 Git 提交号写到一个README.txt里一起打进压缩包。板厂如果反馈问题我能立刻知道是哪一版的文件而不是翻聊天记录找上个月发的那个压缩包。如果同一块板子有两个版本比如硬件改版我会分别建v1/和v2/目录脚本带上版本号参数避免文件互相覆盖。7. 那些年翻过的车真实问题和排查路径前面讲的是流程这部分讲的是具体事故。每一个都是我在实际项目中遇到的排查过程比结论更值得参考。7.1 坐标文件的数值全跑到图纸角落有一次贴片厂反馈坐标文件的 X 坐标全是负数且数值很大-100 多。原因是Drill/Place File Origin 没有设置KiCad 默认用图纸页面的原点而板子画在页面的右下角于是所有元件坐标都是负值。排查路径很清晰打开 PCB 编辑器看页面上的原点标记十字准星在哪里。如果它不在板子附近就说明原点没设。修复方法是用Place → Drill/Place File Origin重新点一下板框左下角然后重新导出坐标文件和钻孔文件两者都要重出因为它们的原点选项是独立的。这个问题的隐蔽之处在于它不会报错文件生成得好好的只是数值不对。7.2 槽孔变成了一排圆孔板子上有个 USB Type-C 连接器的固定槽我在封装里是用一圈重叠的过孔画的。结果板厂做出来是一排圆孔连接器的定位脚根本卡不住。这属于设计阶段的认知问题槽孔必须用椭圆结构或者专用槽孔图形表达不能靠一堆圆孔去模拟。在封装里画槽有两种方式一种是用椭圆焊盘加钻孔Drill 设置为 Oval另一种是在板框层画线段让板厂铣出来。前者的实现方式是在封装的焊盘属性里把孔形状改成 Oval并设置长径和短径。后来我的做法是结构性的槽一律画在Edge.Cuts层让板厂按铣槽处理焊盘内的槽比如连接器定位脚的椭圆孔用 Oval 钻孔并在钻孔文件导出时把--excellon-oval-format设成正确的槽孔表达方式。导出后必须在 Gerber 查看器里确认槽的形状是长条。7.3 拼板之后坐标对不上拼板是另一个高频翻车点。大部分人拼板的方式是复制单板多次粘贴但粘贴后的元件在坐标文件里会变成多份且坐标是按整版算的。如果贴片厂只贴其中一片坐标就对不上了。我现在的处理方式是坐标文件按单板出拼板信息单独用图纸说明。也就是说把单板的坐标文件交给贴片厂然后在 Gerber 里告诉他们拼板的方式和间距。有些贴片厂愿意自己处理拼板坐标有些则需要你提供整版坐标这个必须提前问清楚。7.4 板厂回话说缺层或者文件看不懂这种情况通常是两个原因层的命名混乱或者文件格式不标准。如果用的是老版本 KiCad 输出的 Gerber文件名可能是board-F_Cu.gbr这种还好但如果是用了 Protel 扩展名且板厂没自动识别就会问你要顶层铜。我的应对方式是随压缩包附一份README.txt用一张表说明每个文件对应哪一层、用什么单位、什么精度board-F_Cu.gbr 顶层铜箔 board-B_Cu.gbr 底层铜箔 board-F_Mask.gbr 顶层阻焊开窗 board-F_Silkscreen.gbr 顶层丝印 board-Edge_Cuts.gbr 板框 board.drl 金属化孔Excellonmm十进制 board-NPTH.drl 非金属化孔这份说明看起来多余但它是唯一能避免沟通误差的东西尤其是换新板厂的时候。8. 版本差异与归档习惯KiCad 的版本迭代挺快从 6 到 9出图相关的界面和选项变化不小。我用过的版本里有几个差异点值得记一下避免换版本之后手忙脚乱。8.1 6 到 9 的界面变化和踩过的点KiCad 6 把 Gerber 导出放在了File → Fabrication Outputs下面钻孔文件的生成入口在 Plot 对话框里。KiCad 7 延续了这个结构同时加了一些新的选项比如过孔盖油相关的设置、Gerber job file 的输出。KiCad 8 的变化更明显坐标文件的对话框名字改了菜单文字也调整了还增加了更多制造格式的导出选项。如果你从 7 升级到 8第一次打开 Fabrication Outputs 菜单可能会找不到原来的入口这时候不要怀疑自己先看菜单结构再对照官方文档的变更说明。一个通用的经验升级大版本之后先拿一块旧板子走一遍完整的出图流程和旧版本的文件做对比。Gerber 是标准格式理论上不同版本输出的内容应该一致但实际上会因为默认选项的变化产生差异比如默认精度、默认的单位、默认是否勾选 X2。用旧板子验证一遍能避免在新项目上踩坑。8.2 文件夹结构和命名规范最后说一个不起眼但影响长期效率的习惯出图目录的命名。我固定用这样的结构project-name/ ├── hardware/ │ ├── board.kicad_pcb │ ├── board.kicad_sch │ └── out/ │ ├── v1.0/ │ │ ├── gerber/ │ │ ├── board-pos.csv │ │ ├── board-bom.csv │ │ ├── board.step │ │ └── README.txt │ └── v1.1/ └── docs/每个版本目录都是完整的、自包含的。给板厂发文件时直接把v1.0打包压缩包名用项目名-版本-日期的格式。这样即使半年后有人问你上次那版文件在哪你也能在三秒内定位。我踩过的坑是早期没有版本目录所有输出文件堆在一起改版之后重新出图覆盖了旧文件结果需要对比新旧差异的时候已经没有旧文件了。从那以后我强制自己每个版本单独建目录脚本里带上版本参数。写到这里出图这件事的完整链路基本都覆盖了。真正让我少赔板费的不是某个高级技巧而是把设置原点 → 跑 DRC → 出图 → 用 Gerber 查看器逐层核对 → 写 README这套动作固定成流程每次都不跳步。这套动作第一次做要花二十分钟做熟之后五分钟它换回来的是你不用在板厂和贴片厂之间反复解释文件格式。