[鍵盤] 羅技K375S的研究
大約一兩年前我買了一支羅技K375S
想要把他的主控改到其他鍵盤上(那時候很流行XD)
所以到貨第一天就分解了 一直躺到現在
遲遲沒有動手是因為有某些點
我覺得弄起來不完美
在找不到好的方案之前 就懶得開工
最近做了一些研究
把這些資訊分享給各位
主要分為三部分
1.電壓
2.電流
3.內部原理
/**************************/
1.電壓部分:
使用可調電壓電源供應器
測試電壓跟羅技Option軟體內顯示的鍵盤電量的對應關係
結果如下:
above 2.67V ->High (電池符號滿格3格)
2.32~ 2.67V ->Mideium (2格)
2.10~ 2.32V ->Low (1格)
2.00~ 2.10V ->Empty (0格 跳警示)
below 2.00V -> 不開機
一直到不到2.0V才關機
可以說把2*AAA電池徹底利用
同時也對鎳氫充電電池很友善 因為單顆鎳氫電池1.0V也差不多是放電終止
這是得力於內部所使用的IC-> nRF51802
Datasheet:https://tinyurl.com/3vrth3bk
工作電壓 1.8V~3.6V 剛好覆蓋2*AAA 或是2*MiMH電池電壓
2.電流部分
使用電表串接測量工作電流
測得結果如下:
(1)開機時電流 最大3.643mA (此時LED指示燈亮著)
https://imgur.com/Ycc2HZV
(2)待機電流 最大0.072mA
https://imgur.com/8oW0E08
(3)單一按鍵按住時電流 最大0.355mA
https://imgur.com/gjZUjxs
(4)兩顆按鍵按住時電流 最大0.846mA
https://imgur.com/xhyugY0
(5)閒置330秒後進入睡眠 最大0.00405mA(電錶uA檔測得4.05uA) (任一鍵喚醒)
https://imgur.com/OOrL2W2
電流這段的結論是: 超省電的!!
一般小型LED做為指示燈使用時差不多設定在3~5mA
所以說開機時電流消耗基本上是LED亮起造成的
待機電流0.072mA的概念就是1/40顆led指示燈的耗電量XD
單鍵連發時也只不過用了 1/8顆led耗電量
真的很可怕!
所以導致我想去探索一下到底是用什麼方式才有辦法這麼省電
->也就是下一個部分
3.內部工作方式
一般鍵盤都是用矩陣的方式逐個掃描按鍵是否被按下
我本來覺得這麼省電 應該是動態調整掃描頻率吧?
例如: 按下按鍵之後的一小段時間維持高掃描頻率
所以如果不斷按鍵就會一直維持高掃描頻率
超過一段時間後(逐漸)降低掃描頻率已達省電的目的
這是非常容易達成的
但我後來發現我錯了 這鍵盤內部才不是用這麼簡單的方式來省電呢!XD
以下我用我淺薄的知識來做解釋
col1 col2 col3
row1 A B C
row2 D E F
row3 G H I
這是按鍵排列的線路示意圖
ABCDEFGHI代表9個按鍵
實體線路則是 col1 col2 col3 row1 row2 row3 ->6條
(以此類推如果有20條線路 "最多"可以有10*10=100顆按鍵)
所以這就是一個二維陣列
鍵盤IC就是不斷的在掃描這個陣列
來判斷 任意一個col 是否與 任意一個row 導通
導通就是對應的按鍵被按下了
大概就是這個結構:
//rows:output
//cols:input with pulldown resistor
foreach(row in rows){
row.voltage = high
foreach(col in cols){
if(col.voltage==high){} //表示col與row相通->查表可知哪個鍵被按下
}
row.voltage=low
}
(high/low邏輯可以相反 col/row可以調換 具體看各鍵盤設計 沒有好壞差別)
接下來我們看一張圖
https://imgur.com/apVvdNO
這是我用示波器抓取我的FILCO 104鍵 數字區+號的row訊號
可以把這個訊號想做是active low的訊號
也就是 訊號在低的時候才該row正在被掃瞄
可以看到兩次輪到同一個row的間隔是1.19 ms 換句話說掃描頻率840.3hz
另外 在低位的時間長度是 52us (=0.052ms) Low的佔空比為4.24%
這支鍵盤有18個row 8個col
100%/18(row數量) = 5.5% 跟 low的佔空比很接近了
5.5-4.24 =1.26 有可能MCU在做其他工作
而在這row短暫的52us內 mcu會把col全都讀取一遍(在示波器上看不到讀取)
由於有8個col 所以單一鍵讀取時間是52/8 = 6.5us
說這麼多....
總之! 這是很標準的一支鍵盤.......
羅技K375S就完全不是這樣了....
這是我得到的第一個畫面 這是待機狀態測得的
乍看跟FILCO不太一樣 是因為HIGH/LOW是相反的
這是OK的 邏輯相反而已
https://imgur.com/YDdyoBh
可以看到row訊號的間隔是504ms 頻率是1.98hz
一開始我覺得 "看吧 果然是降低掃描頻率"
但是越想越不對 因為1.98hz太太太太慢了
掃描間隔504ms 所以平均按鈕的反應時間會是504/2 =252ms = 0.252秒
這是人很明顯會察覺的延遲
所以再夾上同一按鍵的col
跟另一個row來對照
如果是傳統掃描式
不同row彼此之間掃描的間會是錯開的
以這個案例來說 也就是兩個row會不同時間拉高
來看一下這張圖
https://imgur.com/xKnGrHT
黃色:某按鍵的row
綠色:某按鍵的col
粉紅色:別的row
在中間偏左的地方可以看到
黃色跟粉紅色明明是不同的row
卻在同時間上拉 明顯重疊了
所以這根本不是一般鍵盤用的陣列掃描......
以下是我推斷的工作方式:
本鍵盤不是用傳統的陣列掃描
而是使用中斷來偵測按鍵
第一階段:
cols(綠色):output high
rows(黃色):interrupt input (with internal "pulldown" resistor)
首先"所有的col"全部都輸出high
所以當某一按鍵被按下時
該按鍵的row因為跟col導通所以為high
所以該row觸發了中斷
此時mcu知道有按鍵被按下了 也知道是哪一個row(就是觸發了的那個)
但是此時mcu還不知道是哪個按鍵被按下(因為要同時知道col跟row才能確定是哪一鍵)
第二階段:
先前觸發中斷的row目前的電壓是high(因為跟col接觸著 而所有的col都是high)
接下來就是將上一階段的輸出輸入對調
也就是
cols(綠色):interrupt input (with internal "pullup" resistor)
rows(黃色):output (電位請見下方說明)
這張圖正中間是我按了按鍵
https://imgur.com/Mvr2wqi
跟上階段相反
這邊所有的row都先輸出high(所以可以看到黃色跟紅色都上拉了)
黃色row在上階段就因為跟col碰觸變成high了 所以雖然轉主動輸出high實際上電位沒變粉紅色row也變成輸出high
雖然是兩個階段 但是因為速度太快了 第一階段從觸發到進入第二階段只是轉瞬之間
(事實上是黃色row因為接觸col而變high 進入第二階段主動輸出high
粉紅色row是因為進入第二階段主動輸出high
兩者有時間差 但太短了 所以看不出來)
接著 黃色row因為在第一階段就觸發中斷 mcu知道
所以在第二階段 mcu每隔一小段時間
就會把黃色row的電位 從high拉成low 又馬上拉回high
為什麼這樣做
因為黃色row拉low又回去的過程
會把目前在輸入中斷狀態的cols 當中與黃色row實體相連(就是按下)的對應col(綠色)
的電位給拉下來 導致該col觸發中斷
(示波器的圖不太明顯 中後段那幾段尖尖相下刺 是黃色跟綠色同步 粉紅色沒有下來)
這樣一來mcu就知道哪個col被觸發了
https://imgur.com/mJuI6vB
所以這下mcu終於知道是 黃色col 跟 綠色row
就確實知道是哪一顆按鍵了
這種做法完全不是傳統鍵盤的作法
大概也是得力於較先進的mcu每根gpio都可以做interrupt(51802的規格書裡有)
所以K375S這種使用中斷的作法
是非常即時的
比起 例如FILCO的840hz(0.6ms的平均時間其實已經很短了),但K375S絕對更快
這邊的快是指mcu取得哪顆按鍵被按下的速度
並不是指傳到電腦的總時間 這是兩回事
已程式來比喻
傳統掃描就是 polling(輪詢)
使用中斷就是 subscription(訂閱) 或是 event(事件)
效率差很多 同時在硬體上 就會影響功耗(甚多)
我在此之前不是知道原來還有這種作法
真是大開眼界了XD (可能眼界本來就小 畢竟不是學硬體的)
結論兩個字: 佩~~~服~~~!!
以上是我最近的研究心得
如果你一行一行看到這邊 同樣結論也送給你:佩服XD
--
頭推
想知道k375改在哪知鍵盤比較好 我的k375也躺在櫃子裡
最好的是有AAA*2電池盒+無鋼板不擋信號 想做充電就在加上本身有鍵線分離 我有G80-3000 但本體體積太大了 無鋼板也不適合改插拔軸 目前我覺得相對好的是FILCO Majestouch 2 Convertible 但有鋼板跟mini usb頭是弱點XD 他的下塑膠殼的結構也與Majestouch 2不同(沒有加強筋) 我我沒擁有過不知道實際打感如何
G80 3000的下蓋空間比較多好像比較方便?
推認真解說文 我自己也改了一把 只是問題很多後來就丟
我一把375s也是難按+油 想丟了
別丟 主控有價值阿~~
※ 編輯: dream4magi (119.14.73.175 臺灣), 08/12/2021 23:36:19我以為鍵盤都是用trigger的... 輪詢??
沒錯 就是輪詢 你可以去看GMK的code~
※ 編輯: dream4magi (119.14.73.175 臺灣), 08/13/2021 02:40:46推心得,期待原po製作出一把再分享教學XD
學到新姿勢了
推研究精神!
想改用電池的,但是殼都比較適合鋰電池的
*用 AAA電池
我打算是用2*AAA鎳氫電池+簡單的定電壓充電電路 配上低自放鎳氫電池 期望半年充一次電XD
※ 編輯: dream4magi (119.14.73.175 臺灣), 08/14/2021 11:59:08沒研究過鍵盤用那種,但中斷跟輪詢是可以看狀況用的
要用中斷的話一個鍵要配一個MCU腳喔 你覺得有可能直接用在鍵盤上嗎? 羅技這種做法我認為已經是最佳解了
※ 編輯: dream4magi (119.14.73.175 臺灣), 09/16/2021 00:52:1745
Re: [問題] 怎樣能80%後快速充滿?原文43 小弟碰巧有學過一點電池充電,這邊稍微解釋一下原PO以及原原PO的疑問 如有缺漏還請各位大神糾正。 首先先跟大家講一件很重要的事 鋰電池沒有電池記憶效應!!!42
Re: [討論] Ezb power 永久電池系統我只能說,葉佩雯真是害人不淺啊 超級電容的缺點就是電力只能儲存幾天的時間,別說有半路不怕沒電發不起來, 車子一兩天沒開,超級電容的電力就流失到發不動車了。 然後超級電容的能量密度遠不如鉛酸電池,也就是蓄電量超少,如果發車時再發一兩次,就沒電了。 如果防盜器吃電稍微多一些,會是車內小燈忘了關,那第二天就只能叫人來接電了。23
[心得] 小米67W閃充套裝搭配小米11T快充測試狼窩好讀版: 此為小米11T內隨附的充電器及專用充電傳輸線,支援小米閃充協議 產品規格: 型號:MDY-12-EJ20
[討論] 可換電池式的行動電源:Xtar PB2S只要是鋰電池,難免都會有電池衰退的問題 雖然不少行動電源很便宜,但如果能有可換電池式的行動電源 我覺得也是個不錯的選項 除了電池衰退可以自行更換電池外 也可以自行選擇品質好的電池來裝18
[心得] 可用APP監控的RCE SmartBatt快充行動電源狼窩好讀版: 感謝網友出借此行動電源供在下測試 產品特點: ●USB-C支援18W雙向快充16
Re: [問題] 電池不回充回答原PO問題,除了CDI,都有可能直接導致不回充 找出問題前可先來討論原理,了解原理後對於找故障點會更容易 下圖是一般摩托車的發電架構 ┌───┐ ┌───┐ ┌──┐ │發電機│→黃線→│整流器│→紅黑線→│電池│9
[心得] 麻新×Schumacher MS-200鉛酸電池充電器狼窩好讀版: 產品特色: ●微處理器控制,智慧型多段式全自動充電,快速且安全 ●6V/12V自動電壓偵測,適用多種鉛酸電池6
[問卦] 慟!原來三用電表不全是黑色是正極如題 三用電表的歐姆檔電流是從黑色出來的 所以黑色是正極,紅色是負極,和電壓、電流檔不一樣 這些上實習課的時候老師都有說,所有電表應該都一樣 ......至少我5分鐘前都是這樣認為的7
Re: [閒聊] 自幹改車不同電位的電池不要這樣用很危險 你可以先看看原本充電器是多少A的 一般來說 0.1c/0.2c充電是合適的(額定的0.1/0.2 充5~10小時) 然後