RPKeebs WK78 - Dự án bàn phím TKL khác dựa trên board SUO TX WK87
Dự án bàn phím thứ ba của tác giả, tự làm từ đầu dựa trên PCB TX SUO TKL R WK (WK87) mua trên AliExpress. Có hướng dẫn QMK/VIAL, DFU flash STM32F411CE, cấu hình matrix và WS2812 RGB, kèm vỏ in 3D dạng brutalist.
Mô tả
TRẠNG THÁI: XONG HẾT
V5 cho cả bản 3.5 độ và 5 độ đã test kỹ, chạy ổn.
Rõ ràng là bạn sẽ cần máy in khổ lớn in 2 màu cho dự án này. Hoặc chịu khó “sáng tạo” cắt ra thành nhiều phần nhỏ rồi dán keo lại. Mình dùng Prusa XL với 5 tool, nhưng thật ra bạn chỉ cần 2, hoặc 1 nếu không quan tâm phần trong suốt / hoặc in nguyên cái bằng vật liệu trong suốt rồi sơn những chỗ không muốn thấy xuyên.
Dự án bàn phím thứ ba của mình, lần này dựa trên một PCB mình tìm được trên AliExpress.
"TX SUO TKL R PCB 1.2MM WK hotswap PCB"
Tên dài muốn xỉu.
Nghe nói PCB này do TX Keyboards bán, dựa trên WK87 hợp tác với LDN... Mình cũng không rành mấy hãng đó, nhưng thôi, đây là project.
Cái board
Board tầm 80 euro. Không rẻ, nhưng có Hotswap sockets, addressable RGB cho từng phím, 24 LED RGB underglow và 2 LED status. Firmware thì proprietary, chỉ Windows, phần mềm Windows chỉ tiếng Trung (ai xài mấy app kiểu này chắc hiểu nó “hên xui” cỡ nào), nhưng bất ngờ là tính năng khá nhiều. Không hỗ trợ Mac (key codes), không custom keycodes, không có web-based software, v.v. Nhưng bù lại; nó dùng chip STM32F411CE và chip này thì tương thích QMK.
Thử thách
Mất khoảng 8 tiếng để reverse/engineering firmware, kế hoạch ban đầu kiểu như vầy;
-
Dò (multimeter) các hàng (rows)
-
Dò các cột (columns)
-
Dò các chân LED
-
Cấu hình QMK
-
Thêm VIAL (tức dùng VIAL fork)
-
Đưa board vào DFU
-
Nạp firmware
-
Xong.
Nhưng thực tế diễn ra như sau;
-
Bước 1; Có đưa board vào DFU mode được không?
-
Có; chập Pin36 VDD của MCU với Pin44 Boot0 trong lúc cấp nguồn, cái “bụp” là vào DFU. Nhưng làm vậy phiền, nên mình tìm 2 chân gần đó dễ hàn hơn rồi hàn thêm một nút nhấn. (Mà thật ra chỉ cần làm đúng 1 lần, nên dùng nhíp, cẩn thận chút là khỏi phải hàn)

-
-
Bước 2; xác định rows
-
Mình dò từ Escape tới F7, rồi F8 lại tách riêng; 8x12 matrix là khả thi, nên làm tiếp
-
F8 - Pause; tới đây vẫn ổn
-
Tilde - 7, 8 - Home ... Ừ cũng hợp lý, PGUP sẽ là phím thứ 9...
-
PGUP nằm một hàng riêng... phí thiệt, nhưng thôi
-
v.v...
-
Cuối cùng ra 14 rows.
-
-
Bước 3; xác định columns, chúng nối với MCU kiểu gì
-
Không có cột nào map thẳng vào MCU, mà MCU cũng không đủ chân cho chuyện đó; mình đã thấy shift register rồi, và đúng là có 8 cột đi vào shift register.
-
Vậy thì trên MCU phải có 14 chân cho rows...
-
-
Bước 4; map rows vào chân MCU...
-
Chỉ có 12 chân beep ra rows...
-
Hóa ra PGUP (và vài phím khác) không nằm riêng một hàng; rows bị “wrap around”.
-
-
Bước 5; Cấu hình QMK
-
Bình thường mình sẽ build layout kiểu ROW2COL, nhưng diode lại hướng về switch từ phía COL... mà thử COL2ROW cũng không chạy.
-
Và cả hai phía của switch đều logic high (3.3v). Vậy là không ổn.
-
Thế là phải lôi oscilloscope ra; shift register chủ yếu ở mức high, thỉnh thoảng kéo xuống low, vậy thật ra COL2ROW mới đúng, nhưng diode lại ngược... vậy phải là ROW2COL.
-
-
Bước 6; Mình cần thêm ý kiến nên hỏi Claude.
-
Đúng là config firmware có AI hỗ trợ, nhưng mình kiểm từng dòng, tất cả đều chính xác.
-
Hóa ra: shift register đáng lẽ phải chủ yếu ở mức low và kéo lên high; lúc đó mỗi switch sẽ có một bên low, một bên high. Nhưng như vậy vẫn kỳ; bình thường một bên phải pull high/low, switch sẽ đưa tín hiệu đó về MCU; một bên output, bên kia input, đằng này nhìn như cả hai bên đều là output...
-
Cuối cùng: matrix của board này bị hoán đổi rows/cols. Thật ra không ảnh hưởng gì, chỉ làm mình rối thôi. Có 8 “Columns” mỗi cột có 14 “rows”, shift register là output, qua diode, tới switch, rồi về “rows”, đi vào MCU làm input.
-
Thành công, bàn phím chạy “tạm”, vì lúc này tất cả phím bị loạn vị trí.
-
Bước 7; Debug matrix: mình kêu Claude làm test layout để mỗi phím in ra một ký tự ASCII, rồi mình gỡ rối dựa trên danh sách kiểu "Escape = A, F1 = g, F2 = &". Cách này hiệu quả bất ngờ.
-
Bước 8; RGB matrix.
-
RGB matrix có thể dùng LED nhiều màu với shift registers cho từng R, G, B riêng, nhưng phần mềm “cùi” kia đã báo LED là WS2812; serial data, dễ ẹc.
-
Giờ trò khó là tìm LED đầu tiên. Có phải con LED ghi "LED0" không? Haha, KHÔNG!
-
Matrix bắt đầu ở phím mũi tên lên, gần MCU, rồi chạy qua phải, xuống, v.v. cho tới Left Control, rồi đi lên tới Shift chạy qua tới Right Shift, rồi lên tới Enter quay lại Caps. Mình mô tả vậy cho Claude. Mất 7 (!!) lần Claude mới hiểu kiểu “snaking” từ dưới lên trên, nhưng cuối cùng cũng define xong. 87 LED cho phím, rồi 24 LED underglow, và cuối cùng 2 LED status.
-
Tiếc là mình vẫn chưa tách được underglow thành nhóm LED riêng với lighting effects riêng. Nếu ai biết cách vừa có RGB per-key (87 LED) vừa có underglow cho phần còn lại, chỉ giúp mình với.
-
Xong... gần hết.
-
Bước 9; Status LEDs;
-
LED23 = CAPS Lock LED. Sao không làm vậy cho vui.
-
LED24 = Layer indicator; tắt ở layer 0, Xanh dương cho 1, Xanh lá cho 2 (windows base), Vàng cho 3.
-
-
Bước 10; Default keymap
-
Mình tạo 4 layers, 2 cho mac, 2 cho windows
-
Chuyển qua lại bằng FN+TAB
-
Mình không copy nguyên keymap của Keychron, nhưng chuyện đó làm bằng VIAL thì dễ.
-
-
Bước 11; 3D Model
CẢNH BÁO
- Việc mình làm chạy được không có nghĩa là bạn cũng sẽ chạy được. Bạn đang thay firmware của sản phẩm sang thứ không được hỗ trợ, có thể sẽ phát sinh lỗi, và bạn sẽ mất bảo hành. Không ai chịu trách nhiệm ngoài chính bạn.
Quy trình nạp (programming procedure):
-
Đảm bảo bạn đã cài đầy đủ QMK tools, xem tài liệu của họ để làm theo.
-
clone repo của Vial
git clone https://github.com/vial-kb/vial-qmk.git MyKBDProject ; cd MyKBDProject -
clone repo config bàn phím của mình
git clone https://github.com/rmpel/qmk-vial-keyboard-wk87.git ./keyboards/rpkeebs/rpwk87 -
Cắm đầu USB vào máy tính, và đặt đầu còn lại “lỏng lẻo” (chưa cắm) vào cổng USB-C trên PCB để bạn có thể cắm bằng một tay. (PCB úp xuống, dĩ nhiên)
-
Mở QMK Toolbox để thấy lúc thiết bị DFU được detect
-
Dùng nhíp (có thể cần kính lúp) chập chân 36 và 44, giữ chắc, cắm USB, khi thấy DFU hiện trong QMK Toolbox thì thả nhíp ra.


-
HOẶC; hàn hai sợi dây và một nút nhấn như vầy;

rồi nhấn nút trong lúc cắm USB.
-
Lần đầu tiên cần unlock flash memory bằng lệnh (chỉ 1 lần, sau đó không cần nữa)
dfu-util -a 0 -s :unprotect:force -
Build và Flash firmware;
qmk flash -kb rpkeebs/rpwk87 -km vial -
Bàn phím sẽ tự thoát DFU mode và RGB sẽ sáng lên.
-
Từ giờ về sau; khi cần flash lại, cứ chạy lệnh flash và khi được hỏi thì nhấn FN+ESC để vào bootloader mode. Bạn có thể gỡ chức năng này bằng VIAL.
3D Model
Mình thích bàn phím Keychron, có khá nhiều và mình đã in 3D được 2 cái, nhưng mình muốn cái gì đó khác. Kiểu brutalist, tối giản hết mức, nên ban đầu mình nghĩ:
"Sao không làm đơn giản một cái wedge và một cái plate"
Nhưng mình không thích để PCB trần lộ ra, nên mình thêm một cái viền (rim).
-
Phần trên là plate, mình làm dày hơn plate bình thường để đỡ flex; PETG khá mềm ở độ dày 1.5 mm, mình đã “ăn hành” vì vụ đó.
-
Phần dưới vẫn là dạng wedge, có các gân (ridges) được thiết kế để (!) khớp đúng với hot swap sockets. Cái này sẽ tăng độ cứng, ổn định, và nếu in bằng PETG trong suốt thì sẽ tán sáng underglow RGB khá ổn.
Mình thiết kế phần trên dạng nhiều mảnh (multi-part). Bạn có thể in 1 mảnh cũng được, nhưng nếu dùng bản multipart và tách ra, bạn có thể in 3 phần bằng vật liệu trong suốt để lấy underglow và status LEDs.
Kéo cả hai file TOP vào slicer và trả lời "Yes" khi nó hỏi có phải cùng một part không. Sau đó bạn sẽ có 2 vùng để tô màu: một vùng opaque (màu nào bạn thích), vùng còn lại transparent (hoặc opaque nếu không quan tâm RGB). Nhắc lại là phần “cửa sổ” cho status LED cũng nằm trong vùng này, nên tô cho đúng.
Lắp ráp (Assembly)
Trình tự lắp theo mình nghĩ là như vầy; nhưng hiện bản in vẫn chưa xong, khi nào có hình thật của bàn phím thì có thể xem như thiết kế đã hoàn thiện.
-
Nếu bạn chọn stabilisers gắn PCB (pcb mounted), gắn ngay bây giờ.
-
Nếu bạn chọn plate mounted, gắn cái của spacebar trước. Stabiliser spacebar khá phiền, nhưng khe hở kín là cần thiết để switch ổn định, nên gắn lúc còn dễ thao tác.
- Lắc/lùa nhẹ chút là có thể luồn cái housing stab thứ hai qua khe từ phía dưới lên.
-
Đặt top case úp xuống bàn (đặt lên một cuốn sách hay cái gì đó nếu bạn đã gắn stabiliser)
-
Trượt PCB vào, đưa hàng F (F row) vào trước, luồn cổng USB qua lỗ
-
Thả PCB xuống. Đúng, lúc này sẽ hơi lỏng, vì mình cố tình KHÔNG làm bất kỳ cơ chế bắt vít nào.
-
Lắp bottom wedge vào; phía trước (mỏng) có các tab (giống “biscuit” trong mộc) để trượt khớp vào top case, rồi thả phần sau xuống
-
Dùng 2 con ốc M3x10 bắt từ phía sau để giữ
-
Lật lại, PCB sẽ nằm gọn trên các gân
-
Cắm switches
-
Gắn keycaps
-
Cắm dây USB.
Gõ vui vẻ.
Thông tin thêm ở đây; https://github.com/rmpel/qmk-vial-keyboard-wk87
Model được tạo trong TinkerCad https://www.tinkercad.com/things/j2OqCod8cQN-rpwk87-brutalist-housing
Dùng plate của một dự án cũ, phần này được tạo bằng OpenSCAD, nhưng mình không còn tìm được link.
Tất cả trong project này do mình tự làm. Cấu hình firmware QMK có AI hỗ trợ, nhưng toàn bộ code đều được mình kiểm tra và dọn sạch lại.
Giấy phép
Tác phẩm này được cấp phép theo
Creative Commons — Attribution — Noncommercial — Share AlikeCC-BY-NC-SA
File mô hình
Chưa có bản in nào được khoe. Hãy là người đầu tiên!
Chưa có bình luận nào. Hãy là người đầu tiên!