Labels

Showing posts with label Keyboard. Show all posts
Showing posts with label Keyboard. Show all posts

Tuesday, January 2, 2024

QMK, 1000Hz Polling, NKRO, eagar debounce

近排又砌咗隻鍵盤,順便研究埋點樣將佢嘅latency降到同其他電競鍵盤一樣。

雖然呢個group玩自組鍵盤已經係小眾,會自己flash firmware嘅只會更少,但希望呢個方法可以令人少個理由買手感相對差嘅電競鍵盤,試下自組鍵盤。
鍵盤嘅latency主要有3部分: matrix scanning, debouncing, USB polling.
Matrix scanning: 即係控制器掃描所有軸嘅速度,通常都少於1ms.
Debouncing: 機械軸係用2塊銅片做觸發,但銅片喺接觸嘅瞬間會喺0同1之間彈嚟彈去,需要一個delay去無視呢啲輸入。Cherry MX及同類通常都係5ms, 新嘅1億次壽命Cherry MX Hyperglide係1ms, 光軸係0.
USB polling: 用過Gaming mouse都應該識,1000Hz = 1ms, 125Hz = 8ms.
USB polling可以用呢個program試,重可以順便試埋key order嘅問題。
你可以試下同時撳2粒制(例如A, S),係1000Hz嘅話應該會見到delay係1-7之間嘅數,而且有時係AS, 有時係SA.
遺憾嘅係好多自組鍵盤出廠都係125Hz, 所以delay好多都係10ms左右,好在有好多有線自組鍵盤都用一個強大嘅firmware叫QMK,呢個firmware最大賣點係可以設定鍵盤唔同鍵嘅功能。
如果你肯自己compile firmware嘅話,就可以改USB polling rate做1000Hz, 用其他debouncing algorithm去隱藏嗰5ms嘅delay, 甚至自己寫C code都得。
然後喺qmk_firmware/keyboards入面搵返自己隻keyboard
喺config.h度加:
#define USB_POLLING_INTERVAL_MS 1
#define FORCE_NKRO
#define DEBOUNCE 5
再喺rules.mk度加:
DEBOUNCE_TYPE = sym_eager_pk
Compile完之後用QMK toolbox flash入隻鍵盤,咁你嘅delay應該就會係2ms左右。
有錯請指正,以上資料都係用一晚Google得嚟