在印刷電路板(PCB)製造和組裝產業中,會用「原PCB」(raw PCB)或「空白PCB」(blank PCB)來表示未組裝——即無載(unpopulated)——電路板,已組裝(assembled,或populated)電路板則是以「PCBA」來表示。

實際上,「PCBA」這個詞現在已經有些過時,雖然在業界仍有使用,但大概從1980年代就慢慢不被工程師們提及,現在他們通常就只是用「PCB」泛指所有未組裝和已組裝電路板(其確切意義會以前後文表達)。

說完以上這些,本文將採用「PCB」和「PCBA」兩個名詞確保我們沒有雞同鴨講。

筆者想提出的問題是:我們距離無人干預的PCBA下單甚至製造還有多遠?我希望這能像照片列印服務一樣簡單,除了讓設計工程師能用更便宜、簡單的方法打造產品,這也有助於讓PCBA生產能「回歸祖國」、不必再委託有廉價勞動力的海外代工。所以,那樣的場景至今還無法實現,是因為生產鏈還缺少了什麼元素?

過去幾年,我遭遇過在電腦輔助設計(CAD)和電腦輔助製造(CAM)系統之間傳輸資料相關的各種問題和不同預期;為了更充分了解所涉及的問題,我開發了一種名為ZofzPCB的 3D Gerber檔案檢視器(3D Gerber Viewer)軟體,可以從zofzpcb.com免費下載。正如你可能想像的,這類軟體應用程式必須對PCB(A)的相關知識有非常充分的了解,才能對其進行正確的視覺化處理。

我有從中學到什麼教訓?嗯…其中一個是,我當然沒想到會發現事情這麼混亂。

我們來想像一個獨立於供應商的系統,能接受來自不同設計公司的檔案——每家公司可能使用不同的電子CAD (ECAD)套裝工具軟體——並且只需啟動一個按鈕就能製作和組裝PCB。這樣一個系統需要的不僅是「把資料丟過牆」,還得檢查設計的可製造性,同時根據零組件類型、可取得性、數量和要求的交貨時間進行報價。在計算價格時,如果需要人工輸入,雙方都會消耗大量資源;詳列的零組件選項以及分析供應商提供的專有格式零組件清單會是場噩夢。此外,PCB上的零組件位置、方向也必須一一檢驗。

20181019NT31P1 圖1 一個獨立於供應商的系統可接受來自不同設計公司的檔案,只需按個鈕就可以製作和組裝PCB。(圖片來源:Rafal Powierski)

對我來說,這種獨立於供應商的系統概念是以3D Gerber檢視器軟體為中心,其中檢視器可以是桌上型電腦應用程式或一個線上(以雲端或伺服器主機為基礎的)網站服務。有鑑於Gerber是到目前為止這類工作最常使用的檔案格式,我將鎖定這種檔案而暫時忽略ODB++/IPC2581。

從CAD到CAM檔案

你有沒有想過與PCB設計和製造相關的Gerber格式檔案為何如此命名?如果有,請參考EDN姊妹刊、ASPENCORE旗下EEWeb主編Max Maxfield對David J. Gerber所著《發明家的困境》(The Inventor's Dilemma)一書的評論。

幾年前,Gerber檔案規格以「GerberX2」形式的新計畫和新宣傳重獲新生,新版規格歡迎我們所有人貢獻想法;這當然是件好事,但問題的重點不僅只是經典的Gerber功能。舉例來說,取放(pick-and-place,P&P)檔案、物料清單(BOM)檔案以及新的應用程式介面(API)規格都不可或缺;而據我所知,一旦我們接受改變,X2規格會覆蓋大多數的檔案格式問題。

最基本的問題:哪個檔案是哪個?

你知不知道,其實可以將Microsoft Office檔案的副檔名改為.zip,然後解壓縮?然後你會看到一組不同的檔案,包括多媒體、純文字與XML檔,所有這些檔案都被包含在一個zip容器內。這與CAD/CAM Gerber檔案集的概念很類似,也就是將多個檔案綁在一起形成一個「文件夾」。問題在於我們缺少(或者說是有太多)經過正式定義的檔案名稱。

Stackup檔案格式描述文字檔,也列出了用於每個層的檔案,但旨在透過人工解讀。如何正確載入Gerber檔案?以ZofzPCB程式來說,能支持自動和手動兩種方法;在自動方法方面,有一種Mask Set腳本語言用於定義多個命名慣例(naming conventions),以及與每個慣例的特定功能相關聯的檔案名稱。如果沒有修改ECAD工具Gerber匯出模型預設值,很有可能在載入文件時不會出任何問題,如果不是這樣,也可以手動指定檔案。

請注意,除了有其他非Gerber檔案,而且這些檔案在GerberX2下不能自我識別之外,X2也解決了這個問題。而X2最近有一個延伸規格,讓使用者可以在檔案中添加註解(annotations)描述檔案用途。此外最近還有一個衍生的X2規格Gerber Job File,鎖定PCB生產應用。

製造PCB裸板

無論是什麼檔案格式,設計工程師會希望將許多東西以圖形化的呈現方式傳遞給工廠;這些是繪製在PCB層上,有時作為資料負載層(payload layers)的補充。這些元素在轉為銅箔之前必須要去除(圖2)。

20181019NT31P2 圖2 PCB裸板製造。

我們正在將Gerber描述轉變為機器對機器(M2M)格式,讓我們省下試圖辨別哪些線條和其他元素是指真正的實體物件、哪些線條是描述更抽象事物的文字或插圖之人工智慧(AI)和光學字元識別(OCR)方法;為任何繪圖元素添加註解是一種很棒的解決方案,如果描述性成分能自動添加會是最好,因為以人工來進行可能會使得恰當的註釋被忽略。

X2是可以添加註解的,我們只需坐享其成;在此同時我們如何傳遞元資訊(meta information)?大致上已經不再需要;舉例來說,電路板尺寸或每個層的功能標記已包括在Stackup中,如果確實需要,還是將此類資訊保存在單獨的層上,不要做為Stackup的一部分。

電路板框(board outline)標記:有很多種方法可提供此資訊——1. 以獨立檔案呈現;2. 使用特定的線寬(例如零線寬)繪製在某些層上;3. 作為鑽孔檔(drill file)上的繞線。第三種方法相對較新但容易搞亂。

同樣的,圖形元素的註解可解決這個問題。有趣的是,電路板框最適合用多邊形元素來描述,但以往卻是以簡單地根據走線繪製的圖形來構成;有演算法偵測框線並進行轉換,期望那是一個閉迴路。當然,可能還有額外的閉迴路——代表要切割掉的部分(cut-outs)——位於主板框內。我們還有一個小物件——V形槽(v-grove)——需要正式定義,添加註解亦可完成這項工作。注意:用網路名稱(net name)和元件接腳名稱註解焊盤(pad),可以替代IPC356檔。

20181019NT31P3 圖3 電路板框標記。

妥善定義PCB可為執行設計規則檢查(DRC)測試以及自動判定價格類別提供基礎,從而能計算PCB製造價格。為此,PCB供應商需要以某種電子形式提供定價;以我來說,若能讀取以此目的定義的、列出價格計算規則之標準逗號分隔值(CSV)類型檔案,那我會很高興。我的想法是,設計工程師可以將PCB製造商網站上的一個URL提供給應用程式,然後系統就能下載並使用這些定價規則。

在PCB製造商的接收端,會需要自動拼板(panelizing)軟體。Oshpark.com為這項功能提供了一個很好的例子;現有自動化訂單處理系統之間的主要區別在於:我們會需要有一個M2M風格的API,能在多個供應商中通用。

總結:讓我們決定使用GerberX2,以Gerber格式而非Excellon格式來維持鑽孔和佈線資料,使用正確的經註解焊盤(以IPC356或GerberX2檔案格式),並在GerberX2中使用Stackup檔。此外在X2轉換完成之前使用ZofzPCB進行自動化處理。此外PCB供應商應以CSV檔形式在網站上公佈其特性、功能和定價,並提供上傳PCB資料和訂單資訊的標準化方法。

BOM表和零組件採購

即使是小型專案也會是一團亂;雖然不像我老婆在網路上買雙鞋對其中成分精挑細選那麼恐怖,但也差不多了。在PCB的例子中,至少設計工程師已經對零組件選擇有一定想法,當然我們可以在設計階段更改零組件選擇,大多數設計工程師也不必花費大量功夫完美一致地填寫BOM表;事實上,確認特定製造商零件型號的實際工作可能會到設計後期才會進行。

在理想的情況下,電子零組件通路商網站應該能幫助設計工程師查找和確認零件型號,並以合適的格式編寫BOM表。幸運的是,許多電子零組件通路商都有便於自動報價和訂單號碼檢查的API;這是流程的一部分,在其中可以做很多事來簡化工作。由於我一直在使用來自不同電子零組件通路商的API,我發現零件命名並不總是一致(被嚇到了吧?),這真的很惱人。

雖然目前的系統在人工使用上還算可接受,但要實現自動化很難;這可以改變嗎?必須要有更精密的做事方法。其他所需考慮的重要因素包括:封裝與複捲(re-reeling)選項,以及預捲(pre-roll)需要多少額外零件。一些組裝廠備有常用零組件,如去耦電容和電阻;相較於製造工程師必須確認每項決策(有時候他們不確定零組件的作用),對設計工程師來說可以更容易決定是否使用庫存零組件。

令人欣慰的是,自動下單系統領域正在發生很多變化,包括電子零組件通路商網站上的BOM表分析工具(parser),以及像是SnapEDA.com、Supplyframe.com和OctoPart.com等網站的其他工具。在此「所見即所得」(WYSIWYG)類型的軟體工具,可將零組件尺寸視覺化並檢查它們是否適合相關聯的PCB腳位(footprints)。ZofzPCB工具現在也可以提供這些功能:自動檢測BOM表的欄位,將之與IPC356中的零組件序號列表進行比較;此外還支援零組件3D視覺化。

20181019NT31P4 圖4 從通路商網站上搜尋特定型號零組件的結果。

總結:在大型電子零組件通路商的API與網路插件方面,請通路商們務必修改資料庫中的零組件名稱!在組裝廠方面,請提供很簡單的可下載網頁檔——包含庫存零組件以及對應大型電子零組件通路商訂貨號的參考——以便使用大型供應商的API。

組裝

在我看來,P&P檔案格式的概念有誤。ECAD匯出器(exporter)可根據腳位計算出質心(centroid),P&P機器則會利用零組件的中心來置放零件(無論代表什麼)。

對於非對稱(或只有一個對稱軸)的零組件,兩個參考中心是不同的,例如DPACK甚至SOT-23封裝;焊盤越長,差異就越大。P&P編程會要求作業員修正位置。另一個問題是,P&P檔案中的旋轉值(rotation values)指的是零件庫中的原始旋轉。雖然這些旋轉不是任意的——在IPC-A-610標準中有明確規範——但在CAD封裝腳位中,旋轉和中心位置不對的情況很常見。此外,零件庫檔案可能是以水平或是垂直模式建立水準,雙接腳的極化零組件有可能搞反。

糟糕的P&P檔案標準,迫使P&P設備供應商採用其自己的檔案格式;在我看來,現有的P&P檔案格式應被淘汰,資訊可以從IPC356或GerberX2中的焊盤註解中提取。每個質心應該以邊界矩形(bounding rectangle)——如果有使用的話——的中心來替換。

P&P機器的程式設計仍是項人力密集任務;在這個方面的進展至少可顯著降低工作量。透過為每種P&P機器類型編寫單獨的轉換程式,可以實現完全整合。這裡ZofzPCB可提供通用的零組件檢視器(component viewer.)。在客戶端,設計工程師可以檢查元件的放置並決定是否批准;之後組裝廠可以參考所接受的設計,不需要實體PCBA範例。

20181019NT31P5 圖5 元件放置檢查。

價格計算非常複雜,特別是要做到精確和具競爭力。焊過的PCB未通過測試的預期機率,乘以該PCBA的成本,是價格的一部分。另外,元件數量、元件尺寸、最小間距等不得超過指定組裝線的製造能力。API可以只是標準格式的可下載檔案,內含每條組裝線的規則。將規則應用於設計參數會是客戶端軟體的任務。

總結:P&P檔的新定義可以由IPC356提供或作為具備註解的X2。ZofzPCB可以執行DRC/DFM和組裝的定價模型,所需的是建立能從每一家組裝廠網站上取得的定價模型描述檔案格式。

供應商列表:為了使系統能夠瀏覽供應商網站,它需要知道它們各自的URL。一個想法是利用Google;首先你必須對例如「PCBA製造」這種關鍵字或是某個特別發明的「魔法」字眼進行進行排序,然後就能對搜尋引擎結果頁面(SERP)進行解析並提取URL;系統會抓取清單、尋找描述頁面。另一個想法(為何不同時使用這兩種方法?)是只維護特定地址下的供應商列表。

你認為呢?我們能成功實現一個無須人工干預、全自動化的PCB下單製造系統嗎?歡迎提供你的看法與建議!

本文同步刊登於EDN電子技術設計2018年10月平面雜誌

(本文原刊於EDN姊妹刊,ASPENCORE旗下EEWeb網站;參考原文: Alexa, Please Assemble My PCB,by Rafal Powierski)