所需材料
考慮插孔位置,後面插頭延用。把上面旳元件拔掉,鑽螺絲孔,固定功放板。
功放板,選用 XH-A232 D類數位音频功放板,只有後級。使用無源音量調整網路,只接受電腦的耳機輸出的高電平信號。
XH-A232 的電源,電壓 24V,電流 3A,選用 24V 5A 適配器。
參考 How to Make a USB Laptop Keyboard Controller
git: USB_Laptop_Keyboard_Controller
找 「Example_Keyboards」目錄下的 「Lenovo_ThinkPad_T61」或其他 ThinkPad 相關的 example,可以找到鍵盤的矩陣和接頭的接腳定義。
使用 qmk_firmware,在「keyboards/converter/thinkpad_t6x」有相關作法。此作法使用 Raspberry Pi Pico,但我要用 STM32F411 Black Pill 開發板。
修改後的電路圖,把不需要的部分都砍掉。
洗出來的板子。
好不容易把電路板做出來。
鹿小班 的 USB TO CAN通信模块 (PCAN),是淘寶能買到最便宜的 U2C 轉換器,一個約台幣 70元。MCU 是 極海 (Geehy) 出的 APM32F072CBT6,出廠時,韌體刷 PEAK System PCAN-USB。APM32F072CBT6 相容於 STM32F072CBT6,因此這個裝置可以刷 candleLight 1.0。
另外有賣 USB转CAN调试器 Cananle 2.0,價格約 2倍,使用的 MCU 是 STM32G431CBU6。
安裝 can-utils,方便觀察 CAN bus 的資料傳送。
先前用燒壞的 EBB42 工具板 改的 CAN bridge 來連 EBB42 工具板,Klipper 已可順利運作。測試看換成這個 PEAK System PCAN-USB 能不能用。
使用 ip 指令,開啟 can0 UP,先前已按 Klipper 文件,將 qlen 設成 128。
要設定 printer.cfg 前,必須先查 EBB42 工具板的 UUID。
很重要的一點,上述查詢 UUID 的步驟,必須在 EBB42 停止運作下才查得到。假如 printer.cfg 已設定好,klipper service 啟動後,連上 EBB42,此時即使關閉 klipper service,也無法查詢到 UUID。因為 CAN bus 在拓樸上,是 multi-master system,EBB42 設定啟動後,就會持續送出資料。
因此,必須先把 klipper service disable 掉,重新開機,再執行 canbus_query.py,才能查到結果。
另外,也可以用 katapult/scripts/flash_can.py 來查詢。
執行上述查詢,candump 跳出了兩筆關鍵資料,逐行拆解如下。
第一筆封包:
第二筆封包:
上面的內容,應是 host 先送出查詢封包,即第二筆封包的內容。然後 EBB42 回傳狀態資料,即第一筆封包的內容。但因為 candump 的處理機制,兩筆資料倒過來印出。問了 Gemini,做了一堆推測,看不懂,算了。
使用 PCAN,雖然可以運作,但行為怪異。設好 udev rule,照理說,重開機後,應該會正常運作。但都無法連上工具板,必須把 U2C 轉換器拔掉重插,才能正常運作。因此決定重刷 candleLight_fw 看看。
這個裝置使用 APM32F072CBT6,相容於 STM32F072CBT6,因此可以刷 candleLight 1.0。狀態 LED 的接腳一樣是 PA00 和 PA01。下載位置如下
https://github.com/candle-usb/candleLight_fw/tree/v1.0/bin
燒錄步驟如下。
在未插上 USB 接頭時,先把 BOOT 和 3.3V 短路,再插上 USB 接頭,此時 MCU 會進入 DFU 模式,可以燒錄 firmware。
重刷後,整個運作正常。機器關機後,即可順利連線。
在 boot 目錄下,查看 kernel 的設定,沒有將 panel_mipi_dbi 編進 kernel。
透過 Gemini 指導,自行編譯 out-of-tree module。
首先,使用 armbian-config 安裝當前核心版本的 headers,然後編譯所需的 module。
在 DIY 3D 印表機,第一次使用 CAN 工具頭,很不幸,24V 電源接反,一陣火光,上面的 TMC2209 步進馬達驅動燒毀了。但吃 3.3V 的 STM32G0B1 MCU 還是好的,捨不得丟,當下也想不到可以做什麼用。
使用多買的 EBB42,搭配 FLY D5 使用,順利完成機器設定,可以跑起來,歸位,加熱。但測試列印時,一開始印,就當。懷疑是 FLY D5 同時兼 X / Y 移動控制 和 USB to CAN bus bridge,效能不夠。
以前只用 FLY D5 控制整機,都不會有問題。 打算把 FLY D5 重刷舊的 firmware,另外用 USB to CAN converter 連 EBB42。想要下訂轉換器,等拿到要等約兩個星期,又要把機器擺著,不能繼續後面的整理。
後來想到剩下一半功能的 EBB42,正好可以當 USB to CAN 轉換器使用。
在這過程,靠著 Gemini 幫忙,才能快速順利完成。
Katapult(前身為 CANBoot)是 Klipper 生態系中常用的 Bootloader,可以無需拆卸或透過 USB 連接,直接透過 CAN 匯流排為 EBB42 工具板無線更新韌體。
1. 正確的 EBB42 Katapult 編譯設定
請回到 katapult 資料夾,執行 make menuconfig 並按照以下參數設定:
2. 重新燒錄 Katapult
編譯完後(make),再次進入 DFU 模式燒錄:
sudo dfu-util -a 0 -d 0483:df11 --dfuse-address 0x08000000:force:mass-erase -D out/katapult.bin
重啟後,假如還沒燒錄 klipper firmware,會直接進入 Katapult,藍色 LED 閃爍。
進入 Klipper 的 make menuconfig:
指令如下
刷好之後,用 USB 線把它插上 Orange Pi。這時候,這張燒掉驅動的 EBB42 在 Linux 系統裡,就會直接變成標準的 can0 實體網卡!
~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0
另外使用新改的 EBB42 USB-to-CAN 連接 EBB42 CAN 工具板,可ivo執行列印測試,但列印一陣子後,還是當掉,出現 "MCU 'mcu' shutdown: Timer too close" 的錯誤。
當機的原因是 'Got error -1 in can write: (105)No buffer space available'。在 Klipper 的相關文件提到,要將 CAN 的 txqueuelen 增加到 128,原來預設是 10。但也不能設到太大,怕等待時間太長,影響 Klipper 的錯誤判斷的時效。
Klipper 的文件,說可以建立 /etc/network/interfaces.d/can0,開機或接上裝置後,自動設定,但照著做,並沒有效果。改用 udev rule,可以成功運作。設定如下。
連上裝置後,等待半秒鐘後,系統完成設定,再修改 txqueuelen。
https://github.com/roysa/flatcam-evo-ubuntu24
串
在淘寶買了一堆淘汰的 cr touch,使用 bltouch 的設定,不一定能成功控制。透過 AI 確認,可以像伺服舵機 mg90s 那樣控制它。改變 pwm 的 pulse width,cr touch 會解讀成對應的指令。可能是 cr touch 內部的頻率基準偏移,使用標準的 pulse width 會運作失敗。
接線如圖。(網路借來的圖)。
透過 Servo Signal 控制桿子伸出與收回。延用伺服舵機的 PWM 控制信號。PWM 信號的頻率為 50 HZ,即週期為 20ms。改變脈波寬度可以改變舵的角度。
BLtouch 將 0° ~ 180° 分割成不同指令的區段。下面是 klipper 的原始碼的資料。
使用 [bltouch] 的設定,無法順利動作,不知問題出在那裡。klipper 的文件,也提到使用 clone bltouch 時,一堆可能會碰到的問題。後來使用 [servo] 和 [probe] 設定,更能彈性的設定,讓它正常運作。
printer.cfg
上課後收的中古機
2026年4月中古價,主機 9,000元,外罩 1,500元。和照片不同的地方,主軸改用直流馬達,電控箱也不太一樣。
主軸直徑 52mm
練習的作品,銑刀工具盒。材料 婆羅洲鐵木。
基本術語,"條",1mm = 100條,即 1條 = 0.01mm。
尺寸圖
刀具設定,只用一把雙刃平底銑刀,刃徑 4mm,刃長 20mm,柄徑 4mm,長度 48mm。
因為 FreeCAD 無法在 operation 裡設定轉速和進給,所以同一把刀,不同轉速和進給都建一個 tool。如下圖。
銑切摘要
CAM 的工序如下圖。
在 AI 的協助下,大約花了3天的時間,把板子裝上最新的 Armbian OS。啟動後的畫面如下。
這塊主板上的標示為 "Raise3d Controller v2.0",自己 Google 找不到相關的資料,但 Gemini 就有,只能靠它了。
原來的系統是 Yocto,用在嵌入式系統中。在確認新的 Armbian OS 可以成功啟動後,把原來的 emmc 備份後,就整個刪除,只留 uboot 的部分。
最初,藉著 AI 的協助,進入原系統,修改密碼。因為能夠進入舊系統,在後來啟動 Armbian 上,也很有幫助。
這是我第一次進入 uboot,以往從來不知在啟動時,按任何鍵,就能進入 uboot,因為那時機,可能不到 5秒。最主要的是,進到 uboot 後,也不知能幹嘛。
因為這個舊 uboot 沒有支援 ext4,所以要將 SD 另外切出 FAT 格式的 boot partition,然後將開機所需的檔,放在這個 partition。
到 Armbian 的 SoC: i.MX 6 網頁,下載 image。沒有為這塊板子建的 image,可下載 Cubox-i 的 image。下載網址如下。
https://armbian.atomonetworks.com/dl/cubox-i/archive/
因為是舊版子,image 是比較舊的,目前下載的是 2025/5/19 的
Armbian_25.5.1_Cubox-i_bookworm_current_6.6.90_minimal.img.xz
必要時,要用舊系統開機,如確定原本的設定,可以使用備份的 image,依上述步驟,建立開機的 SD卡。
進入 uboot,能指定開機裝置,載入 kernel image,ramdisk image,dtb 檔,然後就能用 ramdisk 開機。ramdisk 開機後,就能執行 linux 的指令。若無法正常開機,如缺少需要的 module,可以重包 ramdisk image。
mmc dev 1 -- 是 SD,對應 /dev/mmcblk2p2。mmc dev 2 -- 是 EMMC ,對應 /dev/mmcblk3p2。
設備樹可以用 imx6q-sabresd.dtb。但是下載的 image,uInitrd 中,缺少啟動 mmc 裝置的 module。所以把 uInitrd 展開後,加入所需的 module 後,再重新打包。
缺少的 module,包括 mmc/core/mmc_block.ko,以及 mmc/host 目錄下的 sdhci.ko,cqhci.ko,sdhci-pltfm.ko,sdhci-esdhc-imx.ko。
在 ubuntu 重建 initramfs 的步驟。
確認可從 SD 開機後,再把原來 EMMC 上的 root partition,format 成 ext4 格式,再用 rsync 把檔案都複製到 emmc 上。然後修改 boot 資料,即可順利自動啟動。
複製 boot,和上面類似。複製系統的步驟如下。
修改 /boot/armbianEnv.txt。可以使用 blkid 確定分割區的 uuid
改用
修改 /etc/netplan/armbian.yaml,將 renderer 改為 NetworkManager。
移除 systemd-networkd-wait-online.service,不然沒連網路線時,開機要等 3分鐘。
收了一台 2017 年的 Raise3D N2 3D 印表機,拆下的主板。
原登入資訊,Poky (Yocto Project Reference Distro) 1.7 imx6qdlsolo ,在 Gemini AI 的協助引導之下,修改 root 密碼,成功進入系統。
重開後,看到 U-Boot 訊息(Hit any key to stop autoboot: 0)就代表你已經掌握了這台機器的「生殺大權」。既然不知道 Linux 層級的帳號密碼,我們可以繞過登入程序,直接從 U-Boot 進入 Single User Mode 來重設密碼。
1. 進入 U-Boot 指令模式
將板子重啟(斷電再通電)。
在看到 Hit any key to stop autoboot 倒數到 0 之前,趕快在鍵盤按下 任意鍵(通常是 Enter 或空白鍵)。
如果成功,提示字元會變成 MX6-SabreSD>(或是類似的標籤)。
使用 printenv 列出環境變數。
出現 Bad Linux ARM zImage magic! 這個錯誤,通常是因為 U-Boot 在載入核心鏡像(zImage)時發生了位移或是抓錯了檔案位置。
觀察你的 printenv,這塊板子預設會先執行 loadbootscript(去讀 SD 卡或 eMMC 上的 boot.scr)。當我們手動改動 mmcargs 並執行 run mmcboot 時,可能因為環境變數中的位址(如 ${loadaddr})與實際檔案不匹配,導致 U-Boot 讀到了破碎的資料。
既然自動腳本 run mmcboot 失敗,我們改用最原始、最手動的方式來載入核心,這樣最精準。
修改密碼,重新啟動。
重啟後,就可以進入了。
現代電腦(SSH 客戶端)認為 ssh-rsa(基於 SHA-1)已經不夠安全,所以預設停用了它;而這塊板子上的 Dropbear 版本較舊,只提供這種加密方式。
猜舊密碼
備份前,先在剩餘空間塞 '0',提高壓縮率。進行全磁碟填零會消耗快閃記憶體的寫入壽命,但如果只是為了換系統前做一次性備份,那是沒問題的。塞滿後,會出現 dd: writing '/zero_file': No space left on device 是正常的,接著執行 rm 即可。
整體執行步驟如下。
Poky 1.7 內建的 dd 通常版本較舊,不支援 status=progress 參數。如果你想知道備份跑了多少,可以另開一個視窗執行下面的指令。這會每 5 秒叫 dd 在它原本的視窗印出目前的傳輸進度。
這是和 AI 討論後,所決定的潤滑保養方式。
這是最普遍可以買到的潤滑油。可以到中油加油站的複合商店買到,便宜又大罐。
適合清洗舊油,光軸潤滑。
中油加油站的複合商店有賣,不貴,大約一百多。但不是每家都有進,要多跑幾家才能買到,我就跑了五個加油站才買到。
不要買高溫,也不要買極壓的,它的添加物,像 鉬,會造成問題。
這是普遍使用的潤滑脂,比一般的黃油稀很多。
線軌會生鏽,若不保養,會鏽到慘不忍睹。但那只是表面,線軌要潤滑的是滑塊內的鋼珠。
潤滑脂可由側面的孔注入,使用的 #0 潤滑脂,比較適合。但潤滑脂不是想買就有,最普遍使用,號稱萬用的二號滑脂,都不容易找到了。曾在蝦皮買過白色鋰基潤滑油,後來細看規格,才知道是 #3 潤滑脂,用了會讓線軌跑不動。
在 AI 的指導之下,使用 2號滑脂與針車油混合,調出不同黏度的滑脂。
如 脂 : 油 比例 為 8 : 2,可得到 "像軟質面霜 的 1 號脂",適合 Z 軸,或全新的線軌。
脂 : 油 比例 為 6 : 4 ,可得到 "像濃稠煉乳的 0 號脂",適合有傷痕、需翻新的 X/Y 軸。
省事的話,就用 6:4 的 0號脂吧。調法,先脂後油,先量 6g的2號脂,再加入 4g的針車油,調到完全混合。
注意,只用中油的這兩種油可以混,其他不知成份的,不要亂混。
Z軸的螺桿,速度較慢,直接使用 2號脂即可。
使用針車油。
參考 (grblHAL) Additional or extended settings
下圖是控制箱的內部。
控制程式是 MACH3,透過 printer port 連接控制箱。控制箱有 MACH3 BOB 做訊號轉換,連接 CWD556 步進馬達驅動器,台達 1.5KW 變頻器,以及限位開關信號輸入。
配備一台具備 Printer port 的筆電,執行 XP。現在已很難找到有 printer port 的電腦,而且 MACH3 的授權也是問題,雖可用,但不喜歡。因此想把控制改成開源的 grbl 控制。
grbl,有人把它 port 到 STM32F103 上,但測過以後,發現少了 G83 之類的 Drilling cycle 指令,不太方便,而且幾乎沒有再改進。後來找到 grblHAL,目前尚在活躍的開發,而且支援多種 32bit 的 MCU。
參考網路上的 PicoBOB,再由 Gemini 的協助,自行設計 BOB電路板。選擇 STM32F411 來執行 grblHAL。
操作界面,使用 Orange Pi One 單板電腦,在其上安裝 cncjs。
原來使用的主軸為昌盛 2.2KW 水冷主軸。嫌水冷麻煩,買了 1.5KW 風冷主軸,測試後,發現風冷主軸實在是非常吵。只好買電腦水冷散熱套件來裝,測試原來的主軸,發現可能軸承已磨損,振動非常大,又再買一個 1.5KW 水冷主軸,多花了不少錢啊。
原培帝的 V-F 設定,P 06 中間頻率選擇: 1.5,P 07 中間電壓選擇: 10.0,P 08 最低輸出頻率選擇: 1.50 ,P 09 最低輸出電壓選擇: 10.0。
理想的 V-F 設定,400Hz 時給 220V,則 100Hz (6000轉) 時應該只給 55V。此設定會使得在頻率為 100時,電壓過高,使得馬達內部的矽鋼片會發生磁飽和。此時,多餘的電能無法轉換為磁場,而是直接轉換為熱能,導致電流異常飆升。
實際測試的值如下,1.5KW 水冷主軸。
修改 V-F 設定,P 06 中間頻率選擇: 100,P 07 中間電壓選擇: 55,P 08 最低輸出頻率選擇: 20 ,P 09 最低輸出電壓選擇: 11。
MACH3 設定
Steps per (mm) = 馬達旋轉一圈總步數 * 減速比 / 螺桿導程
其中,馬達旋轉一圈總步數,由驅動器 DIP 決定。減速比,若直連則為 1。螺桿導程,轉一圈移動多少 mm。
在培帝的控制系統,找到 X,Y,Z 的 [Steps per] 的設定值皆為 200,驅動器的 DIP 設定為 1000,反推 [螺桿導程] 為 1000 / 200 = 5。
grblHAL 的 $100 (X軸), $101 (Y軸), $102 (Z軸) 的設定方式,和 MACH3 完全相同,一樣是 200。
在 Arch Linux,已發生此問題,一直以為是顯卡的問題。
直到 Gentoo,也升級到新版後,發生閃爍的問題。降回舊版驅動,就沒有此問題,因此確定是新版驅動的問題。
---------------------
---------------------
參考 https://github.com/grblHAL/core/wiki/Compiling-GrblHAL
git clone --recurse-submodules https://github.com/grblHAL/STM32F4xx.git
參考
從淘寶買了製作 PCB 的套件,放了好久, 一直沒用。到後來,蝕刻劑受潮,還把附的銅箔板腐蝕掉一大塊。直到最近,為了使用 FPC軟排線連接 Orange Pi 和 SPI LCD,只能使用 FPC 插座轉接板,要用手焊接很多線,不好看,板子又大。才認真考慮製作 PCB。
淘寶買的感光藍油,可以很方便製作感光銅箔板,成本也低。不便之處,要用透明膠膜印出 PCB負片,才能曝光。後來,在網頁上無意中發現,有人用光固化3D印表機當 PCB 的曝光機,效果不錯。剛好手邊有光固化機器,一直沒用,賣又不值錢,正好可以拿來用。
開始學習使用 KiCad 軟體,使用 KiCad PCB 編輯器,手工畫 PCB。PCB 畫好後,使用 [繪製] 功能輸出 pdf。
KiCad 輸出的 pdf,再用 InkScape 開啟,先在 [文件屬性] 中,將格式由 [px] 改成 [mm],會自動改變縮放比例。再另存成 SVG檔,這樣圖才不會變大。KiCad 也能直接輸出 SVG檔,但解析度有問題,會太低。
然後,使用 OpenScad 匯入 SVG檔,轉成有高度的 STL 檔,才能給光固化用。這個步驟,會有一個小問題,pad 的中空鑽孔,都被填滿了,看了很不習慣。在 OpenScad,要另外再加工一下,挖出那些孔。
使用 CHITUBOX (赤兔) 切片軟體,將產生的 STL 檔,產生切片檔,再 copy 到 USB碟,用光固化機器曝光。切片參數,首層的時間,改成想要的曝光時間,大約為 60秒左右。首層曝光完,就可以關掉,後面的不用跑了。
下圖是顯示的曝光在白紙上的情形,用來定位用。
顯影後的電路板
在 Orange Pi One 上安裝 CNCJS
參考
官方文件的資訊,已嚴重落後,如支援的 Node.js 的版本為 v4。目前透過 npm 安裝的 cncjs 是 1.10.5,在 github 的 package.json 中,要求的 Node.js 是 ">=18"。
"engines": {
"node": ">=18"
},安裝 "Node Version Manager" 來管理多個 Node.js 版本。
# 安裝 nvm
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
$ source .profile
$ source .bashrc
#安裝最新的 node.js
$ nvm install 22
$ nvm use 22
# 執行 node 會出現錯誤
# node: error while loading shared libraries: libatomic.so.1: cannot open shared object file: No such file or directory
$ sudo apt install libatomic1
# 更新 npm
$ npm install npm@latest -g
# 安裝 cncjs
$ npm install -g cncjs
# 更新 cncjs
$ npm install -g cncjs@latest以上的安裝,只能以個人的身分執行。
執行後,在網頁上看到的畫面。
# 設定網路之後,更新系統
$ sudo apt update
$ sudo apt upgrade
# 安裝所需套件及 cncjs
$ sudo apt install nodejs npm git
$ sudo npm install -g cncjs --unsafe-perms
# CNCjs Test Run
$ cncjs --allow-remote-access -p 8080
# give us permissions to run on port 80 without root
$ sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/node
# give permissions to use the serial port
$ sudo usermod -a -G dialout cncjs
# 建立及啟動 CNCjs Systemd Service
$ sudo touch /etc/systemd/system/cncjs.service
$ sudo chmod 664 /etc/systemd/system/cncjs.service
$ sudo nano /etc/systemd/system/cncjs.service
$ sudo systemctl daemon-reload
$ sudo systemctl start cncjs
$ sudo systemctl enable cncjs
# 下載 tinyweb 套件
$ cd ~
$ git clone https://github.com/cncjs/cncjs-pendant-tinyweb
建立 /etc/systemd/system/cncjs.service 如下。
[Unit]
Description=CNC Controller Web UI
After=network-online.target
[Service]
ExecStart=cncjs -p 80 -m /tinyweb:/home/cncjs/cncjs-pendant-tinyweb/src
User=cncjs
WorkingDirectory=/home/cncjs
Restart=always
[Install]
WantedBy=multi-user.target 設定 tinyweb
enable 的 service,連結放在 /etc/systemd/system/multi-user.target.wants
安裝所需的 X window 的 package。
sudo apt install xinit xinput x11-xserver-utils \
xserver-xorg-input-evdev xserver-xorg-input-libinput \
xserver-xorg-legacy xserver-xorg-video-fbdev \
xdg-utils chromium-browser 修改 /etc/X11/Xwrapper.config,"allowed_users=anybody"
cncjs -m /tinyweb:/home/klipper/cncjs-pendant-tinyweb-1.2.4/src &
執行 xinit ./start_tinyweb.sh。
進入 [Settings] (齒輪圖示) 功能,到 [Commands] 頁面,點選 [+ New],在 title 中輸入 "Shutdown",以及在 [command] 欄位輸入 "sudo shutdown -h now"。
賦予 shutdown 權限,執行 "sudo visudo" 指令,新增一面的內容
在網路上有人賣淘汰的 Orange Pi One 和 Orange Pi Zero,因為便宜,又收了一堆舊的 3D 印表機來改,所以就買了不少的 Orange Pi One 和 Orange Pi Zero。其中 Orange Pi One 的記憶體都是 512MB,Orange Pi Zero 則有 256MB 和 512MB。
仔細看 DDR RAM 的編號,有 K4B2G1646E 和 K4B4G1646E,前者為 8*256M = 2G (bits),後者為 8*512M = 4G (bits)。編號的其中幾個字母,可能不同,不重要。Orange Pi One 使用 2個 K4B2G1646E,總共有 512MB。若換成 2個 K4B4G1646E,則有 1GB,請參考下面的連結分享。Orange Pi One 可以只裝一個記憶晶片,但不能裝2個不同型號的芯片。
後來查 H2+ 和 H3 的規格,可支援 2GB 的記憶空間。又找到相近型號的記憶晶片 K4B8G1646Q,假如把 Orange Pi Zero 換成這個晶片,就能有 1GB 的記憶體。先買 3個來測,換了之後,確定能用。
面臨的問題是,從來沒有焊過 BGA 封裝的晶片。因此花重金買了一些設備,然後再花了一兩個星期,用沒用到的 DDR2 記憶模組來練習 拆焊,植錫,焊接。最終成功換上記憶晶片,同時發現 BGA 晶片蠻耐操的,加熱 3,4分鐘,重複 3,4遍,甚至不小心用洗板液急速冷卻,仍然正常運作。
現在的記憶體晶片都是 BGA 封裝,雖然買來的記憶體晶片,都已植錫,但焊接失敗,就必須拆下,重新植錫,再次焊接。因此,在焊接前,先把 BGA 的植錫和焊接功夫練好。翻找手邊的剩餘材料,發現 DDR2 的記憶模組是使用 BGA 封裝的晶片,現在又已用不上,正好用來練習。花了一個多星期時間練習,拆裝了幾條記憶模組,十幾顆晶片,慢慢掌握其中的技巧。
可以買記憶體用的小鋼網。雖然有買簡易植錫架,但後來在網路上看到有人分享的經驗,發現這樣做更好。先徒手植 2顆上去,當作鋼網的定位點,這樣就不需使用植錫架。
徒手植錫,要練一下。練成後,不用鋼網,也可以用手排錫球,植錫。但實在很費時間,只能當練功。關鍵在於,塗上薄薄一層助焊膏,可以黏住錫球。太多助焊膏,助焊膏一化開,錫球會漂走。熱風槍的風速開到最小,先用遠一點的距離吹,讓錫球先黏在焊盤上,再靠近吹,讓它整個化開,完美地吸在焊盤上。
在焊盤上均勻塗抹助焊膏,一定要用助焊膏,錫球才能黏在焊盤上。這很關鍵,不能太少,不然錫球都會黏在鋼網上。但也不能太多,不然錫球會飄。再把鋼網套上,背後可以用鋁箔紙貼住。
用鑷子一顆一顆把錫球放上去。利用助焊膏黏性,把球黏在鑷尖,再黏到焊盤上。
錫球全部擺好後,用熱風槍,380度,慢慢吹。看影片,都是 40幾秒就好。但我就是要吹到 2分鐘以上才行,不知差在那裡。但也發現,用這溫度吹個 3分鐘多,晶片也還可以正常工作,就放心地做吧。
植球和焊接,最好有計時器,不要光憑感覺。要有耐心,常要好幾分鐘,時間不夠,錫沒全化,硬來,只會把東西弄壞,更麻煩。
拆焊,可以用 450度。PCB上的塑膠零件,用鋁箔紙保護一下,以免吹壞。注意一下小零件,不要不小心把它吹飛或撞飛。若真不幸弄飛了,要留下來,事後再焊回去。一定要等錫全化了,再把晶片夾起來,一次就要拿起來。若不幸一次不成,部分黏住,不要硬拔,會把焊盤拔壞。
再來就是把晶片焊回去,用 380度,我要吹到 3分鐘,才能焊接成功。先對 PCB 吹個一分鐘,上助焊膏,碰到就化開,可以塗抹均勻。
買來的晶片,可能不是新品,但都有植錫。可惜,我直接焊接,都會失敗。反倒是我自己植錫的,吹個 2分鐘 ~ 3分鐘,就能自動歸位。不知是不是 有鉛 和 無鉛 的差別。後來乾脆全部重新植錫再焊,比較不會失敗。
另外,影片的經驗分享,都是用鑷子輕推一下,會重新歸位,判斷錫全化呈流動狀態,為焊接成功的判斷。但手抖得厲害,一不小心就推到位置之外,也看不出塌陷的瞬間。後來發現有個影片,晶片擺得不正,錫全化呈流動狀態時,晶片自動歸正了。
我就在放晶片時,對準位置之後,稍稍把它弄歪一點,讓晶片邊緣和定位白線不會對齊。等加熱到晶片和白線對齊,就成功了。
後來,發現可以吹到 3分鐘,晶片仍是正常的,在重新植錫後,就固定吹個 3分鐘,比較保險。
好不容易,成功了,升級為 1GB 的記憶體。