到上一篇文章為止我們已經完成了鍵盤的韌體部分,接下來要進行硬體的部分。本篇要介紹的是製作步驟的第 5 步——繪製 PCB。
我將示範以 KiCad 7 進行機械式鍵盤的 PCB Layout,包含基本的 KiCad 使用教學。要畫 PCB 可能多少需要一些基本電學或基礎電路學知識,但是如果你真的沒學過的話也沒關係,仔細照著本文應該也不會出錯。
另有影片教學可以供參考:
以下內容以 KiCad
v7.0.2
作為示範。
鍵盤 PCB
一個鍵盤的 PCB 上基本會有這些部分:
- 鍵盤矩陣掃描電路
- 微控制器電路
- 電源供應電路
- USB
其中較複雜的是微控制器電路與 USB 的部分,微控制器週邊會有許多外圍電路(如去藕電容),且腳位小又密集,較難佈線;而 USB 訊號是差分訊號,佈線時需要注意符合差分對設計與阻抗控制(阻抗匹配)。
還好市面上有許多開發板(如 Pro Micro),這些開發板通常都已經把電源供應、微控制器與 USB 電路都做好了,所以我們可以只要設計鍵盤矩陣掃描電路即可。
PCB 繪製流程
使用 KiCad 進行 PCB Layout 通常會遵循以下流程:
- 建立專案
- 編輯 Schematic 電路圖(原理圖)
- 擺放所需的零件,並接線
- 指定各零件的數值(如電阻阻值)
- 指定各零件的 Footprint
- 編輯 PCB
- 將各零件擺放到實際的位置
- 佈線
- 繪製 PCB 外框邊緣
- 進行 Design rule check(DRC)
- 輸出生產所需的檔案(Gerber 檔)
Footprint 指的是一個電子元件物理上的實際樣子,包含了 Pin 腳的數量、位置及大小等。例如同樣是機械鍵軸,有分 Cherry MX、Alps、Kailh Choc 等不同的樣式,或是電阻有 THT 分插板型或 SMD 表面黏貼型的,而 SMD 型又會根據尺寸分為 0805、0603、0402…等。 不同 Footprint 的 Pin 腳位置(焊孔或焊盤)及大小不同,用錯 Footprint 的話到時候零件可是沒辦法裝上去的。
自動生成鍵盤 PCB
Keyboard PCB Builder 是一個自動工具,只要複製貼上 Keyboard Layout Editor 的 raw data,就可以幫你生成基本的 KiCad 專案。
將下載的 .zip
檔解壓縮,使用 KiCad 開啓 keyboard.pro
即可開啓專案。自動生成的專案檔包含了已經畫好鍵盤矩陣的 Schematic、擺好位置的 PCB 設計及各種鍵軸的 Footprint 庫。微控制器與其它部分還是必須要自己手動繪製。
本文不使用其自動生成的專案,這裡僅做簡單的介紹。



安裝 KiCad
我喜歡用的 PCB Layout 工具是 KiCad EDA,這是一款開源且跨平臺的 PCB 繪製軟體,算是現今開源界最熱門、社群最龐大的一個。有很多開源的鍵盤或其它電路專案都使用 KiCad。在此頁面下載 KiCad。
目前最新的版本是 7.0.2
,但是 7.x.x
是最近才更新的,可能有些插件還沒更新並支援新版,如果有這種情況的話建議先使用 6.0.8
版。本文是以 7.0.2
做示範。
要用較舊版本的 KiCad
6.0.8
可以到這個頁面或 GitHub 中,下載kicad-6.0.8-x86_64.exe
。
KiCad 基礎教學
首先要學會 KiCad 的基本用法。
建立專案
開啓安裝好的 KiCad。按下左上角的建立新專案按鈕。

選擇要存放專案的位置,並輸入專案名稱。預設會自動新增與專案同名的資料夾(可以從右下取消自動新增資料夾)。

建立完專案後會出現 3 個檔案:
<project_name>.kicad_pro
:專案檔<project_name>.kicad_sch
:Schematic 電路圖<project_name>.kicad_pcb
:PCB 設計檔

安裝 Footprint 庫
KiCad 內建的 Footprint 庫沒有機械鍵軸的 Footprint,因此我們要加入第三方的 Footprint 庫(或自己畫)。
GitHub 上有許多人畫好的機械軸 Footprint 庫,你可以選幾個喜歡的來用
- ebastler/marbastlib
- daprice/keyswitches.pretty
- ai03-2725/MX_Alps_Hybrid
- perigoso/keyswitch-kicad-library
- keebio/Keebio-Parts.pretty
- egladman/keebs.pretty
- ziteh/key-switches.pretty(我畫的鍵軸庫,我自己做的鍵盤都是用這個)
有些 Footprint 庫支援 KiCad 的插件管理器 Plugin and Content Manager(PCM),有些則是要手動下載並指定路徑。
ebastler/marbastlib 就支援 PCM 安裝。只要在 KiCad 主頁面(專案頁面)打開 PCM 頁面並按下「Manage」按鈕,在新跳出的「Manage Repositories」頁面中新增其網址 https://raw.githubusercontent.com/ebastler/ebastler-KiCAD-repository/main/repository.json
,隨後就可以在 PCM 頁面上面的下拉式選單中選擇「ebastler KiCad repository」,並選擇「Libraries」標籤頁安裝「marbastlib」。點擊「Install」按鈕後要記得按「Apply Pending Changes」才會真正進行安裝。

而我自己畫的 ziteh/key-switches.pretty 必須要手動下載並自己新增。透過 KiCad 主頁面(專案頁面)上方工具列的「Preferences > Manager Footprint Libraries」開啓 Footprint 庫管理頁面,標籤頁可以選擇全域的「Global Libraries」或專屬於專案的「Project Specific Libraries」,透過左下的資料夾圖樣按鈕選擇下載下來的 Footprint 庫資料夾位置即可。
對於手動增加的 Footprint 庫,如果想要以專案專屬的方式安裝(Project Specific Libraries),可以將其資料夾放到專案資料夾中,再到管理頁面新增,它應該會自動套用變數路徑,如:${KIPRJMOD}/my-footprint.pertty
。如果你預計使用 Git,也可以用 Git submodule 管理這些 Footprint 庫。

編輯 Schematic
Schematic 常見翻譯為原理圖,雖然我自己不是很習慣這個名稱。
在專案頁面中雙擊 .kicad_sch
以打開 Schematic。現在是全空的狀態。

加入元件符號
在右排工具列偏上處有一個「Add a symbol」按鈕(或快捷鍵 A
),按下後會出現元件符號(symbol)選擇視窗。在上方的搜尋欄鍵入「R」,並在中間的清單中找到電阻的符號(應該位於 Deveice 底下),然後將其擺放到畫面上。按一下 ESC
退出擺放符號,返回選取模式。


選擇元件符號可以按 R
旋轉。雙擊則可以進入其屬性設定頁面。
將滑鼠遊標移動到符號的接腳端點上會出現接線的提示,按一下後就會開始接線,過程中單擊會在該處清楚轉角,接線到另一個接腳端點、線會自動結束接線,在空白處雙擊會強制結束。若要手動新增走線,可以在右排工具列選擇,或使用快捷鍵 W
。

在右側工具列加入元件符號的按鈕下面還有一個「Add a power symbol」的按鈕(快捷鍵 P
),使用它可以加入電源符號。
子頁面
若電路較複雜,一頁不夠畫的話,可以使用階層式頁面(Hierarchical sheet)。
在右排工具列中央處有一個「Add a hierarchical sheet」按鈕(或快捷鍵 S
),按下後可以在頁面上繪製一個方塊以代表子頁面,隨後可以設定其名稱。雙擊此方塊即可進入子頁面。你可以按快捷鍵 Ctrl
+H
開啓階層式頁面導覽,以方便在各個頁面間切換。


標籤
在右排工具列中央處選擇「Add a global label」(或快捷鍵 Ctrl
+L
)可以新增全域標籤。這個全域標籤可以跨頁面連接走線,只要是名稱相同的標籤就會視為連接在一起。善於全域標籤可以讓你的 Schematic 不會充滿一堆凌亂的走線。

除了全域標籤,還有一種網路標籤(Net label),透過右側工具列的「Add a net label」或快捷鍵 L
來新增網路標籤。網路標籤和全域標籤的功能一樣,相同名稱的標籤會連接在一起,只是網路標籤的作用域是局部的,僅在目前的單一頁面中有效,要跨頁面連接的話要用全域標籤,或使用階層式標籤(hierarchical label)。
Footprint
指定各個元件的 Footprint。元件的 Footprint 可以透過雙擊該元件開啓屬性設定頁面來調整,也可以按上方工具列的「Bulk-edit fields of all symbols in schematic」按鈕開啓「Symbol Fields Table」頁面來修改。

點擊元件「Footprint」欄位右側的「三本書符號」以開啓 Footprint 庫瀏覽頁面。

Footprint 瀏覽頁面左側有兩個清單,在最左側的清單找種類,例如表面黏貼型的電容是「Capacitor_SMD」,點選後在右側的清單選擇要的 Footprint,例如常用的 0402 電容是「C_0402_1005Metric」。

至於要怎麼選擇 Footprint?這個牽涉到許多因素,首先是該零件要有,例如 RT9013-33GB 的封裝就是 SOT-23-5,那當然是選用「Package_TO_SOT_SMD:SOT-23-5」。但是像電容或電阻選擇就很多了,這時可以考慮焊接方式,要手工焊接的話,除非你手很穩(或有其它工具)可以焊 0201 尺寸的元件,不然通常會選 0805、0603 或 0402 的,同時你也可以考慮購買容易度;如果你打算使用 PCBA 的話,那可以考慮工廠那邊的報價。當然,封裝也和元件的功率和耐壓等電氣規格有關,但鍵盤的電路比較不需要擔心這點。
一般說的 0603、0402 或 0201 封裝是英制尺寸,0603 就代表其尺寸長寬為 0.06 * 0.03 inch。但是還有公制(Metric)表示法,公制 0603 代表的是長寬 0.6 * 0.3 mm。而英制 0402 等於公制 1005;英制 0201 等於公制 0603,所以一定不要搞混了。 KiCad 中的「C_0402_1005Metric」前面的「0402」是指英制尺寸,後面的「1005Metric」是指公制尺寸。所以這個 Footprint 就是我們一般習慣稱呼的 0402 封裝。
更新元件代號
這裡的元件代號是指「Reference designator」,即 U1
、R1
、R10
或 C6
這種,這些代號是方便人員在焊接時知道這是什麼零件,其名稱其實沒有很強制的規定。這一步通常最後再做。
在上方工具列的「Fill in schematic symbol reference designators」按鈕,開啓「Annotate Schematic」頁面。你可以先用左下角的「Clear Annotation」清除目前的代號,再用右下角的「Annotate」自動更新代號。


零件型號
如果你要使用 JLCPCB 的 PCBA(PCB 組裝。除了生產 PCB 外,一併把零件焊接完成)服務的話,可以在「Symbol Fields Table」(上方工具列的「Bulk-edit fields of all symbols in schematic」按鈕)中新增欄位「LCSC」,並在內填入 JLCPCB 的零件編號,例如 RP2040 是 C2040、W25Q128JVS 是 C97521。

頁面資訊
Schematic 頁面右下角有一些資訊可以填寫。
要修改這些資訊的話,可以到上方工具列「File > Page Settings」中設定。

開始繪製鍵盤
開始正式繪製鍵盤的 Schematic。首先要完成各個部分的元件接線。
使用開發板
如果你覺得要自己畫微控制器、電源和 USB 的電路太麻煩的話,你可以使用現成的開發板,使用排針或排插連接開發板,這樣就只需要畫鍵矩陣掃描電路。以下以 Pro Micro 為例。
加入兩個「Conn_01x12」元件來代表排針/插,雙擊它進入屬性頁面,將它的「Footprint」改成「Connector_PinHeader_2.54mm:PinHeader_1x12_P2.54mm_Vertical」。
加入電源符號與標籤,並根據 Pro Micro 的腳位接到正確的位置。

上圖的接腳標籤名是根據 ATmega32U4 原本的腳位名,不是板上標記的 Arduino 腳位名。
繪製矩陣掃描電路
鍵盤矩陣掃描電路是由數個開關(鍵軸)及二極體組成的。
為了保持整潔,我喜歡將其放在一個獨立的子頁面中。先新增一個階層式子頁面,並命名為「key-matrix」(Sheetname 與 Sheetfile 的名稱都要改)。雙擊方塊進入子頁面。

加入開關與二極體的元件符號「SW_Push」和「1N4148W」。當然二極體的型號很多,不一定要用 1N4148,但這是最常見的選擇(其後綴 W 代表 SOD-123 封裝)。

個人會喜歡將此處代表鍵軸的元件代號改成「KEY」,雙擊開關的符號,將 Reference 的開頭由「SW」改成「KEY」。這一步有助於後續的自動擺放工具。

另外,也可以在這一步選擇鍵軸的 Footprint。滑鼠移到「Footprint」的「Value」欄位右側,會出現三本書的圖案,點擊後可以修改 Footprint。
鍵軸的 Footprint 決定了最後這把鍵盤可以使用什麼樣的機械軸,Cherry MX、Alps、Kailh Choc 等各種機械軸的 Footprint 都不同,要選擇正確的 Footprint 才行。而如果要鍵盤可以熱插拔的話,也就必須選用有支援熱插拔座的 Footprint(不同軸體的熱插拔座也不同)。當然也有些 Footprint 同時整合並兼容了多種不同的軸體。請自行確認你所安裝的鍵軸 Footprint 庫有哪些種類可以用。
以我自己的 Footprint 庫為例:MX_switch_THT_hotswap_A
是同時兼容 Cherry MX 軸體熱插拔與直接焊接的 Footprint;而 MX_switch_PTH_hotswap_A
只有 Cherry MX 熱插拔座的焊盤,沒有直接焊接的 PTH 焊盤;MX_switch_hotswap_double_sided_A
是雙面都有 Cherry MX 軸的熱插拔焊盤;Kailh_Choc_PG1350_THT_A
則是 Kailh Choc 矮軸直接焊接用的 Footprint。

先將開關與二極體這樣擺放,一端相連接(注意方向,二極體有方向性),再根據你的鍵盤按鍵數量複製它們。然後將其接成鍵矩陣的樣子。


請注意走線的交叉處,若交叉點上有一個圓點,則代表交叉的兩條線有連接;無圓點的話就代表這兩線沒有實際連接,是跨越。要手動使交叉點連接的話可以用快捷鍵
J
。
為鍵矩陣電路的各個 Row 和 Column 新增各自的全域標籤。

繪製電源電路
電源電路主要是提供穩定的電源給微控制器。現在的微控制通常使用 3.3V 或 5.0V 的電壓,而 USB 的電源電壓是 5.0V,若需要將 USB 的 5.0V 變成 3.3V 的話,就需要降壓電路。降壓電路通常有分 DC-DC(Buck converter)和 LDO(Low-dropout regulator)兩種,一般來說 DC-DC 的功率較大、效率較高,但週邊電路較複雜,因為鍵盤其實不太耗電,所以比較沒必要使用 DC-DC 電路,大家通常都會選擇用 LDO。
LDO 的型號有非常多種,其規格可能都不太一樣,且還有分可調輸出或固定輸出型。若是需要 固定輸出 3.3V 的話,我常使用的 LDO 型號為:
- RT9013-33GB:500mA,SOT-23-5(個人最常用)
- XC6220B331MR-G:1A,SOT-23-5
- AMS1117-3.3:1A,SOT-223
我自己最常用的是 RET9013-33GB,但是 KiCad 原始的元件庫內沒有它,這時你可以選擇找第三方元件庫或自己畫(參考教學),但最簡單的方式是找可替代的元件。XC6220B331MR 的接腳與 RT9013-33GB 相同,所以我們用它來代替 RT9013-33GB。
在主頁面加入 XC6220B331MR,雙擊它進入屬性頁面,將「Value」的值改成「RT9013-33GB」。
加入兩個無極性電容「C」,雙擊它們開啓屬性頁面,將「Value」改成「1uF」,並將其分別接到 RT9013-33GB 的「VIN」與「VOUT」腳。RT9013-33GB 的「CE(或 EN)」腳直接接到「VIN」。
增加「GND」、「+5V」與「+3V3」這三種電源符號。「+5V」接「VIN」、「+3V3」接「VOUT」、「GND」接兩個電容的另一腳與 RT9013-33GB 的「GND」。

這樣就完成電源電路了。每種電源 IC 所需的外圍電路不同,若要使用其它型號的 IC,請記得去查看它的 Datasheet,一般都會提供參考應用電路。
繪製 USB
加入元件「USB_C_Receptacle_USB2.0」,這是 USB Type-C(僅 USB 2.0)的符號。

USB Type-C 需要加入 CC 電阻。加入兩個電阻「R」,在屬性頁面將「Value」改成「5.1k」,並分別接到「CC1」與「CC2」腳,另一端接地(GND)。
「VBUS」是 USB 的電源腳,USB 標準電源是 5.0V,可以直接接給 LDO 用,但一般安全起見會加個自恢復保險絲。加入元件符號「Polyfuse」,並將其「Value」改成「500mA, 6V」。將其一端接「VBUS」一端接「+5V」。
USB 差分訊號「D+」與「D-」各 2 腳,將相同的接在一起,然後加入全域標籤「USB_D+」與「USB_D-」。
「GND」和「SHIELD」接地。在一些情況下,「SHIELD」和地之間可能會接一些濾波電路,但是對鍵盤來說直接接地就可以了。
「SBU1」和「SBU2」這裡用不到,可以為其加上無連接的旗標(右側工具列的「Add a no-connection flag」或快捷鍵 Q
)。
如果可以的話,可以為 USB 加入 ESD 靜電保護的元件。

繪製微控制器電路
微控制器電路是最複雜的部分,且每種微控制器都不同。想要知道一個微控制需要哪些週邊元件的話,最好的方式就算找現成的電路參考,ATmega32U4 可以參考 Pro Micro 的電路;RP2040 可以參考官方的範例電路。為了方便起見,我也為微控制器電路新增一個名為「mcu」的子頁面。
我這裡以較複雜的 RP2040 為例。RP2040 所需的外圍元件有:
- 石英振盪器。可以使用元件「Crystal_GND24」,將數值改成「12MHz」。
- 外接 QSPI Flash。這裡使用 16MB 的 「W25Q128JVS」。Flash 也有自己的週邊電路元件。
- USB 終端串聯電阻,阻值 27Ω。
- 8 顆接到 3.3V 的去藕電容,其中一顆是「1uF」,其它是「100nF」。
- 3 顆接到 1.1V 的去藕電容,其中一顆是「1uF」,其它是「100nF」。
- 兩個開關,RESET 開關有上拉電阻。

這裡我使用網路標籤(Net label)來完成週邊電路的接線。
另外使用全域標籤將鍵矩陣接上正確的 GPIO 腳,這裡要與 QMK 韌體內的腳位設定一致。微控制器上其它沒用到的接腳可以加上無連接旗標(右側工具列的「Add a no-connection flag」或快捷鍵 Q
)。
其它元件
鍵盤會需要螺絲孔,這個也要加入 Schematic 中。在元件符號庫中找到「MountingHole」或「MountingHole_Pad」,前者是無焊盤的絕緣螺絲孔,後者有焊盤,可以做接地屏蔽等用途。要幾個螺絲孔加複製幾個。
建議至少為電源「+3V3」與「GND」加上測試焊盤,未來焊接前的短路檢查會比較方便。使用元件符號「TestPoint」,並將其接到要加上測試焊盤的接線上。

如果你要加入 LED 的話,LED 預設的 Reference 是「D」,為了後續自動擺放方便,我喜歡將其改成「LD」(例如「LD1」),將 LED 和鍵矩陣電路的二極體作區隔。
完成
當所有部分的元件符號及接線都完成後,編輯並再次檢查各個元件的 Footprint,然後更新一下代號,Schematic 就算完成了。
接下來請繼續查看下一篇以完成 PCB Layou 的部分。
如果你想參考完整的檔案的話,可以到 GitHub 上找一些別人的 repo,例如我的 Calcite52。 你或許可以用 KiCanvas 來線上查看 KiCad 的 Schematic 檔案,例如這樣。我的另一篇文章有介紹:KiCanvas——線上預覽KiCAD電路圖
Git
如果你想為 KiCad 用 Git 的話,可以參考以下的 .gitignore
。
## KiCad EDA .gitignore ##
# Temporary files
*.000
*.bak
*.bck
*.kicad_pcb-bak
*.sch-bak
*.kicad_sch-bak
*~
_autosave-*
\#auto_saved_files\#
*.tmp
*-save.pro
*-save.kicad_pcb
fp-info-cache
# Netlist files (exported from Eeschema)
*.net
# Autorouter files (exported from Pcbnew)
*.dsn
*.ses
# Exported BOM files
*.xml
*.csv
# Exported Gerber
[Gg]erber/
*.g[tb][lops]
*.gbr
*.gm1
*.drl
# Backup
*-backups/
# Exported JLCPCB tools plugin
jlcpcb/
# zykrah/kicad-kle-placer plugin
keyautoplace.log
留言可能不會立即顯示。若過了幾天仍未出現,請 Email 聯繫:)