用 AI 設計電路板3D外殼 | KiCad × FreeCAD × Claude Code

2026 年 11 月|實作筆記|KiCad × FreeCAD × Claude Code

這篇記錄我為一塊 USB-C LED 電路板設計外殼的過程。板子約 20 × 17 mm,外殼用 3D 列印製作,上下蓋靠卡扣組合,電路板夾在中間,不需要螺絲。外殼由 Claude Code CLI 撰寫參數化建模腳本,再用 FreeCAD 的命令列工具 freecadcmd 在背景執行產生,過程中不需要打開 FreeCAD 視窗。

先講結論
・外殼用 FreeCAD 的 Part 模組依參數產生,改一個數字重跑就能更新。
・干涉檢查結果:上蓋、下蓋與電路板之間的干涉體積都是 0 mm³,上下蓋彼此也沒有干涉。
・USB 插頭的通道沒有被擋到,但目前還沒有列印實體,卡扣鬆緊需要實際試裝確認。

一、需要哪些工具

類別工具用途
電路設計軟體KiCad(免費開源)匯出電路板 STEP 模型
CAD 軟體FreeCAD 1.1.3(免費開源)用命令列工具 freecadcmd 執行建模腳本,輸出 STEP/STL 檔
AI 代理Claude Code CLI在終端機執行,負責撰寫與修改建模腳本、執行 freecadcmd、讀取檢查報告
橋接工具(選用)FreeCAD MCP讓 Claude Code 直接操作開著的 FreeCAD 視窗;這次的外殼沒有用到

二、準備工作

1. 從 KiCad 匯出電路板 STEP 檔

在 KiCad 的 PCB 編輯器,選擇「檔案 → 匯出 → STEP」,勾選包含元件模型,存成 .step 檔。這個檔案包含板子外形、元件高度與接頭位置,外殼的尺寸都以它為準。也可以用命令列匯出:

kicad-cli pcb export step -o mech\USBC_LED.step USBC_LED.kicad_pcb

2. 確認 freecadcmd 可以執行

FreeCAD 安裝後,bin 資料夾裡會有 freecadcmd.exe,它是不開視窗的 FreeCAD,可以直接執行 Python 腳本。如果 FreeCAD 的 bin 資料夾沒有加進 PATH(例如用免安裝版),執行時要寫 freecadcmd.exe 的完整路徑。

freecadcmd 的幾個小陷阱:命令列參數傳不進腳本,參數要改用環境變數傳;腳本檔名不要和 Python 標準函式庫撞名(例如 inspect.py),否則會靜默不執行、也不報錯;print 的輸出常常看不到,結果最好寫進檔案再讀。

3.(選用)安裝 FreeCAD MCP

MCP(Model Context Protocol,模型上下文協定)是讓 AI 呼叫外部工具的標準。如果之後想讓 AI 直接在 FreeCAD 視窗裡建模、查看物件,可以裝 FreeCAD MCP。它分成兩部分,兩邊都要有:

  • FreeCAD 外掛:把外掛原始碼的 addon/FreeCADMCP 資料夾複製到 FreeCAD 的 Mod 資料夾(Windows 是 %APPDATA%\FreeCAD\Mod\),重新啟動 FreeCAD,從工作台清單選擇「MCP Addon」,再按工具列上的「Start RPC Server」。
  • Claude 端的 MCP 伺服器:在終端機執行 claude mcp add freecad -- uvx freecad-mcp。Windows 上如果連不上,改用 claude mcp add freecad -- cmd /c uvx freecad-mcp。

用 claude mcp list 確認狀態為已連線。預設只對目前的資料夾生效,想在所有專案都能用,加上 --scope user。注意:顯示已連線只代表 MCP 伺服器啟動了,FreeCAD 必須開著並按過「Start RPC Server」,AI 才真的操作得到。

三、用 Claude Code CLI 產生外殼

我在 Claude Code CLI 中說明需求(板子 STEP 在哪、要 3D 列印、上下蓋卡扣、USB-C 要能插、LED 要透光),AI 讀取電路板 STEP 確認尺寸與元件位置後,寫出建模腳本 USBC_LED_case_freecad.py,再用 freecadcmd 執行。腳本只使用 FreeCAD 的 Part 模組,尺寸參數集中在腳本開頭的參數區。電路板 STEP 路徑與輸出資料夾由環境變數指定:

set PCB_STEP=...\mech\USBC_LED.step
set OUT_DIR=...\mech\freecad
<FreeCAD 安裝資料夾>\bin\freecadcmd.exe USBC_LED_case_freecad.py

產生的輸出包括 FreeCAD 原始檔(.FCStd)、上下蓋與組合件的 STEP、列印用的 STL、預覽圖,以及 build_report.txt 檢查報告。之後如果要改尺寸,只要在 Claude Code CLI 中告訴 AI 要改哪一個參數,AI 會修改腳本、重新執行並讀回檢查報告,不需要手動重畫。

外殼的主要參數如下:

項目數值說明
外形尺寸24.60 × 21.50 × 9.41 mm長寬由板子尺寸加間隙與壁厚算出;高度由最高元件(USB-C,4.86 mm)決定
側壁、底板、頂板2 mm、1.5 mm、1.5 mm列印強度與尺寸的平衡
板子與內壁間隙0.3 mm(USB 側 0.2 mm)USB 側間隙較小,讓插頭插得更深
板下空間1 mm容納焊點與元件腳
分模面Z = 5.00 mm上下蓋的分界位置
卡扣舌片一整圈,高 1.5 mm、厚 1.0 mm,配合間隙 FIT = 0.15 mm下蓋舌片插進上蓋的槽,負責定位
卡扣凸點左右各一條,長 8 mm、半徑 0.35 mm卡進上蓋半徑 0.45 mm 的凹槽,負責扣住

外殼的主要結構如下:

  • 下蓋:有一圈 0.6~0.9 mm 寬的框,只托住板子邊緣,板子底下留 1 mm 給焊點。
  • 上蓋:四個角各有一根 1.5 × 1.5 mm 的柱子往下壓住板子,這四個角都沒有元件。
  • USB-C 開孔:穿孔 9.6 × 3.8 mm,外側另外挖 12.6 × 6.6 mm、1.2 mm 深的凹槽,讓插頭外殼靠近。
  • LED 透光:D1 正上方有一根導光管(外徑 2.6 mm、孔徑 1.6 mm),頂面開孔讓光透出來。
  • 卡扣:下蓋的一圈舌片插進上蓋的槽定位;舌片左右兩側外面各有一條半圓凸點,卡進上蓋的凹槽。凸點比槽壁多出 0.35 − 0.15 = 0.2 mm,蓋上時要稍微撐開才扣得進去,這 0.2 mm 就是卡扣的卡合量。
    上蓋、電路板、下蓋的爆炸圖

四、干涉與通道檢查

腳本產生外殼後,會用 FreeCAD 做以下檢查,結果寫入 build_report.txt:

檢查項目結果
下蓋 與 電路板 干涉0.0000 mm³
上蓋 與 電路板 干涉0.0000 mm³
上蓋 與 下蓋 干涉0.0000 mm³
USB 插頭通道被擋體積0.0000 mm³
插頭外模到接頭前緣的距離1.00 mm

檢查結果顯示模型沒有碰撞,USB 插頭的通道也沒有被擋到。板子的 Z 範圍是 2.50 至 4.01 mm,內頂在 7.91 mm。這些數字只代表模型的幾何沒有問題,不能取代實際試裝。

五、列印前的注意事項

  1. 上蓋要翻面列印,腳本輸出的 STL 已經把上蓋翻成頂面朝下。
  2. 卡扣鬆緊和印表機精度有關,主要由凸點半徑和 FIT 一起決定(卡合量 = 凸點半徑 − FIT)。太緊時,先把凸點半徑從 0.35 mm 縮到 0.3 mm,或把 FIT 小幅加到 0.2 mm;太鬆時把凸點半徑加大。不要一次把 FIT 加到 0.25 mm 以上,卡合量只剩 0.1 mm,很可能扣不住。
  3. USB 插頭深度:如果插頭外殼比較厚,1.0 mm 的距離可能讓插頭插不到底。可以加大 USB 凹槽的深度,但開孔旁邊的牆會變薄。
  4. 尺寸不合時,在 Claude Code CLI 中告訴 AI 要調整的參數,重新產生即可。

六、目前進度與下一步

目前外殼模型已經由 FreeCAD 產生,並通過干涉與 USB 通道檢查,輸出檔也都已經完成。接下來的步驟是:

  • 在 FreeCAD 中開啟 .FCStd 檔,從各個角度檢查細節。
  • 列印一套實體,把電路板裝進去試裝,確認卡扣鬆緊與 USB 插頭深度。
  • 如果之後修改了電路板,從 KiCad 重新匯出 STEP,再重跑腳本,外殼與檢查報告會一起更新。

七、心得

  1. 參數化是關鍵。把尺寸寫成參數,改一個數字就能重新產生外殼,比手動調整快得多。
  2. 不開視窗也能做 CAD。freecadcmd 讓 AI 可以像跑一般程式一樣產生模型、做干涉檢查,結果寫成文字報告,AI 自己就能讀回來判斷,不需要人盯著畫面。
  3. 模型檢查不能取代試裝。干涉體積為 0 只代表模型沒有碰撞,卡扣鬆緊與插頭是否順暢,還是要實際列印才知道。

使用工具:KiCad、FreeCAD 1.1.3(freecadcmd)、Claude Code CLI。選用:FreeCAD MCP(neka-nat/freecad-mcp)。本文為個人實作紀錄,外殼尚未經過實際列印驗證。

留言

這個網誌中的熱門文章

在 VS Code 安裝Opencode

使用VS code開發Python程式 - Matplotlib繪圖

使用Pycharm開發Python程式與用Matplotlib繪圖