1. 坐标文件到底是个什么东西
坐标文件,英文叫 Pick and Place File,也有人叫它贴片坐标文件、SMT 坐标文件。干过 PCB 生产的兄弟都清楚,这是从设计文件走向物理 PCBA 的必经之路。板子画完、Gerber 导出之后,下一步就是把元器件的位置信息交给工厂,让贴片机知道哪个料该放在哪个坐标上。
Altium Designer 从早期版本到 2024 版,输出坐标文件的入口一直在File → Assembly Outputs → Generates Pick and Place Files这个路径下。但很多新手第一次点开这个菜单的时候会懵——弹出来的对话框里一堆选项,格式选 CSV 还是 TXT?单位选公制还是英制?要不要包含镜像底层器件?这些选项选错了,工厂那边轻则打电话跟你确认,重则贴出来的板子全偏。
坐标文件本质上就是一张表,每一行对应一个元器件,列里面包含Designator(位号)、Footprint(封装)、Mid X、Mid Y、Rotation(旋转角度)、Layer(所在层)这几项核心信息。工厂的 SMT 工程师拿到这个文件,配合钢网和物料清单,就能把贴片程序编出来。所以这个文件的核心诉求就两个:坐标要准,角度要对。
我见过太多案例,板子设计得漂漂亮亮,结果坐标文件里旋转角度跟工厂的贴片机坐标系对不上,整批板子贴出来电容电阻全歪了 90 度。这种问题在打样阶段还能手焊补救,到了批量生产就是灾难。所以别小看这个导出动作,里面的门道值得花时间搞清楚。
这篇文章适合三类人看:刚入行的 PCB 设计新手、经常跟 SMT 工厂打交道的硬件工程师、以及想把自己设计流程标准化的老手。我会把 Altium Designer 2024 输出坐标文件的完整流程拆开讲,包括每一步为什么这么做、参数怎么选、踩过哪些坑、怎么跟工厂对接。看完你就能直接上手操作,不用再去论坛翻零散的帖子。
2. 输出前的准备工作与核心参数决策
2.1 为什么坐标原点必须重新设置
这是我最想强调的一点,也是新手最容易忽略的地方。Altium Designer 默认的原点在你创建 PCB 文件时那个绝对零点,通常在板子的左下角很远的地方,甚至可能是负数坐标。如果你直接导出,坐标文件里的 X、Y 值会是一堆很大的数字,工厂那边看着就头疼。
正确的做法是:在导出坐标文件之前,手动把原点设置到板子的一个基准点上。通常选板子的左下角,或者选一个 Mark 点作为基准。操作方法是Edit → Origin → Set,然后点击板子上你想要的基准位置。
为什么这么重要?因为 SMT 工厂的贴片机有自己的机械坐标系,他们需要把你的坐标文件跟他们的设备坐标系做对齐。如果你给的原点是一个很偏的位置,工厂工程师就得自己做偏移换算,多一道工序就多一个出错的可能。你把原点设在板子左下角,工厂拿到之后直接就能用,省事又准确。
注意:设置原点之后,板子上所有器件的坐标都会变成相对于新原点的值。设置之前最好确认一下板框是否已经最终确定,因为板框一改,原点可能就得跟着调。
2.2 单位选择:公制还是英制
Altium Designer 2024 输出坐标文件时,单位选项有Metric(公制,毫米)和Imperial(英制,密尔)两种。我的建议是优先选公制。
原因很直接:现在主流的 SMT 贴片机,尤其是国产设备,默认都用毫米作为单位。你给英制文件,工厂那边还得乘以 25.4 换算,虽然计算不复杂,但人为换算就有出错的风险。而且国内大部分工厂的工程规范里,坐标文件要求就是公制。
当然也有例外。如果你合作的工厂明确要求英制,那就按他们的要求来。关键原则是:跟工厂确认清楚他们要什么单位,然后严格按他们的要求输出。不要自己拍脑袋决定,也不要两个版本都发过去让人家选,这样只会增加沟通成本。
2.3 格式选择:CSV 与 TXT 的取舍
Altium Designer 支持输出 CSV 和 TXT 两种格式。CSV 就是逗号分隔值文件,可以用 Excel 直接打开,直观易读。TXT 通常是制表符或空格分隔的纯文本。
我个人的习惯是输出 CSV。理由有几个:第一,CSV 可以直接用 Excel 打开检查,你能一眼看到所有器件的坐标和角度,方便核对;第二,大部分工厂的贴片编程软件都支持直接导入 CSV;第三,万一有问题,CSV 用文本编辑器也能打开排查,通用性最强。
不过要注意一个坑:CSV 文件用 Excel 打开时,如果位号里含有类似日期格式的字符串(比如 R1-2 被识别成日期),Excel 可能会自动转换格式导致数据错乱。所以检查的时候最好用文本编辑器或者 Notepad++ 打开看原始内容,确认没问题再交给工厂。
2.4 底层器件的镜像处理
这是一个技术含量比较高的选项。PCB 有顶层和底层之分,底层器件在物理世界里的位置是镜像的。Altium Designer 在输出坐标文件时,对于底层器件有两种处理方式:
- 保持原始坐标,标注 Layer 为 Bottom:工厂根据 Layer 字段自行处理镜像
- 输出镜像后的坐标:直接给出底层器件在镜像坐标系下的位置
主流做法是第一种,即输出原始坐标并标注所在层。因为工厂的贴片程序会根据层信息自动做镜像处理,你提前镜像了反而可能导致双重镜像。但这个规则不是绝对的,有些工厂会要求你输出镜像坐标,所以还是那句话——提前跟工厂确认。
在 Altium Designer 2024 的 Pick and Place 设置对话框里,有一个Include Bottom Layer Components的选项,勾上之后底层器件也会包含在输出文件中。这个必须勾,否则底层器件就丢了。
3. Altium Designer 2024 输出坐标文件完整实操
3.1 第一步:确认 PCB 设计完整性
在导出坐标文件之前,先做一轮检查。这一步很多人跳过,结果导出的文件里缺器件或者多器件,到了工厂才发现问题。
检查清单如下:
- 所有元器件是否都已经放置到 PCB 上,没有遗漏在原理图里的
- 是否有器件被误删或者重复放置
- 器件的位号是否唯一,没有重复的 Designator
- 封装是否都正确,没有出现封装缺失的情况
- 板框是否已经最终确定,尺寸不会再改
我一般会按快捷键T → O(Tools → Outputs)先看一眼,或者在 PCB 面板里逐个检查器件列表。如果设计是从原理图同步过来的,建议先做一次Design → Update PCB Document确保原理图和 PCB 完全一致。
3.2 第二步:设置坐标原点
前面已经讲过原点的重要性,这里说具体操作。在 PCB 编辑界面,点击菜单Edit → Origin → Set,光标会变成十字形,然后点击你想要作为原点的位置。通常选板子的左下角顶点。
设置完成后,你可以按Ctrl+End把视图跳回原点位置,确认一下是否设置正确。另外,在View → Status Bar里可以看到当前光标相对于原点的坐标,移动鼠标到板子右下角,看看坐标值是否合理(应该是正数,且跟板子尺寸匹配)。
实操心得:如果你的板子有工艺边或者拼板,原点最好设在拼板后的整体左下角,而不是单板的左下角。因为工厂贴片是针对整个拼板进行的,原点跟拼板对齐更合理。
3.3 第三步:打开 Pick and Place 设置对话框
菜单路径:File → Assembly Outputs → Generates Pick and Place Files。
点击之后会弹出Pick and Place Setup对话框。这个对话框里有两列,左边是Output Formats(输出格式),右边是Output Options(输出选项)。
在 Output Formats 里,你会看到CSV和Text两个选项,分别对应逗号和制表符分隔。我通常两个都勾上,CSV 给自己检查用,Text 给工厂备用。但如果你确定工厂只要一种,那就只勾一种,避免混淆。
在 Output Options 里,有几个关键设置:
- Units:选 Metric(毫米)
- Include Bottom Layer Components:勾选
- Include Mirrored Bottom Layer Components:一般不勾,除非工厂明确要求
3.4 第四步:配置输出列与格式细节
在 Pick and Place Setup 对话框的下方,有一个Output Columns区域,这里决定了 CSV 文件里包含哪些列。默认情况下,Altium Designer 会输出以下列:
| 列名 | 含义 | 是否必须 |
|---|---|---|
| Designator | 元器件位号 | 必须 |
| Footprint | 封装名称 | 必须 |
| Mid X | 器件中心 X 坐标 | 必须 |
| Mid Y | 器件中心 Y 坐标 | 必须 |
| Rotation | 旋转角度 | 必须 |
| Layer | 所在层(Top/Bottom) | 必须 |
| Comment | 注释信息 | 可选 |
| Description | 描述信息 | 可选 |
我的建议是至少保留前六列,Comment 和 Description 看工厂需求。有些工厂的编程软件会读取 Comment 列来做物料匹配,那就保留;如果工厂只用位号和坐标,那就可以去掉,让文件更简洁。
另外注意Rotation列的角度格式。Altium Designer 默认输出的是器件的实际旋转角度,范围通常是 0 到 360 度。但有些贴片机的角度定义跟 Altium 不一样,比如有的设备是逆时针为正,有的是顺时针为正。这个问题在打样阶段就要跟工厂确认清楚,批量生产前最好先做一次首件确认。
3.5 第五步:生成并检查输出文件
设置好之后,点击OK,Altium Designer 会在项目文件夹下生成一个Project Outputs文件夹,里面就是坐标文件。文件名通常跟项目名一致,后缀是 .csv 和 .txt。
生成之后,一定要打开检查。我一般用 Notepad++ 或者 VS Code 打开 CSV 文件,重点检查以下几项:
- 器件数量是否跟 PCB 上的实际数量一致
- 位号是否有重复或遗漏
- 坐标值是否都是正数(如果原点是板子左下角)
- 旋转角度是否在合理范围内
- 底层器件的 Layer 字段是否正确标注为 Bottom
如果发现器件数量不对,最常见的原因是有些器件被设置成了Exclude from Pick and Place。在 Altium Designer 里,每个器件都有一个Assembly属性,如果某个器件的Exclude from Assembly被勾上了,它就不会出现在坐标文件里。这个属性在器件的 Properties 面板里可以查看和修改。
4. 跟 SMT 工厂对接的实战经验
4.1 工厂到底需要哪些文件
很多新手以为给一个坐标文件就够了,实际上工厂需要的是一套完整的资料包。通常包括:
- 坐标文件(CSV 或 TXT)
- Gerber 文件(包含各层光绘文件)
- BOM 清单(物料清单,含位号、型号、封装、数量)
- 钢网文件(通常是 Gerber 里的 Paste 层)
- 装配图(PDF 格式,标注器件位置和位号)
坐标文件和 BOM 是配套使用的。工厂的工程师会拿坐标文件里的位号去 BOM 里找对应的物料,然后把物料信息和坐标信息一起录入贴片程序。所以坐标文件里的位号必须跟 BOM 里的位号完全一致,一个字符都不能差。
我遇到过一个问题:BOM 里写的是 R1、R2、R3,坐标文件里因为某个器件被手动改过位号,变成了 R01、R02、R03。结果工厂匹配不上,打电话来问。虽然最后解决了,但耽误了半天时间。所以导出之前,务必核对位号的一致性。
4.2 角度偏差的排查与修正
角度偏差是坐标文件里最常见的问题。表现就是工厂贴出来的板子,某些器件的方向跟设计不符。比如设计里电容是横着的,贴出来变成竖着了。
这个问题的根源在于Altium Designer 的角度定义跟贴片机的角度定义可能不一致。Altium Designer 里,器件的旋转角度是相对于器件封装本身的零点定义的。而贴片机的角度零点通常是基于编带方向或者设备自己的坐标系。
解决这个问题的标准流程是:
- 先打样,让工厂按坐标文件贴几块板
- 检查首件,看哪些器件的角度不对
- 记录偏差规律,比如所有 0603 封装的电容都偏了 90 度
- 在 Altium Designer 里批量修正这些器件的旋转角度
- 重新导出坐标文件,再次确认
有些工厂会提供他们自己的角度修正表,告诉你哪些封装需要加多少度。拿到这个表之后,可以在 Altium Designer 里用Find Similar Objects批量选中同封装的器件,然后统一调整旋转角度。
注意:角度修正最好在 PCB 设计阶段就做好,不要等到导出坐标文件之后再改。因为坐标文件是设计文件的衍生品,改了坐标文件不改设计文件,下次导出又回到原样了。
4.3 坐标精度与小数位数
坐标文件里坐标值的小数位数也是有讲究的。Altium Designer 默认输出的小数位数通常是 4 位,比如 12.3456。但有些工厂的贴片机只支持 3 位小数,或者 2 位小数。
小数位数太多,工厂导入时可能会报错或者自动截断。小数位数太少,坐标精度不够,贴出来的器件可能偏移。一般来说,3 位小数(微米级精度)足够了。毫米单位下,3 位小数就是 0.001mm 的精度,远远满足贴片要求。
如果工厂有明确的小数位数要求,可以在 Altium Designer 的输出设置里调整。不过 Altium Designer 2024 的 Pick and Place 设置里没有直接的小数位数选项,通常是通过修改输出格式或者后期用脚本处理。如果工厂要求特殊的小数位数,最简单的办法是导出后用 Excel 或 Python 脚本做一次格式化。
4.4 常见问题速查表
| 问题现象 | 可能原因 | 解决方法 |
|---|---|---|
| 坐标文件里器件数量不对 | 有器件被排除在装配之外 | 检查器件的 Exclude from Assembly 属性 |
| 底层器件坐标不对 | 镜像处理方式跟工厂不一致 | 跟工厂确认是否需要镜像坐标 |
| 角度偏差 | 角度定义跟贴片机不一致 | 打样确认后批量修正角度 |
| 位号跟 BOM 对不上 | 位号被手动修改过 | 导出前核对位号一致性 |
| CSV 打开乱码 | 编码格式问题 | 用 UTF-8 编码导出,或用文本编辑器打开 |
| 坐标值太大或为负数 | 原点没有重新设置 | 把原点设置到板子左下角 |
| 工厂反馈文件打不开 | 格式或分隔符不对 | 确认工厂支持的格式,CSV 用逗号分隔 |
5. 坐标文件输出后的验证与版本管理
5.1 用 Excel 做交叉验证
导出坐标文件之后,我习惯用 Excel 做一次交叉验证。具体做法是:把坐标文件和 BOM 都导入 Excel,用 VLOOKUP 函数按位号做匹配,检查两边是否完全对应。
这个操作看起来简单,但能发现很多隐藏问题。比如 BOM 里有一个器件在坐标文件里找不到,或者坐标文件里多了一个 BOM 里没有的位号。这些问题在人工检查时很容易漏掉,用 Excel 匹配就能一目了然。
具体步骤:
- 把坐标文件的 Designator 列复制到新表格的 A 列
- 把 BOM 的位号列复制到 B 列
- 用公式
=IF(COUNTIF(B:B,A1)=0,"缺失","")检查 A 列中哪些位号在 B 列中不存在 - 反过来再用
=IF(COUNTIF(A:A,B1)=0,"多余","")检查 B 列中哪些位号在 A 列中不存在
两边都没有缺失和多余,说明位号完全匹配。
5.2 版本管理与文件命名规范
坐标文件跟 PCB 设计文件一样,需要做版本管理。尤其是当板子改版之后,坐标文件也要跟着更新。如果版本管理混乱,工厂用了旧版的坐标文件,贴出来的板子就是错的。
我的做法是:坐标文件的文件名里包含版本号和日期。比如ProjectName_PnP_V1.2_20240615.csv。这样一眼就能看出是哪个版本、什么时候导出的。
同时,在项目的文件夹结构上也要清晰。我通常这样组织:
ProjectName/ ├── PCB/ │ ├── ProjectName.PcbDoc │ └── ProjectName.PrjPcb ├── Output/ │ ├── Gerber/ │ ├── PickAndPlace/ │ │ ├── ProjectName_PnP_V1.2_20240615.csv │ │ └── ProjectName_PnP_V1.2_20240615.txt │ └── BOM/ │ └── ProjectName_BOM_V1.2_20240615.xlsx └── Docs/ └── Assembly_Drawing_V1.2.pdf这样工厂拿到资料包之后,所有文件都是对应的,不会搞混。
5.3 跟工厂确认的沟通清单
每次发资料给工厂之前,我建议按以下清单跟工厂确认一遍:
- 坐标文件的单位是公制还是英制
- 坐标文件的小数位数要求
- 底层器件是否需要镜像坐标
- 角度定义是否需要修正
- 文件格式是 CSV 还是 TXT
- 位号命名是否有特殊要求
- 是否需要额外的装配图或钢网文件
这份清单看起来繁琐,但能避免 90% 以上的沟通返工。尤其是第一次合作的工厂,一定要把这些问题问清楚,后面就顺畅了。
6. 一些容易被忽略的细节
6.1 器件的旋转角度基准
Altium Designer 里,器件的旋转角度是相对于封装的零点定义的。但封装的零点在哪里,取决于封装是怎么画的。有些封装把零点放在焊盘中心,有些放在器件本体中心,有些放在 1 脚位置。
这个差异会导致同一个器件在不同封装下的旋转角度不一样。比如一个电阻,用封装 A 的时候旋转 0 度,用封装 B 的时候可能就要旋转 90 度才能达到同样的物理方向。
所以,在创建封装的时候就要统一零点的定义规则。我的习惯是:所有封装的零点都放在器件的几何中心。这样旋转角度的定义最直观,也最容易跟工厂对齐。
6.2 多引脚器件的坐标定义
对于多引脚器件,比如 QFP、BGA、连接器,坐标文件里的 Mid X 和 Mid Y 指的是器件的几何中心。这个中心是 Altium Designer 根据封装的边界自动计算的,通常是所有焊盘的外接矩形中心。
但有些器件的几何中心跟贴片机的拾取点不一致。比如某些连接器,贴片机的吸嘴可能吸在器件的某个特定位置,而不是几何中心。这种情况下,工厂可能会要求你提供额外的拾取点信息,或者在贴片程序里手动调整。
如果工厂反馈某些器件的贴装位置有偏差,先检查一下这些器件的几何中心是否跟实际拾取点一致。不一致的话,可能需要在封装里调整零点位置,或者跟工厂协商在程序里做补偿。
6.3 坐标文件的编码问题
CSV 文件的编码格式也是一个坑。Altium Designer 默认输出的 CSV 可能是 ANSI 编码,如果位号或注释里包含中文字符,用 Excel 打开可能会乱码。
解决办法是:导出后用 Notepad++ 打开 CSV 文件,确认编码格式。如果是 ANSI,转换成 UTF-8 再保存。或者直接在 Altium Designer 的输出设置里看看有没有编码选项(2024 版好像没有直接的编码设置,需要后期处理)。
如果工厂的编程软件对编码有要求,提前问清楚。大部分工厂用英文位号和注释,所以这个问题不常见,但一旦遇到就很麻烦。
6.4 拼板坐标的处理
如果你的板子做了拼板,坐标文件的处理方式会有所不同。有两种做法:
- 按单板输出坐标:工厂自己根据拼板方式做偏移
- 按拼板输出坐标:每个单板上的器件都有独立的坐标
主流做法是第一种,按单板输出。因为拼板方式可能会变,工厂拿到单板坐标后,根据实际的拼板间距和排列方式做偏移计算,灵活性更高。
但如果工厂要求按拼板输出,那就需要在 Altium Designer 里把拼板后的所有器件都包含进来。这种情况下,通常是用Embedded Board Array或者Panelize功能来做拼板,然后导出整个拼板的坐标文件。
实操心得:拼板坐标文件最容易出的问题是器件位号重复。因为每个单板上的位号是一样的,拼板后就会出现多个 R1、多个 C1。工厂处理这种情况时,通常会在位号前面加前缀来区分,比如 R1_1、R1_2。这个规则要提前跟工厂确认好。
7. 从坐标文件反推设计问题
坐标文件不只是给工厂用的,它也是检查自己设计的一个好工具。我经常通过坐标文件发现一些设计上的问题。
比如,有一次我导出坐标文件后,发现有两个器件的坐标完全一样。检查之后发现是封装重叠了,两个器件放在同一个位置。这种问题在 PCB 视图里如果不放大看,很容易忽略,但在坐标文件里一查就出来了。
还有一次,我发现某个器件的旋转角度是 45 度。正常情况下,器件的旋转角度应该是 0、90、180、270 这些正交角度。45 度说明这个器件被误旋转了,虽然不影响电气连接,但贴片时可能会有问题。后来检查发现是手动拖动时不小心转了角度。
所以,导出坐标文件之后,花几分钟做一次数据检查,往往能发现一些隐藏的设计问题。这比等到工厂反馈问题再回头改要高效得多。
8. 批量处理与脚本自动化
如果你经常需要导出坐标文件,可以考虑用 Altium Designer 的脚本功能做自动化。Altium Designer 支持 Delphi Script、VB Script 和 JavaScript,可以写脚本自动完成原点设置、输出配置、文件导出等操作。
一个简单的思路是:写一个脚本,自动把原点设置到板框左下角,然后按预设的参数导出 CSV 和 TXT 文件,最后把文件复制到指定的输出目录。这样每次改完板子,跑一下脚本就能得到标准化的坐标文件,不用手动点一堆菜单。
不过脚本开发需要一定的学习成本,如果你只是偶尔导出坐标文件,手动操作也够用。但如果你负责多个项目,或者团队里有多人协作,脚本自动化能显著减少人为错误。
Altium Designer 的官方文档里有脚本 API 的说明,网上也有不少开源的脚本可以参考。我自己的做法是先用手动操作跑通流程,然后把重复性的步骤用脚本封装起来。这样既保证了灵活性,又提高了效率。
9. 个人经验总结
坐标文件这个东西,说简单也简单,点几下菜单就能导出。但要说复杂,里面的细节确实不少,每一个细节处理不好都可能导致生产问题。
我这些年踩过的坑,总结下来就是几条:原点要设对,单位要统一,角度要确认,位号要匹配,版本要管理。这几条做到了,坐标文件基本不会出大问题。
另外,跟工厂的沟通非常重要。不要假设工厂什么都知道,也不要假设自己的文件一定没问题。每次发资料之前,按清单确认一遍,发完之后主动问一下工厂有没有问题。这种主动沟通的习惯,能帮你避免很多不必要的返工。
最后分享一个小技巧:如果你不确定坐标文件是否正确,可以先让工厂用这个文件做一次首件贴装。首件确认没问题了,再批量生产。虽然多花一点时间,但比批量出问题之后再补救要划算得多。尤其是新板子第一次生产,首件确认是必不可少的环节。