本感覺一個鍵鼠復(fù)合設(shè)備沒啥好講的,但是應(yīng)不住日天兄再三之邀,寫下此文。
首先簡單科普一下USB的速度,對于USB2.0來說,一共有3種速度
低速(USB1.0):1.5Mbit/s
全速(USB1.1):12Mbit/s
高速(USB2.0):480Mbit/s
對于大部分支持USB2.0的單片機來說,一般都是支持的全速模式,高速模式是比較少見的,而這次使用的LPC5516是全速模式與高速模式都支持的。
我們先看一下手臺的USB類型。
可以看到,識別出來的是高速USB,但是事實上對于鍵盤鼠標這種低速設(shè)備來說,完全是大才小用了,這里我就是屬于弄著玩玩,看起來比較酷炫。
手臺本身由兩部分組成,鍵盤與鼠標,可以看到配置描述符里面有兩個接口
分別就是鼠標跟鍵盤了
USB鼠標部分:
鼠標發(fā)送給PC的數(shù)據(jù)每次4字節(jié)
BYTE1 --
|--bit7~3: 無意義
|--bit2: 中鍵,1按下 0抬起
|--bit1: 右鍵
|--bit0: 左鍵
BYTE2 -- X坐標變化量,負數(shù)表示向左移,正數(shù)表右移。用補碼表示變化量
BYTE3 -- Y坐標變化量,負數(shù)表示向下移,正數(shù)表上移。用補碼表示變化量
BYTE4 -- 滾輪變化,0x01表示滾輪向前滾動一格;0xFF表示滾輪向后滾動一格;0x80是個中間值,不滾動。
USB是一個主機向從機查詢的協(xié)議,對于鼠標來說,查詢的速度越快,連續(xù)性越好,這里我程序設(shè)置的主機輪詢速度為2ms,也就是鼠標部分1S通信500次。
這個參數(shù)在鼠標上叫回報率,也叫刷新率,簡單理解就是1S能上傳多少次數(shù)據(jù)到電腦,一般鼠標是125Hz。我的鼠標測試(羅技 M90)
手臺數(shù)據(jù)測試
500Hz的回報率對手臺來說完全足夠。
USB鍵盤部分:
鍵盤發(fā)送給PC的數(shù)據(jù)每次8個字節(jié)
定義分別是:
BYTE1 --
|--bit0: 左Ctrl,1為按下 0為抬起
|--bit1: 左Shift
|--bit2: 左Alt
|--bit3: 左GUI
|--bit4: 右Ctrl
|--bit5: 右Shift
|--bit6: 右Alt
|--bit7: 右GUI
BYTE2 -- 保留
BYTE3--BYTE8 -- 普通按鍵
所以說一般的USB鍵盤只考慮軟件的話只能做到6鍵無沖,如果需要更多,那只能加點接口,也就是那些支持多鍵無沖的鍵盤(需要硬件支持)。
對于手臺來說,上面只有7個按鍵,這7個按鍵是直接接到IO上的。硬件完全支持無沖。而且其中一個按鍵還是確定鍵,平時使用中軟件只要保證6鍵無沖即可。
同時按下6鍵,可正常識別。
鍵盤另一個比較重要的就是反應(yīng)速度了,也就是按下按鍵到電腦反應(yīng)的時間(其實我覺得完全不重要,因為鍵盤又不像鼠標一樣是個連續(xù)的過程,人的反應(yīng)速度才多少)。
軟件上配置的主機輪詢速度就是4ms,也就是理論上,按下按鍵到電腦有反應(yīng),最長要4ms。
這個只能說,主觀感受是完全沒問題的。
對于LPC5516來說這種應(yīng)用只能說是毛毛雨了,150MHz的主頻,完全輕輕松松。
按鍵與編碼器:
按鍵、編碼器通通外部上拉加電容消抖,軟件部分沒添加消抖,使用中未出現(xiàn)按鍵抖動的問題。
編碼器代碼采用外部中斷的方式寫的,穩(wěn)定性還可以,就是買的編碼器分辨率太低了,效果不太理想。
WS2812:
代碼上使用了SPI去模擬,沒有做按鍵與燈的綁定代碼,目前只支持全彩漸變呼吸燈的效果。目前板子硬件上有11個燈,驅(qū)動毫無壓力。
代碼是用了mgn的程序改巴改巴搞出來的,原地址: https://www.nxpic.org.cn/module/forum/forum.php?mod=viewthread&tid=620562
程序開發(fā)上,NXP官方提供了很詳細的例程,很方便就能上手,手臺的軟件部分的開發(fā)時間加起來不超過2小時。MCUXpresso Config Tools確實好用,配IO配時鐘不要太簡單,
最后總結(jié)一下:對于鍵鼠設(shè)備來說,全速USB就完全足夠,因為鍵鼠是走中斷傳輸模式的,速度的提升到了1ms之后的意義就不大了,太快反而給主機帶來了負擔(dān)。比如現(xiàn)在我在使用的鍵盤就是全速USB的,能查到的鼠標信息,好的游戲鼠標的回報率就是500Hz或者1000Hz了,換算到USB速度上,差不多也就是全速USB的水平吧(手上沒有這么高級的玩意,猜的速度,歡迎有大佬在帖子留下自己鼠標的測試記錄)。
對于我這個手臺來說LPC5516可以說性能嚴重過剩。還是得想個辦法逼出極限性能來啊。