鍵)
兩年前我一個做硬件的老朋友發(fā)來一塊反激電源板讓我?guī)兔?。方案不算?fù)雜但他正在從Altium往KiCad遷移想讓我確認(rèn)一下KiCad在這種帶隔離電源的板子上到底靠不靠譜。我那會兒對KiCad的印象還停在“免費(fèi)工具、畫畫簡單雙層板還行”的階段嘴上沒直接潑冷水心里卻覺得它扛不住正經(jīng)四層板設(shè)計(jì)。后來為了幫他追一個地回路的布線問題我在自己電腦上裝了KiCad前后密集用了十來天結(jié)果被幾個細(xì)節(jié)徹底改變了看法——現(xiàn)在我自己畫PCB主力工具就是它。為什么說“看了這個功能你就會下決心”因?yàn)楹芏嗳瞬挥肒iCad不是能力不行而是壓根不知道它已經(jīng)進(jìn)化到什么程度。這篇文章我就挑幾個真正讓我留下來、并且在日常項(xiàng)目中反復(fù)吃到紅利的點(diǎn)展開講講給還在Altium Designer、嘉立創(chuàng)EDA等工具之間搖擺的人做個參考。尤其是從“工程文件是文本”這個角度切入你會看到PCB設(shè)計(jì)這件事原來也可以像寫代碼一樣被管理、被自動化和被版本控制。1. 從“免費(fèi)玩具”到主力工具我對KiCad的認(rèn)知是怎么變的1.1 版本迭代帶來的體驗(yàn)躍遷我從KiCad 5時代開始關(guān)注真正上手是KiCad 6以后。KiCad 6重構(gòu)了原理圖編輯器默認(rèn)的圖紙風(fēng)格、符號庫管理、調(diào)色板都更像主流EDA了KiCad 7開始引入新的渲染引擎縮放、平移、高亮這些操作不再卡頓到KiCad 8交互式布線的流暢度和規(guī)則引擎又往前邁了一大步。如果你記憶還停留在“界面土、操作澀”的階段建議直接裝最新版試試體驗(yàn)完全不同。很多人對開源工具有個固有偏見覺得免費(fèi)的東西功能上一定縮水。但KiCad這幾年的路線恰恰相反它不是在做簡化版而是在做“完整工具鏈”。原理圖編輯、符號庫管理、PCB布局布線、封裝庫管理、Gerber/鉆孔文件生成、BOM輸出、SPICE仿真、3D預(yù)覽與STEP導(dǎo)出、ERC/DRC檢查全流程覆蓋而且這些環(huán)節(jié)的數(shù)據(jù)都是開放的。換句話說它不是只讓你“畫個圖”而是讓你從設(shè)計(jì)到生產(chǎn)文件的整個鏈路都在一個軟件里跑完。1.2 一套完整的本地化EDA工具鏈我用了幾個月以后最大的感受是KiCad最大的優(yōu)勢不是“免費(fèi)”而是“可控”。所有工程文件都是文本格式存在你本地不依賴云端賬號也不擔(dān)心授權(quán)服務(wù)器抽風(fēng)。很多網(wǎng)頁版EDA工具雖然打開快但項(xiàng)目文件放在別人服務(wù)器上網(wǎng)絡(luò)狀態(tài)不好或者平臺規(guī)則調(diào)整都會影響你的工作流。KiCad完全沒有這個問題文件在你硬盤上想怎么備份、怎么同步你自己說了算。再有一點(diǎn)它的修改門檻極低。如果某個封裝不符合你的標(biāo)準(zhǔn)打開封裝編輯器直接改如果某個元件的絲印層想加個標(biāo)識改兩筆就行。不會像一些閉源工具那樣“只能看不能碰”改個封裝還得提工單或者自己偷偷用腳本去搞。對于單片機(jī)開發(fā)板、電源子卡、工控板這一類的項(xiàng)目做到這種可控性就已經(jīng)很踏實(shí)了。1.3 說點(diǎn)潑冷水的話什么項(xiàng)目不建議硬上KiCad雖然我自己是KiCad的忠實(shí)用戶但也不建議所有人無腦切換。適合的場景很明確個人開發(fā)者、高校學(xué)生、中小硬件團(tuán)隊(duì)尤其是需要在Linux環(huán)境里做自動化編譯、或者想把硬件納入版本管理流程的團(tuán)隊(duì)。新項(xiàng)目沒有歷史包袱用KiCad的接受成本是最低的。不太適合的場景也要提前說清楚重度依賴企業(yè)庫和多年設(shè)計(jì)規(guī)范沉淀的大型公司切換成本會很高需要復(fù)雜HDI、剛?cè)峤Y(jié)合板、特殊阻抗建模的頂尖高速設(shè)計(jì)KiCad目前深度還不夠?qū)Ω呒壭盘柾暾?、電源完整性仿真有?qiáng)需求的項(xiàng)目KiCad能跑基礎(chǔ)SPICE仿真但和商業(yè)仿真工具還是有差距??偨Y(jié)一句話常規(guī)2到4層板、常規(guī)信號速度、常規(guī)密度KiCad完全能扛越往極端走越需要你仔細(xì)評估。2. 畫板日常里最讓我上癮的幾個細(xì)節(jié)2.1 原理圖和PCB的交叉高亮讓信號鏈“看得見”真正用起來以后第一個讓我覺得“回不去”的細(xì)節(jié)是原理圖和PCB的交叉高亮。在原理圖里選中一個網(wǎng)絡(luò)或者一個元件PCB編輯器里立刻高亮對應(yīng)封裝和銅皮反過來在PCB里點(diǎn)一條走線原理圖里對應(yīng)的網(wǎng)絡(luò)也會點(diǎn)亮。這個功能老牌商業(yè)工具也有但KiCad的高亮渲染非常舒服不是那種全屏綠光刺眼的效果而是淡黃色半透明疊加配合網(wǎng)絡(luò)顏色配置一眼能看出信號流向。我?guī)团笥芽茨菈K反激電源板的時候就用這個功能查地回路。在原理圖里選中GND網(wǎng)絡(luò)PCB里直接就能看到整片鋪銅區(qū)域以及哪些引腳把回流路徑引到了哪個方向。電源板最容易出問題的就是地環(huán)路和回流切割這種“看見信號鏈”的能力幫我抓出過不少布局隱患。你如果畫過音頻、電源這類的板子應(yīng)該能體會這種需求的痛。2.2 交互式布線的推擠體驗(yàn)比想象中順手KiCad現(xiàn)在的布線器是PNS算法驅(qū)動不是老版本那種“橡皮筋最后統(tǒng)一清障礙”的笨辦法。布線時按X可以在45度、90度、任意角之間切換按V會在打過孔的同時切換層這個節(jié)奏一旦熟悉了效率提升非常明顯。更爽的是走線時會實(shí)時驅(qū)避沖突光標(biāo)碰到間距不足的線段會自動讓開路而不是硬頂上去。你從Altium過來剛開始可能不習(xí)慣因?yàn)閮烧叩闹羔樞袨橛胁町惖m應(yīng)兩天之后你會發(fā)現(xiàn)KiCad的推擠處理在同級別工具里算相當(dāng)能打的。我還習(xí)慣在布內(nèi)層的時候把已布好的走線調(diào)成半透明顯示這樣能直接看到底層線是怎么走的避免上下兩層平行長走線造成串?dāng)_。這在雙面板上尤其實(shí)用。操作上就是調(diào)一下顯示選項(xiàng)屬于那種“普通文檔不會寫、但實(shí)際天天用”的小技巧。2.3 差分對、蛇形等長和螺絲孔的快捷處理畫USB、以太網(wǎng)、HDMI這類接口時差分對是躲不開的。KiCad處理差分對的方式很直接在原理圖網(wǎng)絡(luò)命名時按差分對規(guī)范加_P_N后綴PCB里打開差分對編輯工具設(shè)置線寬和間距然后用專門的差分布線器一次拉出兩條線。等長控制用調(diào)線工具選中目標(biāo)走線后拖動蛇形線軟件會實(shí)時顯示當(dāng)前長度和誤差范圍。我拿一塊帶LAN8720的小板子試過以太網(wǎng)差分對從設(shè)置到走完也就十幾分鐘不用來回手工量長度。螺絲孔這個需求看著小但經(jīng)常有人問。我的做法很簡單在PCB上放一個圓形焊盤屬性選NPTH非金屬化孔徑設(shè)置成比螺絲直徑大0.2到0.3毫米。比如M3螺絲孔徑開3.2毫米左右比較穩(wěn)焊盤外徑比孔徑再大1.5到2倍才不會一擰螺絲就崩掉。圓形PCB更要注意螺絲孔離板邊留一圈余量別為了省空間把孔壓到邊緣上。2.4 區(qū)域規(guī)則把板子里的約束寫成一條條文字規(guī)則這個功能是我個人認(rèn)為KiCad最有特色的點(diǎn)之一。普通規(guī)則是全局的比如全板間距0.25毫米。但一塊板子上總有特殊區(qū)域比如BGA扇出區(qū)域需要更細(xì)的線寬比如電源板的高壓側(cè)和低壓側(cè)需要更大的安全間距。KiCad的Custom Rules可以直接用類似代碼的方式寫規(guī)則(rule BGA區(qū)域線寬 (condition A.Courtyard intersects BGA.Courtyard) (constraint track_width (min 0.1mm) (max 0.15mm)))這句話的意思就是當(dāng)任何對象落在BGA封裝所在的Courtyard區(qū)域時走線寬度被限制在0.1到0.15毫米之間。DRC檢查的時候這條規(guī)則會自動生效。我?guī)团笥褍?yōu)化反激電源板時就在Custom Rules里加了一條約束光耦兩側(cè)爬電間距的規(guī)則DRC每次都能提醒我別把信號線穿到高壓側(cè)。以前在傳統(tǒng)EDA里做類似約束要畫Room、建規(guī)則、手動關(guān)聯(lián)可維護(hù)性很差。KiCad用文本表達(dá)以后整套規(guī)則可以被Git管理、被團(tuán)隊(duì)評審討論這個價(jià)值在多人協(xié)作項(xiàng)目里特別明顯。3. 讓我真正下決心的核心工程文件是文本一切皆可自動化3.1 用Git管理PCB改了什么一目了然現(xiàn)在說回標(biāo)題里那句“看了這個功能你會下決心”。前面那些都是甜點(diǎn)真正讓我拍板把KiCad當(dāng)主力工具的是它把所有工程文件都保存為文本尤其是.kicad_pcb和.kicad_sch這兩個核心文件。這意味著什么意味著版圖設(shè)計(jì)可以被納入版本管理像代碼一樣被diff、被review、被回滾。我現(xiàn)在的項(xiàng)目流程是這樣的給工程建一個Git倉庫每次改完布局、走完一版線就提交一次。想看上一版和這一版到底動了哪些地方直接跑git diff精確到某一條走線的坐標(biāo)變化、某個位號的移動距離全都能看到。板子改壞了git revert一鍵回滾比保存一堆“最終版v5_really_final”的備份文件靠譜得多。如果是團(tuán)隊(duì)協(xié)作這個優(yōu)勢更明顯。PCB評審不再需要“導(dǎo)出PDF-截圖-紅圈-發(fā)群里”這套流程每條走線、每個封裝的變更都能在代碼評審工具里直接討論。這種開發(fā)體驗(yàn)傳統(tǒng)閉源EDA給不了。3.2 kicad-cli一條命令導(dǎo)出全套生產(chǎn)文件如果說Git讓PCB能管版本那kicad-cli讓PCB能自動跑流水線。kicad-cli是KiCad官方提供的命令行工具原理圖導(dǎo)出PDF、PCB導(dǎo)出Gerber、鉆孔文件、STEP三維模型、BOM這些重復(fù)勞動全都可以腳本化kicad-cli sch export pdf board.kicad_sch --output board_sch.pdf kicad-cli pcb export step board.kicad_pcb --output board.step kicad-cli pcb export gerbers board.kicad_pcb--layers F.Cu,B.Cu,F.Silkscreen,B.Silkscreen,F.Mask,B.Mask,Edge.Cuts--drill-file --output gerbers.zip這幾條命令跑完生產(chǎn)文件就到手了。我現(xiàn)在的做法是寫一個shell腳本把原理圖PDF、Gerber壓縮包、STEP模型、BOM一次性生成打壓縮包發(fā)給工廠。整個過程從半小時縮短到十幾秒而且不會有“今天忘了勾某個層”這種低級錯誤因?yàn)槟_本里的參數(shù)是固定的每次執(zhí)行結(jié)果可預(yù)期。提示kicad-cli不同版本的具體參數(shù)有差異。如果你裝的版本命令參數(shù)對不上直接跑kicad-cli pcb export gerbers --help看官方說明一分鐘就能搞清楚。3.3 用Python批量補(bǔ)丁把板子當(dāng)代碼改文本格式帶來的另一個衍生能力是用Python腳本批量修改PCB。KiCad的PCB文件是S表達(dá)式結(jié)構(gòu)任何能在編輯器里手工完成的修改理論上都能用腳本完成。我在實(shí)際項(xiàng)目里用第三方庫kiutils寫過不少小工具舉幾個真實(shí)場景批量把電源網(wǎng)絡(luò)的走線加粗。比如3V3網(wǎng)絡(luò)全部改成0.4毫米不用在編輯器里一條條去選。批量檢查位號字體尺寸找出那些絲印小到生產(chǎn)都看不清的封裝。批量調(diào)整圓形螺絲孔的位置從2.0毫米孔徑統(tǒng)一改成3.0毫米。生成BOM并與原理圖網(wǎng)表做對比防止漏件、錯件。代碼寫出來不長核心邏輯其實(shí)就是讀取、判斷、修改、寫回from kiutils.board import Boardboard Board.from_file(board.kicad_pcb) for track in board.tracks: if track.net and track.net.name /3V3: track.width 0.4 board.to_file(board.kicad_pcb)這里提醒幾個注意點(diǎn)改完一定要重新跑DRC因?yàn)榕扛膶挾瓤赡芤腴g距沖突不同KiCad版本導(dǎo)出的字段名可能有變化腳本不能在舊文件上無腦跑最好先在副本上執(zhí)行一次確認(rèn)沒問題再應(yīng)用到正式工程。這種“把板子當(dāng)代碼對待”的思路用習(xí)慣了以后是真的回不去。4. 從Altium和嘉立創(chuàng)EDA遷過來我踩過的四道坎4.1 文件導(dǎo)入別指望一次到位如果你手里有一堆老工程想遷移心態(tài)要先擺正直接導(dǎo)入是運(yùn)氣逐步清理才是常態(tài)。從Altium遷入時KiCad雖然有內(nèi)置導(dǎo)入器但老版本AD的工程經(jīng)常要先在AD里導(dǎo)出成ASCII格式才能順利識別。導(dǎo)入之后最常見的坑是元件標(biāo)號錯位、網(wǎng)絡(luò)標(biāo)簽帶轉(zhuǎn)義字符、多邊形覆銅變成一堆離散線段。這個過程沒法全自動導(dǎo)入完必須完整跑一遍ERC和DRC把報(bào)錯一條條清掉。從嘉立創(chuàng)EDA轉(zhuǎn)過來也是一樣的邏輯。EasyEDA的原生格式不能直接在KiCad里打開一般要借助中間格式比如先導(dǎo)出網(wǎng)表和BOM再在新環(huán)境里重新關(guān)聯(lián)封裝。千萬別想著雙擊文件就能完美打開那是不可能的。我的建議是老項(xiàng)目留在原工具里維護(hù)新項(xiàng)目用KiCad起步一步一步來。4.2 封裝庫是重災(zāi)區(qū)先做物料清單映射遷移過程中最花時間的不是畫板子而是整理封裝庫。KiCad官方庫很豐富覆蓋大部分常用元器件但要和你公司實(shí)際的物料編碼一一對應(yīng)幾乎都得做一遍“映射清單”。我當(dāng)時的做法是把原來的庫導(dǎo)出成CSV把物料編碼、封裝名、焊盤尺寸列成一張表然后在KiCad里逐個替換關(guān)聯(lián)。這個過程枯燥但必須做否則出圖的時候少一個封裝后面全是麻煩。好消息是KiCad的封裝編輯器足夠好用。DIP、SOP、QFP這些標(biāo)準(zhǔn)封裝可以直接用向?qū)商钊胍_數(shù)量和間距參數(shù)就能出封裝不規(guī)則的封裝也能靠畫焊盤和絲印手動搭出來。等你把常用的幾十個封裝整理好后續(xù)項(xiàng)目的效率反而比在舊工具里還高因?yàn)閹焱耆茏约嚎刂啤?.3 快捷鍵與操作習(xí)慣的沖突從Altium切過來最大的適應(yīng)成本往往不是功能缺失而是操作習(xí)慣。我列幾個常見的對照給準(zhǔn)備遷移的人打個預(yù)防針操作Altium習(xí)慣KiCad習(xí)慣放置走線快捷鍵PT快捷鍵X移動元件選中后拖動快捷鍵M旋轉(zhuǎn)元件快捷鍵空格快捷鍵R布內(nèi)層時打過孔切換層自動提示按V放過孔并換層放置字符串快捷鍵PS快捷鍵T這只是一部分還有一些深層差異Altium很多操作是“先執(zhí)行命令再點(diǎn)對象”KiCad更偏“先選對象再右鍵彈菜單”。適應(yīng)一周基本能順過來但頭兩天確實(shí)容易手忙腳亂。我把常用快捷鍵抄在一張紙上貼顯示器邊上幾天就好。4.4 覆銅、內(nèi)層和螺絲孔正片思維要建立KiCad的內(nèi)層默認(rèn)全部是正片這一點(diǎn)和很多老工程師習(xí)慣的負(fù)片思維不一樣。負(fù)片的好處是數(shù)據(jù)量小但壞處是容易在檢查時忽略掉某塊不該有的空銅。KiCad用正片以后內(nèi)層電源和地平面直接用覆銅區(qū)域?qū)崿F(xiàn)所見即所得內(nèi)層哪里沒有銅、哪里是分割槽一眼就能看清不用再心里默默翻一次“負(fù)片反邏輯”。覆銅之后一定要記得重新填充快捷鍵是B否則蓋銅邊界變動以后Gerber里可能還是舊銅。另外孤立銅島死銅可以用“刪除孤立銅”的選項(xiàng)自動清理不用一塊塊手工挑。這個坑很多人剛轉(zhuǎn)過來都會踩我認(rèn)識的一個朋友第一版板子就因?yàn)闆]重新填充電源網(wǎng)絡(luò)整片消失焊完才發(fā)現(xiàn)那叫一個痛苦。5. 商業(yè)項(xiàng)目里用KiCad到底行不行5.1 許可證免費(fèi)但隱形成本要算清先說結(jié)論商業(yè)項(xiàng)目完全可以用KiCad但成本賬要算清楚。軟件本身零授權(quán)費(fèi)用用戶數(shù)量不受限不需要加密狗也不需要每年續(xù)費(fèi)。對團(tuán)隊(duì)來說這意味著哪怕全公司每個人都裝一套也不會多花一分錢。真正的成本在于遷移過程工程師的培訓(xùn)、封裝庫的整理、設(shè)計(jì)規(guī)范的重新落地。如果團(tuán)隊(duì)里都是用了十年Altium的老手你突然要求全部切到KiCad阻力會非常大。但如果團(tuán)隊(duì)本來就帶點(diǎn)敏捷風(fēng)格愿意把設(shè)計(jì)流程腳本化、版本化那KiCad的維護(hù)成本反而比商業(yè)工具低——因?yàn)樗鼪]有那么多黑盒環(huán)節(jié)出了問題你能直接打開文件查。5.2 板子難度劃分什么項(xiàng)目閉眼用什么項(xiàng)目要慎重以我自己的經(jīng)驗(yàn)下面這些項(xiàng)目類型閉眼用KiCad沒問題適合直接用KiCad的項(xiàng)目需要慎重評估的項(xiàng)目單片機(jī)系統(tǒng)板STM32、ESP32幾十層高密度HDI板4層以下的電源板、電機(jī)驅(qū)動板剛?cè)峤Y(jié)合板USB、以太網(wǎng)接口模塊依賴大量高級仿真的高速鏈路傳感器信號調(diào)理板企業(yè)級超大型團(tuán)隊(duì)的歷史庫遷移小型工控單板特殊阻抗建模需求極強(qiáng)的設(shè)計(jì)普通硬件產(chǎn)品絕大多數(shù)都落在“常規(guī)信號速度、常規(guī)疊層、常規(guī)密度”這個范圍內(nèi)。之前有個朋友問我四層板能不能用KiCad我直接說你如果只是做一個帶MCU、電源、幾個接口的控制板四層板用KiCad綽綽有余從層疊設(shè)置到阻抗調(diào)整都能在軟件里完成。但如果你要做的是一塊帶DDR5、PCIE 5.0的高速主板那就不要拿KiCad去硬剛商業(yè)工具在生態(tài)和成熟度上還是有優(yōu)勢。5.3 一條穩(wěn)妥的試遷移路線如果你看完這些還是有點(diǎn)心動我建議按下面的步驟來千萬別腦子一熱就要把全公司的老項(xiàng)目都搬過去第一步不要遷移歷史項(xiàng)目。挑一個全新的、難度中等的板子作為試驗(yàn)品比如一塊帶USB和傳感器接口的四層板。第二步在本地裝好最新版KiCad強(qiáng)制自己從原理圖開始跑到Gerber交付把整個流程走通。第三步打樣一兩塊看看生產(chǎn)文件有沒有問題。這個時候再評估要不要擴(kuò)大范圍。這個路線的核心思路是控制風(fēng)險(xiǎn)。新項(xiàng)目沒有任何歷史包袱就算中途發(fā)現(xiàn)問題影響面也局限在試驗(yàn)范圍里。我身邊好幾個朋友就是用這個方法從第一個試水項(xiàng)目開始三個月以后日常工作全部換到了KiCad。最后再分享一個我現(xiàn)在特別依賴的習(xí)慣每次把板子改動提交Git之前我都會先在命令行里跑一遍kicad-cli的DRC和ERC把報(bào)告存成一個文本再提交。這個習(xí)慣幫我抓過不止一次低級錯誤——比如上次有一塊雙面板覆銅填充后忘了刷新Gerber里電源網(wǎng)絡(luò)整片缺失DRC報(bào)告直接標(biāo)了出來。要是回到用舊工具那會兒這種問題多半要等到焊接階段才能發(fā)現(xiàn)。如果你也正站在切換工具的十字路口我的建議很簡單別急著聽別人說“好不好用”裝個最新版用一塊自己畫過的板子走一遍全流程哪個功能讓你心里“咯噔”一下你就知道該怎么選了。