所需材料
考慮插孔位置,後面插頭延用。把上面旳元件拔掉,鑽螺絲孔,固定功放板。
功放板,選用 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] 設定,更能彈性的設定,讓它正常運作。