電子DIY:用單片機設計一款USB遊戲手柄

玩遊戲的小夥伴都知道,有的遊戲需要使用遊戲手柄體驗纔會更好,今天就我們來DIY一款自己專屬的手柄!

1.設計思路

電腦遊戲手柄和鼠標鍵盤一樣屬於USB HID設備,Window系統和Linux系統和各種遊戲機系統都會自帶此種設備的驅動,使用這種協議可以免裝裝驅動,即插即用。本次DIY使用單片機stm32f103c8t6,其自帶USB資源,通過移植USB功能,修改相關配置和描述符,使其識別爲USB-HID設備,再通過按鍵檢測,檢測到不用的按鍵就發送不同鍵值給電腦,以實現手柄不同的操作,實現原理同電腦鍵盤。

2.準備材料如下:

 

洞洞板5*7cm               x2

按鍵12*12cm              x10

按鍵帽                          x8

按鍵6*6                        x2

usb線micro轉A口       x1

連接線                          若干根

螺絲M3*6                    若干個

螺絲M3*8                    若干個

 

3.硬件製作

使用一塊stm32f103c8t6的最小系統板,將其部分io口接入按鍵的一端,將按鍵的另外一端接地,設置stm32的這些io口內部上拉,這樣當按鍵按下後,單片機既可檢測到,並做出相關處理。

 手柄的各個位置對應到stm32上面的引腳號如下:

 

4.軟件調試

移植stm32官方的usb擴展代碼,在此基礎上修改如下描述符,定義設備屬性和數據格式,在加上按鍵檢測功能,根據不同按鍵響應發送不同的數據以實現控制。

下面介紹主要的USB需要配置的幾個描述: 

第1個:設備描述符DeviceDesciptor  

 第2個:配置描述符ConfigurationDescriptor

第3個:接口描述符InterfaceDescriptor

第4個:HID描述符HIDDescriptor

HID設備專有的描述符,用於配置HID設備的屬性和報告描述符的大小。

第5個:端點描述符EndpointDescriptor

端點描述符是用於配置端點號以及端點的輸入輸出。

第6個:報告描述符ReportDescriptor

報告描述符是HID設備專有的描述符,用於描述傳輸的數據的格式。

第7個:字符串描述符StringDescriptor

 

 配置好描述符後,主要發送函數如下:

 

數據格式定義:

我們設定的一次發送的數據爲9個字節,第1個字節默認0x1,第2個字節定義如下

 

第3個字保留位,後面幾個字節爲普通按鍵碼。如發送01 02 00 04 05 00 00 00 00 表示同時按下Left_Shift  + a + b 三個鍵。當然我們作爲手柄不需要這麼多按鍵功能,主要實現上下左右鍵,和A,B,X,Y鍵,ESC和Space鍵即可。需要什麼按鍵功能,根據下圖標準鍵值碼值來進行設定修改代碼。

 

5.外殼製作

使用proe5.0設計上下外殼如下:

 

 

 

外殼設計好之後,使用3D打印機打印外殼

將電路板裝配進外殼裏

 

 全部安裝完成後如下

 

 

6.測試使用

將手柄插入電腦後,識別爲USB-HID設備

 

 

打開遊戲測試,操作流暢!

 至此,我們的USB電腦遊戲手柄就完成啦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章