ugo-silato/PCB_Reverse_Import

GitHub: ugo-silato/PCB_Reverse_Import

KiCad 插件,通过 Altium 导出的 Gerber、Pick & Place 和 BOM 文件逆向重建带真实封装的可编辑 PCB 项目,无需 Altium 许可证。

Stars: 0 | Forks: 0

# KiCad 的 Altium PnP 导入器 一个 KiCad 10 PCB 编辑器插件,用于从 Altium 制造输出文件中逆向工程 KiCad 项目,专为**没有 Altium 本身**——只有其生成的文件——的人设计:**Gerbers + Pick & Place + BOM** → 一个带有真实且位置正确的 footprint 的 KiCad 电路板。 它**不**自行转换 Gerber(KiCad 自带的 GerbView 在这部分已经做得非常好了)——它接管接下来的工作,使用 Pick & Place 坐标放置 footprint,然后与 BOM 进行交叉核对,找出仍然遗漏的任何东西。 ## 概述 ``` flowchart TD A[Altium project] -->|export| B[Gerbers] A -->|export| C[Pick & Place CSV
Front-Top / Back-Bottom] A -->|export| D[BOM
xlsx or csv] B -->|GerbView: Export to PCB Editor| E[KiCad board
raw copper/silkscreen artwork] E -->|Altium PnP Importer plugin| F[Board with real footprints placed] C --> F D -->|BOM Compare step| G[Report: components with
no footprint mapping yet] D -->|BOM Compare step| H[Missing footprints staged
next to the board] F --> H ``` ## 环境要求 - KiCad 10.x,并启用 PCB 编辑器的 Python 脚本控制台/插件(默认开启)。 - 无需安装额外的 Python 包——该插件仅使用 KiCad 自带的 Python 和标准库。 - 从原始 Altium 项目生成的三个文件(你不需要 Altium 本身——只需要这些原样交到你手里的文件),在**开始之前**准备好: - Gerber 文件(你需要的所有铜箔/丝印/外形层)。 - Pick & Place 文件,顶层一个,底层一个(或者一个合并的文件——参见 [Pick & Place 格式](#pick--place-csv-format))。 - 一个 BOM 导出文件(`.xlsx` 或 `.csv` ——参见 [BOM 格式](#bom-format))。 ## 第 0 步 — 从 Gerber 到 KiCad 电路板 (GerbView) 这发生在这个插件介入*之前*——这是你如何从你的 Gerber 文件中提取出带有铜箔/丝印图案的 `.kicad_pcb` 文件的方法。 1. **创建一个新的、空的 KiCad 项目**(从 KiCad 启动器中点击 `File > New Project...`),放在你希望这个逆向工程设计存放的文件夹中。这会生成电路板所属的 `.kicad_pro` 项目文件——你将在后续步骤中将源自 Gerber 的电路板导入其中,而不是让它作为一个松散的、无项目的 `.kicad_pcb` 独立存在。 2. 打开 **GerbView**(从 KiCad 启动器,或 KiCad 项目窗口的 `Tools` 菜单)。 3. `File > Open Gerber File(s)...` 并选择你所有的 Gerber 层(顶/底层铜箔,顶/底层丝印,阻焊层,电路板外形,钻孔文件等)。GerbView 将每一个作为单独的层加载。 ![加载所有层的 GerbView](https://static.pigsec.cn/wp-content/uploads/repos/cas/ef/efdcdd5e81f80b677d7788d904f9b6496d9283d4b68bf063d8f9a9b07af6f960.png) 4. 检查右侧面板的层列表——如果某层未被正确自动检测到,则重命名/重新排序(这对下一步很重要)。 5. **检查是否有专门的板框层**——极不可能有。Altium Gerber 导出通常不会生成单独的外形文件;外形通常嵌入/复制在其他一个或多个层中(机械层、丝印,甚至铜箔层)。在进行下一步之前,仔细查看加载的层,弄清楚哪些层实际上包含板框。 6. `File > Export to PCB Editor...`。弹出的对话框允许你将每个加载的 Gerber 层映射到对应的 KiCad PCB 层(顶层铜箔 → `F.Cu`,底层铜箔 → `B.Cu`,顶层丝印 → `F.SilkS`,底层丝印 → `B.SilkS`)。将包含板框的层映射到 `Edge.Cuts`。 ![GerbView 层映射对话框](https://static.pigsec.cn/wp-content/uploads/repos/cas/a3/a33467ea9ad538118d83a30f04ea172008b9b6b8351a7df9767351c3c320d468.png) 7. 确认——GerbView 会创建一个新电路板并在 **PCB Editor** 中打开它,所有的 Gerber 图案都被放置在对应的 KiCad 层上。此时,电路板**完全没有 footprint**,只有图形——这是预期的,也正是本插件接手的起点。 8. **清理板框**:如果它被嵌入在多个 Gerber 层中,它现在也会重复出现在多个 KiCad 层上(例如也位于 `F.SilkS` 或 `F.Cu`)。如果 `Edge.Cuts` 上还没有板框,请将其移动/重绘到那里,并**删除**最终落入其他层上的**重复副本**——否则杂乱的板框图形稍后会弄乱那些层。 9. **将电路板保存到你在第 1 步创建的项目文件夹中**(`File > Save As...`,与 `.kicad_pro` 文件在同一个文件夹中,名称保持一致是通常的惯例)。此插件会将其跟踪/报告文件保存在它旁边。 ## 第 1 步 — 安装插件 1. 将整个文件夹复制到 KiCad 的插件目录中: - Windows: `Documents\KiCad\10.0\scripting\plugins\PCB_Reverse_Import\` - Linux: `~/.local/share/kicad/10.0/scripting/plugins/PCB_Reverse_Import/` - macOS: `~/Documents/KiCad/10.0/scripting/plugins/PCB_Reverse_Import/` 2. 在 PCB Editor 中:`Tools > External Plugins > Refresh Plugins`(或重启 KiCad)。 3. 你现在应该在 `Tools > External Plugins` 下的 *Reverse Engineering* 类别中看到 **"Altium PnP Importer"**。 ![Tools > External Plugins 菜单中的插件入口](https://static.pigsec.cn/wp-content/uploads/repos/cas/df/dfb705efb213391b30a005513193284a47d10a4e8cbefbc31fb347613f2eb32b.png) ## 第 2 步 — 运行插件前需准备的数据 ### `footprint_map.json` 此文件(位于插件文件夹中)将每个 **Altium footprint 代码**(如 BOM/Pick & Place 文件中所示,例如 `CAPC2012M`)映射到一个 **KiCad footprint**: ``` "CAPC2012M": { "library": "Capacitor_SMD", "footprint": "C_0805_2012Metric" } ``` - `"library"` 必须是在 KiCad 的 `Preferences > Manage Footprint Libraries` 中注册的库的准确**别名**(而不是文件夹路径!)。对于标准 KiCad 库,这通常是不带 `.pretty` 的文件夹名称(例如 `Capacitor_SMD`)。对于个人/自定义库,使用你在那里赋予它的别名。 - `"footprint"` 是该库中准确的 footprint 名称。 某些 footprint 还需要以下两个**可选**字段——只有在导入后组件发生旋转或偏移时才添加它们: ``` "DPAK-M": { "library": "Package_TO_SOT_SMD", "footprint": "TO-252-3_TabPin2", "origin_offset": { "default": { "x": 1.86, "y": 0.0 }, "180": { "x": 0.0, "y": -1.86 }, "270": { "x": 1.86, "y": 0.0 } }, "rotation_offset": 90.0 } ``` - `"rotation_offset"`(度)会加到来自 Pick & Place 文件的组件旋转角度上——如果总是相同的,请使用单个数字;如果修正取决于组件的旋转方式,则使用以旋转角度(作为字符串,例如 `"180"`)为键的 dict,并加上一个 `"default"` 条目。 - `"origin_offset"`(`x`/`y`,单位为 mm)会将 footprint 从 Pick & Place 坐标原本所在的位置平移——当 Altium 的 footprint 原点与 KiCad footprint 的原点不在同一点时需要此设置。可以是单个 `{ "x", "y" }`(随组件一起旋转),或者如果偏移量本身需要随方向改变,则使用类似上述以旋转角度为键的 dict(加上 `"default"`)。 **在运行插件之前**,请浏览 BOM 中不同 footprint 代码列表,并确保每个代码在这里都有条目——任何缺失的内容都会在 BOM 比较步骤结束时标记出来(见下文),以便你添加并重新运行。 ### Pick & Place CSV 格式 每面(正面-顶层 / 背面-底层)一个 CSV,至少包含这些列(列名匹配不区分大小写,接受几个常见的别名——例如 `Designator`/`RefDes`, `Center-X`/`Mid X`): | Designator | Layer | Footprint | Center-X | Center-Y | Rotation | |---|---|---|---|---|---| | R1 | TopLayer | RESC2012M | 12.40 | 8.10 | 90 | ### BOM 格式 `.xlsx` 或 `.csv`,包含一个**分组的** BOM(每组共享相同 footprint 的位号占一行,例如在同一个 `Designator` 单元格中出现 `"C9, C12, C14, ..."` ——这会自动展开)。预期的列:`Designator`、`Footprint`、`Value`(或 `Comment`)、`Description`。 ### 可选:校准参考点 如果你希望插件自动校正 Altium 和 KiCad 坐标之间的任何偏移/镜像,请挑选**两个组件**,你能独立确定它们在 KiCad 中正确的位置(例如,你已经手动放置了一个连接器,并根据机械图纸进行了匹配)——在导入期间,系统会要求你输入它们的位号和已知的 KiCad X/Y (mm) 坐标。 ## 第 3 步 — 运行导入器 从 `Tools > External Plugins` 运行 **Altium PnP Importer**。它会依次执行以下操作: 1. **丝印准备**(自动执行,除非执行了某些操作,否则是静默的):将原始的 Gerber 丝印从 `F.SilkS`/`B.SilkS` 移动到 `Eco1.User`/`Eco2.User`,这样这些层最终就只保留本插件实际放置的 footprint 的丝印。 2. **面选择**:仅正面-顶层 / 仅背面-底层 / 双面。 3. **Pick & Place CSV 选择**,每选定的面执行一次。 4. **可选校准**(见上文)。 5. **导入** —— 加载并放置 footprint;摘要报告会显示导入了多少个,以及哪些没有 footprint 映射。 6. **可选 BOM 比较** —— 选择你的 BOM 文件。BOM 中存在但 Pick & Place 中缺失的组件会被**放置在电路板旁边**(已分组,并被预先选中——在每个组件上按 `M` 键可将其拖入到位)*前提是*它们的 footprint 具有 JSON 映射。任何仍然没有映射的内容将被写入 BOM 文件旁边的 `PnP_Importer_Notmapped_Components.txt` 中——将它们添加到 `footprint_map.json` 并再次运行 BOM 比较。 7. **可选清理** —— 询问是现在删除 `Eco1.User`/`Eco2.User` 的内容,还是将它们留待以后处理。 ## 故障排除 - **"No footprint found for: X (CODE)"** —— 可能是 `CODE` 在 `footprint_map.json` 中没有条目 (`no_mapping`),或者有但无法加载库/footprint (`load_failed` / `library_not_found`)。检查 `"library"` 值是否与 `Preferences > Manage Footprint Libraries` 中显示的确切别名一致。 - 一个以前可用的 footprint 映射在 KiCad 更新后停止解析——库表条目可能使用了不再匹配的特定版本环境变量(例如 `${KICAD9_FOOTPRINT_DIR}`);该插件已经回退到实际设置的任何 `KICAD*_FOOTPRINT_DIR` 变量,但如果库完全移动了,请在 `Manage Footprint Libraries` 中检查其路径。 ## 贡献 非常欢迎提交 Bug 报告和更改/改进建议——欢迎随时开启 issue 或 pull request。 ## 许可证 MIT —— 见 [LICENSE](LICENSE)。
标签:Altium, BOM, EDA插件, Gerber, Homebrew安装, KiCad, PCB逆向, Pick & Place, 数据转换, 逆向工具