聚豐項目 > 基于CH32V103的多功能推桿
“創意源于生活,工具始于懶惰。” 在參加RTT大賽前,老婆在用電腦時和我抱怨開機鍵太遠了,每次都要站起來才能夠得到放在顯示器后面的主機上的開關,十分的不方便。確實,如果主機箱放在桌子底下或者顯示器后面,要開機的話要么得彎腰要么得站起來才能夠到,所以為了讓老婆可以坐著就把機器打開,我開始著手設計了這個多功能推桿。 整體造型外觀參考了最近比較火的夫妻游戲《雙人成行》第一關里面那個吸塵器的推桿開關,結構中采用阻尼器/滾珠軸承等器件,使其非常具有質感和手感。功能上我構思不能只有電腦開關這么簡單地一個功能,于是內部采用CH32V103、霍爾編碼器,振動馬達驅動等外設構建了一個具有開關/線性控制,力感反饋推桿,通過自定義USB TYPE-C接口和HID協議,實現了對電腦的開關機、音量控制、鼠標/鍵盤/搖桿模擬、甚至可以針對不同應用實現快捷鍵等功能。
zhanglu1012
分享zhanglu1012
團隊成員
煲仔鹵煮 Developer
我認為一個想法要有完整的設計,不能只停留在開發板上,所以在前期我使用開發板完成了軟件功能的實現,后面又設計并打樣了PCB和機械結構,把開發板上僅有的一枚CH32V103焊到了自制的PCB板上,安裝到3D打印的DEMO模型中,所以比較晚才完成提交項目。接下來我將從硬件和機械兩部分進行介紹。
首先是硬件部分,整體的硬件架構如下圖所示:
作為一個推桿,編碼器是必須的,為了結構簡單而不失分辨率性能,我選擇了12bit分辨率的AD5600線性旋轉霍爾傳感器,通過IIC與主控CH32V103相連接。
為了絲滑推感同時增加可玩性,我增加了DRV2605和線性馬達作為力反饋,DRV2605內置多種震感波形,結合線性馬達可以提供多種力反饋特性,也通過IIC與主控相連接。
在推桿一端,我設計了一個DRV2605帶燈的微觸開關,微觸開關的開關量,結合搖桿的線性控制量可以實現很多功能。在推桿本體中設計了兩個并聯的LED作為裝飾燈光,通過定時器可以實現呼吸燈效果。
在對推桿如何連接電腦這塊,我思考了很久,為了讓推桿能夠實現電腦開關機功能,最簡單的方式就是將一個開關輸出量與主機開關鍵并聯,直接控制短接就能開機了。但這也就意味著要有兩根線直接與主機相連。為了讓推桿和電腦還能走USB協議,那么也就還要至少接上DM DP GND三根線,再想獲得下電腦當前開機狀態,那就還得再接兩根線到主機的POWER LED上(可能你會說,為啥不用USB連接狀態判斷?因為剛開機那會兒還沒建立USB連接,這個狀態不可靠啊),算下來這就七根線了,另外推桿模塊也需要供電,要么外接電池,要么再接一個VCC到電腦上,那就需要8個線了,其中4跟可以用USB micro接口,但另外四根就很難受了。
可能你會說,為啥不用USB來啟動呢?我也想到了,但是查了不少資料,都說現再新的電腦都不支持USB遠程喚醒關機了的電腦,想想也是,系統都關了,USB通訊也建立不起來啊,(當然也是有部分電腦可以通過BIOS加載USB設備來啟動,但我的電腦不支持。。)
所以在簡潔美觀性的追求下,我的目光聚焦到了USBType-C接口,標準Type-C接口有24P,其中包含兩組USB3.x的差分數據線,但那個線間距是真的小啊,而且半插半帖的連接器也不好焊,所以我選擇了12P的剪裁版Type-C接口,其中包括一組USB2.0的接線,一組CC控制引腳和SBU控制引腳,后面這兩組引腳一般用于正反差識別、快充協議上,而我這里用不到這些功能,就正好替代成主機開關鍵和開關機狀態讀取功能,這樣一個Type-C接口就搞定了8根線的需求。為了也能正反插,在中間用二極管搭了個換向處理結構,這部分電路如下圖所示:
整個硬件原理圖如下圖所示:
layout并打個樣板:
當然,定義了Typr-c的接口,對應的數據線也需要特殊處理下,才能支持開關機功能,不過上述設計好的地方就是 普通的數據線接上推桿,也可以進行HID通訊,不妨礙USB的功能;特殊處理過的數據線也可以當做普通的USB Type-C線來用,妙哉吧~
接下來是機械結構。
在構思結構時,最開始我設想是導播室里面那個切換臺的推桿,那個質感不錯,只是感覺元素少了很多,所以就又找了找,正巧刷到《雙人成行》的游戲視頻,看到第一關里面夫妻變小了,在家里闖關時,需要一起拉動吸塵器的推桿,這推桿不正是我所設想的么!
于是以此為原型,我設計了本項目的推桿的ID,如下圖所示
光有外觀還不夠,還要有內部堆疊,為了實現柔順并有推動阻尼感,我選型了好幾款阻尼器,最終選擇了一個合適力度的,設計了內部堆疊,藍色高亮部分為阻尼器,并增加了四個滾珠軸承來減小軸上不可控摩擦,如下圖所示:
3D打印了個DEMO,試了下手感,那種順滑舒服只可意會不能言傳啊!
由于手上只有開發板上一顆CH32V103的芯片,所以只好給它做個心臟移植手術了:
移植好了,只是燒寫器還是需要用開發板上的:
上電測試,功能一切正常:
開發平臺:MounRiver Studio
硬件MCU:CH32V103R8
代碼倉庫:zealerlu/Mult-PushRod-RISCV
軟件部分的整體的功能設計和程序設計如下思維導圖所示:
軟件部分主要邏輯都體現在上面的思維導圖中。
開發環境和開發板相關介紹,寫到了【RTT大賽作品連載】CH32V103開發板資料及上電首測這個帖子里。
由于在開發AS5600外設時,要是用IIC,本以為CH32V103的會比較好用,也看到有網友用起了他的硬IIC,但我經過好久的調試,還是卡在初始化之后,總線處于busy狀態,硬件排查了信號也沒啥問題,就是不好使。換成軟IIC就直接跑通..于是就沒太糾結這個,但是軟IIC模擬時序需要微妙延時,而沁恒給的MounRiver Studio中的rtt例程里面沒有實現微妙延時,于是研究了下并寫了【RTT大賽作品連載】CH32V RTT微秒延時的實現這個帖子里。
在開發HID通訊功能時,沁恒例程包里提供了USB通訊的例程,但是沒有HID的,所以從描述符到中斷狀態機修改,我構建了鼠標鍵盤的HID庫,寫在了【RTT大賽作品連載】CH32V103 USBHID鍵盤鼠標帖子里。
本項目設計的多功能推桿依靠HID協議,可以實現鍵盤輸出任意字符、鼠標點擊移動控制、系統操作、各種軟件快捷操作等,實用性、美觀性和可玩性極高。
多功能推桿的照片:
下面分別展示本項目的功能效果:
1、將一個一對極的磁鐵貼在六角扳手一端,用CH32V103開發板通過IIC協議讀取AS5600數據,并通過串口顯示,可以看到能夠讀到是否有磁鐵,轉動角度數據。
2、開機功能展示:讓開機成為一種享受!
3、快捷鍵功能(CTRL-C CTRL-V):讓“拿來主義”也具有形式感!
4、輔助輸入: 我就是懶得打字!
5、音量調節: 作為一個推桿,最基本的操作了!
jf_89933904: 阻尼器是哪款,能分享一下嗎
回復