延續上一篇文章再進化!輝光管時鐘第二代 | 設計動機與前言 我延續模組化設計把整個作品分成顯示板與控制板,並讓顯示板可以依照個人喜好選用IN-4或者IN-14的輝光管。
本文將介紹第一版樣品的各項功能、實際測試結果,以及評估後決定保留或移除的設計。同時也會說明如何使用 KiCad 完成 PCB Layout,並透過 JLCPCB 製作電路板及進行 SMT 組裝。{alertInfo}
目錄#
第二代輝光管時鐘架構#
在第二代輝光管時鐘的設計,我延續模組化堆疊的方式,利用低價穩固的板載連接器將顯示板與控制板結合在一起。
顯示板#

這是顯示板在KiCad中的電路板模型。


RGB LED#
RGBLED使用WS2812B 2020,所有的LED燈資料線互相串聯連接,透過NRZ-Single Wire協議通訊。這個通訊協議需要先定義好'0’跟'1’的脈波寬度,然後再用脈波寬度來編碼資料。詳細的說明可以參考WS2812B 协议详解:可寻址 LED 的技术原理(簡中)網站。

由於所有LED燈資料線都是串聯連接,最前面的LED燈會依照資料順序擷取自己的資料後,後續的直接轉送給後面的LED燈。
每顆 LED 會擷取資料串流中的第一組 24-bit 色彩資料,並將剩餘資料重新整形後傳送至下一顆 LED,因此不需要為每顆 LED 設定獨立位址。
輝光管驅動#
顯示板背面則是PCA9685的PWM控制IC,負責調整每個輝光管字元的亮度。PCA9685是一個PWM產生IC,被廣泛應用在RC Servo Motor上的控制,如機器手臂控制,或者無刷馬達速度控制等等,可參考 PCA9685、I²C與伺服馬達共筆的說明。它也可以被用來控制LED燈條的亮度,或者顏色控制。在這裡我讓它與輝光管的陰極串接,透過PWM訊號開關陰極來調整輝光管的亮度。
電路背面包含連接器與PCA9685控制器,還有驅動用的高壓電晶體。



經過量測電流發現,限流電阻應該降低成22kΩ 才有辦法點亮數字'8’,一開始設定的68k太大了{alertSuccess}
控制板#


為了把鋰電池跟喇叭放在時鐘外殼內,控制板的面積不能太大,要盡可能的把空間留給鋰電池。
USB PD#
PD協議電路延續過去專案,我使用HUSB238作為通訊,詳細電路可參考 為專案加上PD供電|使用HUSB238製作超小PD誘騙器一文,只要使用電阻設定電壓與電流後,就可以取得所需的電源。這個專案我將電壓設定在12V,電流2A,這是大多數手機快充充電器可以支援的PDO (Power Data Objects)。
電池充電與電量計#
鋰電池充電線路我選用BQ25601,它是一個同步Buck充電線路,把USB的5V輸入轉換成4.2V的充電電壓。此外,第二代時鐘要支援USB PD供電,這顆充電IC的最大建議輸入電壓可以達到13.5V,剛好符合我12V輸入的需求。

音訊播放#
音樂播放方面,我使用DFPlayer-Mini來播放SD卡內的mp3 檔案。
DFPlayer Mini是由DFRobot出品的MP3 播放模組,主要透過UART跟Host通訊,也可以獨立透過按鈕來播放,暫停,調整音量。在這裡我把它作為ESP32的附屬設備,由ESP32下指令來控制音樂的開始與停止,也把音樂的音量儲存在ESP32中。


當我想要擷取目前SD卡中的音軌數量時,發現在DFPlayer官方網站的資料手冊中,取得TF卡的檔案數量指令是0x47, 但如果參考的是Github的datasheet, 它的指令卻是0x48。

使用者須留意指令的不同,筆者使用的是淘寶官網買的DFPlayer,使用的是github repo中的datasheet,建議仔細確認用到的每個指令。{alertWarning}
RTC#

即使這顆晶片的成本比較高,但我認為若時鐘連時間都不準,那其他功能也沒有太大的意義。
ESP32 與UART燒錄線路#

這兩個電晶體是自動下載電路(Auto programming circuit),參考ESP32-S3-Devkit-C-1的電路圖繪製而成。其中一顆電晶體連接到ESP32的Enable Pin,另一個電晶體接到GPIO0,這個GPIO0是用來設定開機模式的。當ESP32啟動的時候,會讀取這個Pin的狀態來決定要從UART開機還是從Flash開機。
自動燒錄的動作是:
- 將 GPIO0 拉低。
- 將 EN 拉低,讓 ESP32 重置。
- 釋放 EN,使 ESP32 重新啟動。
- 因為解除重置時 GPIO0 仍是低電位,所以進入下載模式。
- 釋放 GPIO0。
- 透過 U0TXD/U0RXD 傳送韌體。
當 DTR 和 RTS 同時為低時,EN 和 GPIO0 不會一起被拉低。這可以避免某些終端程式開啟 serial port 時,同時改變 DTR、RTS,造成 ESP32 一直被 reset。
有了這組電路,燒錄的時候不需要去按下BOOT鍵或者手動Reset ESP32。
除此之外,我在板子上安裝CP2102晶片,它是一款由 Silicon Labs 推出的單晶片 USB 轉 UART(串列埠)資料轉換器晶片,常用於將電腦的 USB 介面轉成 TTL/UART 訊號。它常被做成小型傳輸模組,用來幫 Arduino、ESP32 或其他微控制器下載程式與進行序列通訊。
有了它我就可以透過時鐘上的Type-C孔來燒錄而需要額外的轉接器。
高壓電源#
最後是輝光管的升壓電路。在第一版樣品中,我使用LM5155做一個單級升壓電路,把5V電壓升壓到173V。這個架構目前的缺點是效率不高,大部分都消耗在MOSFET本身的寄生元件上面。
如果使用者提供的電源不足12V,或者PD通訊失敗導致供給時鐘的電壓只有5V的時候,整個升壓轉換器會有比較嚴重的發熱情況。
電流監控#
在這個版本,我使用INA3221來量測各路電流耗電,想要藉此Debug哪一部分電流消耗比較大,藉此來降低電池電量消耗。

姿態感測#
為了讓時鐘的操作介面不局限於按鈕或手機藍芽,我加入MPU6050陀螺儀來偵測環境震動跟裝置姿態。

陀螺儀跟加速度計是透過量測微機電系統(MEMS, Micro electro mechanical Systems)極板之間的電容變化來計算當前加速度或角速度值。微機電系統在晶片上蝕刻出微小的電容機構,當裝置震動或旋轉時,物理慣性會影響機構之間的電容值,感測電路可以把電容訊號轉換成物理上常用的參數,藉此來回報加速度數值。

第一版測試結果與第二版修改#
- USB-PD:原始線路圖中Rset(R58) 設定12V, Iset沒有連接,此配置會讓HUSB238B 向充電器要求12V/3A的功率物件。但這個PDO不一定所有充電器都支援,所以第二版會改成Iset=10.5kΩ,讓設定的電源變成12V/2A,確保最大化的相容性。
- 電池充電線路:原本以為BQ25601 自帶的OTG供電功能可以同時取代充電電路跟5V 升壓電路,但實際上詳讀datasheet後發現,OTG 供電功能需要再移除輸入電源後才能開啟。但電源移除之後系統的3.3V 電壓就會斷電,導致ESP32 無法傳送命令給BQ25601,所以陷入一個死循環。下一版本會沿用這組充電線路,但加入3.3V降壓電路與5V升壓電路來為ESP32與其他IC供電。
- 高壓電源:高壓電源在5V 輸入的情況下效率只有67%,且電感與電晶體會發熱。有兩種解法,第一種是換另一組電路,或者限制輸入電壓只有5V 時的功能。例如5V 電壓時輝光管的亮度只會是正常顯示的一半,或者快速休眠模式。下一版預計使用兩種電路並存的方式,保留原本的電路但也把輸入輸出的位置留給外部模組。
- 電流感測:經過思考後發現這個功能的效益不大。我偵測的電流分別供應給輝光管電源,LED燈,還有ESP32本身Buck converter的電流。雖然這三項指標很適合拿來評估電池壽命,但它並不是一個需要一直存在電路上的功能,只會增加成本。於是在第二版的樣品電路中,我會把它移除。
- 姿態感測:MPU6050 的成本並不低,一個大約要5美金。為了要讀取裝置的姿態跟桌面的震動,估計一秒大約需要更新200次數據才會有實用性。但這個速度會占用I2C匯流排的頻寬,排擠其他系統的通訊能力。因此,在評估它的使用情境跟效益後,我也決定把這個電路從下一板移除。
KiCad PCB Layout#
KiCad 介面#
KiCad 的Layout 走的是比較容易使用的方向,相比於Altium Designer或其他更專業的軟體,KiCad 把進階功能藏在比較深處,如阻抗匹配,Via設定等。大多數電子電路愛好者對於這些功能的使用機率比較低,也讓介面變得更簡潔。整體控制介面可以分成左邊,右邊與上方工具列三個區塊。

而右方欄則是編輯與量測工具為主。最右邊的圖層顯示可以快速顯示或隱藏每個圖層,右下角的篩選器可以快速設定要選取的東西,這個在使用者想要重畫Layout 的時候可以快速選取線段就好而不選到Footprint。

Footprint 與 LCSC 料號#
在繪製電路圖之前,要在原理圖中確認每一顆零件的封裝,零件編號是否正確。
我們可以使用原理圖編輯器上方工具列的’編輯符號欄位’,一個很像Excel表格的icon來批量處理電路圖中所有零件的屬性。


這種整合製造的優點就是可以串接上下游製程,PCB板製作完成後直接進入SMT組裝程序,不用再等其他零件供應商的料抵達打件廠,也可以在PCB下單的同時就跟倉庫把需要的零件鎖定到這筆訂單,不被其他訂單搶走。
但缺點也很明顯,如果LCSC沒有的零件就沒有辦法加工組裝,或者會需要請LCSC從其他廠商進貨,成本可能會比自己手工焊接更高很多。
所以我的策略也很直觀,遇到缺料或者特殊料不打件,回來我自己手工上件。其他常用料正常組裝,最小化我自己的人工成本。
要如何新增零件欄位,讓KiCad知道每一顆零件在LCSC倉庫中的料號是多少呢?
首先對零件左鍵兩下,叫出零件屬性視窗。

舉例來說,我想新增BQ25601的LCSC PN,那我到LCSC上搜尋BQ25601會有兩三個結果,這裡要注意IC零件的尾墜字母可能是工作溫度範圍,或者是包裝型態,如捲裝或者散裝等等。

JLCPCB官方也有文章說明如何搜尋電子元件: JLCPCB電子元件搜尋說明
如果是常用的電阻或電容要選料,有個省錢的小技巧: 使用基礎零件庫(basic component)
從JLCPCB官方對於SMT 組裝費用說明的文章: 您的PCB組裝價格包含哪些? 一文中,有一項叫做 ‘送料器裝載費’,它指的是SMT 機器在開始打件前會需要把零件裝載在捲料帶中,要把每個料放到料槽內才能安裝。而做這項工作需要的人力費用就是這筆安裝費。
對SMT 打件機器有興趣的朋友,也可以參考嘉立創的文章:SMT貼片機工作原理(簡中)

以一個100kΩ, 0402的電阻為例,如果選用C25741這個基本料,就不用加收3美金的’送料器裝載費’,但如果選用C60491則會有額外支出。
這背後可能是因為Uni-Royal (基本料的供應商)跟嘉立創有合作關係,可以確保有長期的零件支援滿足嘉立創訂單需求,可能簽了一個長單,讓JLCPCB的使用者會更偏好使用他們家的零件。
Basic Parts 通常是 JLCPCB 長期放置在送料器上的常用料,因此不需要為每筆訂單重新換料與設定設備,可以減少送料器裝載費。至於供應商選擇及採購條件,仍以 JLCPCB 官方說明為準。
盡可能的選用基礎零件將可以大大降低SMT的打件費用!{alertSuccess}
確認好零件封裝還有料號之後,就可以開始連連看!
元件配置與走線#
將零件依照機構需求還有最小面積擺設好後,可以開始進行線路繪製。
快捷鍵’X’ 可以從滑鼠游標作為起點開始走線,‘V’ 可以放置通孔,當電路某一面無法走線時,可以走到背面繞過障礙物。

以JLCPCB的製程來說,PCB製造和組裝能力 詳細說明JLCPCB的製程能力。
我一般會設定最小線徑是0.2mm,最小線徑會依照PCB的銅箔厚度有所不同。越厚的銅箔允許的最小線徑越寬,但相同線徑下越厚的銅箔能承載的電流也越大。

我會設定鑽孔大小是0.3mm/ 0.6mm,在電路大小允許的情況下,不用到高精度製程,避免額外的成本支出。

鋪銅#
在大片電流路徑或者GND 要做遮蔽時,使用鋪銅功能可以繪製大面積銅箔。
點選右方鋪銅按鈕,設定好鋪銅要連接的網路名稱。
或者在點選鋪銅按鈕之前,按下鍵盤左上方的’`‘符號(Back tick key, Tab上方那個按鈕) 高亮欲鋪銅的網路,接著在點選鋪銅,鋪銅工具就會自動選取Net name。
下一步選擇欲鋪銅的銅層,可以在Top layer, bottom layer或者任何內部層(inner layer)來鋪銅。



當PCB越變越複雜後,每個不同的鋪銅可能會造成我們在檢視上的困擾,這時左方工具列的’繪製鋪銅輪廓’功能就很實用,它只會顯示鋪銅外框輪廓而不會填充顏色。
DRC#
線路跟鋪銅都繪製好後,可以進行設計規則檢查,Design Rule Check (DRC)。請務必進行這項檢查,避免產生一個不能動的設計,而浪費辛苦賺來的錢。
首先需要先定義好正確的電路板規則,檢查才會有意義。我們可以依照JLCPCB製程來設定規則,但簡單一點可以直接套用我的設定,或參考KiCad 論壇的討論: Understanding the JLCpcb.com design rules來設定規則。
設計規則一般會是最小線徑或鑽孔設定,但若我們想要為了降低成本使用較大的鑽孔,使用者須自行留意孔徑大小。或者手動調整設計規則,讓所有錯誤一併在DRC check階段全部浮現出來{alertInfo}
設定好規則後,檢查我們的電路圖是否有符合規則。上方工具列點選’設計規則檢查’,選擇是否要在檢查之前重新鋪銅,檢查是否跟原理圖相同,還有是否要報告所有走線的所有錯誤。
我個人會先以最嚴格的方式執行檢查,接著每一條分析原因之後,在分析那些錯誤是不影響電器特性的,還是設計規則不恰當導致的錯誤或警告。
普遍來說,只要沒有網路忘記連線,鋪銅互相短路,或者Footprint設定不同之外,其他問題都不太影響電器特性。
舉例來說,這是我故意把連線切斷產生未連線端點的錯誤。


製造檔案輸出#
Gerber#
完成Layout繪製與檢查後,我們可以使用KiCad內建的匯出功能來產生Gerber檔與鑽孔檔,也可以使用 Fabrication Toolkit 這個插件來產生所有生產需要的文件。
但Fabrication Toolkit還包含BOM與CPL檔案的導出,我想先跟大家介紹Gerber檔案的匯出,在下一節再一併介紹如何使用。如果想快點產出生產文件的朋友可以直接點到下一章節。
PCB的製造流程主要的步驟如下:
- 確認製造商製程能力,如最小孔徑限制與最小線徑限制
- 設定Gerber 尺寸單位,匯出Gerber檔案
- 匯出鑽孔檔案 Drill file
- 確認Gerber檔案,包含外框,銅層,防焊層,絲印層等
關於Gerber檔案以及匯出須知可以參考JLCPCB的文章: 如何準備完美的 Gerber 檔案,確保 PCB 製造順利無誤。
簡單來說,Gerber是一種標準化的二維影像檔,在PCB製造中,所有的EDA軟體都能夠把專案匯出成Gerber資料,因此所有的製造商都有相同的語言可以溝通,避免不同軟體與不同製造商會有各自不同設定而衍生出無意義的製造問題。在過去人工投影電路圖到感光電路板的年代,甚至還有一個參數是’Aperture’,也就是光圈,那時候每間製造商的光圈設定可能都不一樣,這也讓PCB的製造非常混亂。關於Aperture參數的由來,還有詳細的Gerber檔案內容可以參考D-codes Aperture and gerber plot files
後來Gerber file解決了這些問題,讓大家統一使用相同格式,原本的Aperture參數也直接嵌入到檔案中,避免缺少檔案造成的困擾。
目前JLCPCB使用的Gerber 格式是 ’extended X2’ 格式,單位則是 ‘4.6, unit mm’ 毫米單位4.6格式,這個意思是精確度會到小數點後第六位,小數點前則是4位,如'1234.123456’。
此外,我們也要把所有的銅層都導出成gerber file,以這片板子為例,包含Top, Layer1, Layer2以及Button層。還有DNP (Do Not Populate)註記可以打勾,並且在匯出gerber前檢查鋪銅等等設定。
Drill file#
下一步是產生鑽孔檔案(drill file)。鑽孔檔通常使用 Excellon 格式,用來描述孔位、孔徑,以及電鍍孔與非電鍍孔等資訊。它會和 Gerber 圖層檔一起交給 PCB 製造商。
檔案內容包含孔位的大小與位置,以及孔位是電鍍通孔(Plating Through Hole, PTH)或者非電鍍通孔(Non-Plating Through Hole, NPTH)。這兩個的差異在於電鍍通孔用於多層板層間互連,孔壁經電鍍處理以傳導訊號,而非電鍍通孔則多用於機構需求,如固定或定位,不具電氣連接功能。
其他孔位如盲孔(Blind Via hole),埋孔(Buried Via Hole),微孔(micro Via)等等的定義可以參考JLCPCB 的文章: 鑽孔圖在 PCB 生產中的重要性一文。
要匯出Drill file也很簡單,在KiCad 匯出Gerber的對話框右下角就有’匯出鑽孔檔’的按鈕,按下後也會有對話框出現。
這時可以維持預設選項,或者對應下圖設定。


因此,為了降低成本與簡化流程,我在設計的時候就盡量使用SMD元件,藉此來降低最後的生產成本。

SMT 組裝需要的文件是BOM表與CPL檔案。BOM是 Bill of Materials的簡稱,意思是物料清單。而CPL file是Component Placement List (元件放置清單)的縮寫,有些廠商也會稱呼它為 Pick and place file (夾取與放置清單) 或Centroid File (座標文件)。
BOM#
BOM表需要包含的資訊會因為廠商,供應商,加工廠等等有很大的差異。但主要會包含零件編號(Designator),註解,料號,封裝等,大型公司還會加入公司內部的內部料號,零件商編號,供應鏈的風險等級等等資訊。為的就是統一管理每一顆元件的各種屬性。
有了BOM表,工程師可以一目了然的分析這個專案使用到的料況,由那些元件組成,那些元件可能有問題之類的。對製造商而言也可以清楚明白的知道哪一個位置要放哪一個元件。
但KiCad內建的BOM 導出設定產生的BOM表格式並不能相容於JLCPCB需要的BOM格式,我們需要下載Fabrication Toolkit才能正確的把BOM 格式設定正確。

CPL#
CPL檔案表示每一顆零件要在電路板上的位置。它跟Gerber file不同的是,雖然都是座標,但Gerber是給電路板製造的機器還有鑽孔機看的,但CPL檔是給機械手臂夾取 / 放置零件用的。且CPL檔案還需要注意零件的擺放位置,不能把二極體左右放反,也不能把電解電容正負插反。這樣不僅會讓電路無法工作,也可能導致設備受損。
舉例來說,顯示板的CPL檔案會長這樣,D1的位置是90, -138.5, 方位是180,位置在PCB的正面(top)。而U1的位置是216,-167,方位是90,位置在PCB的背面(bottom)。

Fabrication Toolkit#
為了要產生相容JLCPCB的BOM表格,我們可以使用Fabrication Toolkit來幫助我們自動化整個檔案會出的工作。

首先搜尋Fabrication Toolkit, 接著直接下載之後,點選套用變更就好。




Q1-Q10則是高壓電晶體MMBTA42,料號是C94389。其他以此類推。
檔案都匯出完成後,將Gerber檔案與鑽孔檔壓縮成’Zip’格式後,我們可以前往JLCPCB的估價頁面,將檔案上傳進行線上估價。

但我的專案需要150mm×50mm 的四層板,價格相對來說就沒有特別的優惠。但即使如此,跟其他廠商相比還是比較便宜,同時又兼顧品質。
上傳完成後我們可以預覽PCB的3D圖檔,確認外觀與機構的位置正確。
如此一來我們就可以進到下一步驟,SMT組裝。
JLCPCB也提供詳細的繁體中文說明給KiCad 8的使用者: 如何在 KiCAD 8 中生成 Gerber 和 Drill 檔,或者如果你是KiCad9的使用者,其實設定都差不多,但也可以參考英文版的文章 How to generate Gerber and Drill files in KiCAD 9
JLCPCB 下單與 SMT 組裝#
PCB 參數#
準備好所有文件,檢查好設計之後,我們可以將Fabrication Toolkit產生的Zip檔直接上傳到JLCPCB的估價頁面。


接著我們可以預覽PCB 的樣貌,並將剛剛製作好的BOM表與CPL檔上傳到系統中。
零件料況#

這時我們有兩個選項,一個是不上件或者選擇其他零件。
但目前沒有其他替代料可以使用,而這個零件手工又不好上件,只能再等等看他們什麼時候補貨了。這也是PCB製造跟打件被綁在一起時要注意的事情之一。
元件位置與角度檢查#
如果確認零件封裝料況無誤後,就可以進入打件預覽階段,JLCPCB提供很多零件封裝模型讓使用者所見即所得,可以看到依照目前的設定檔零件的擺放位置以及角度是如何。
以顯示板為例,PCA9685的角度完全是錯誤的,這時一定要手動的把每一顆零件都擺正,避免後續電路無法工作。
費用確認#
確認好零件位置後就可以進入結帳頁面。此時會詳細的列出每一個步驟與每一筆費用被應用在哪裡。
JLCPCB官方有提供BOM與CPL檔案的注意事項: BOM / CPL 檔案準備建議,記得製造的時候可以檢查一下有沒有那些檔案還有疏漏之處。畢竟一次SMT打件的費用都比PCB製造還要貴好幾倍。{alertWarning}
結論#
本文介紹了第二代輝光管時鐘的硬體架構。整個系統分為顯示板與主控板,採用堆疊式模組化設計,並改以 ESP32 作為主控制器。此外,第一版樣品還加入電池充電、音訊播放、姿態感測、RGB LED、電流監控及輝光管 PWM 調光等功能。
將這些東西整合好並測試之後,發現電流偵測線路跟陀螺儀並沒有太大的效益,於是會在第二版中移除這兩個設計。
此外,這篇文章也順便介紹如何使用KiCad的套件 Fabrication Toolkit來產生適用於JLCPCB的製造檔案以及BOM表跟CPL檔案。




















