聚豐項目 > 基于CH32V103的多功能推桿

基于CH32V103的多功能推桿

“創(chuàng)意源于生活,工具始于懶惰。” 在參加RTT大賽前,老婆在用電腦時和我抱怨開機鍵太遠了,每次都要站起來才能夠得到放在顯示器后面的主機上的開關,十分的不方便。確實,如果主機箱放在桌子底下或者顯示器后面,要開機的話要么得彎腰要么得站起來才能夠到,所以為了讓老婆可以坐著就把機器打開,我開始著手設計了這個多功能推桿。 整體造型外觀參考了最近比較火的夫妻游戲《雙人成行》第一關里面那個吸塵器的推桿開關,結構中采用阻尼器/滾珠軸承等器件,使其非常具有質感和手感。功能上我構思不能只有電腦開關這么簡單地一個功能,于是內部采用CH32V103、霍爾編碼器,振動馬達驅動等外設構建了一個具有開關/線性控制,力感反饋推桿,通過自定義USB TYPE-C接口和HID協(xié)議,實現(xiàn)了對電腦的開關機、音量控制、鼠標/鍵盤/搖桿模擬、甚至可以針對不同應用實現(xiàn)快捷鍵等功能。

zhanglu1012 zhanglu1012

分享
5 喜歡這個項目
團隊介紹

zhanglu1012 zhanglu1012

團隊成員

煲仔鹵煮 Developer

分享
項目簡介
“創(chuàng)意源于生活,工具始于懶惰?!? 在參加RTT大賽前,老婆在用電腦時和我抱怨開機鍵太遠了,每次都要站起來才能夠得到放在顯示器后面的主機上的開關,十分的不方便。確實,如果主機箱放在桌子底下或者顯示器后面,要開機的話要么得彎腰要么得站起來才能夠到,所以為了讓老婆可以坐著就把機器打開,我開始著手設計了這個多功能推桿。 整體造型外觀參考了最近比較火的夫妻游戲《雙人成行》第一關里面那個吸塵器的推桿開關,結構中采用阻尼器/滾珠軸承等器件,使其非常具有質感和手感。功能上我構思不能只有電腦開關這么簡單地一個功能,于是內部采用CH32V103、霍爾編碼器,振動馬達驅動等外設構建了一個具有開關/線性控制,力感反饋推桿,通過自定義USB TYPE-C接口和HID協(xié)議,實現(xiàn)了對電腦的開關機、音量控制、鼠標/鍵盤/搖桿模擬、甚至可以針對不同應用實現(xiàn)快捷鍵等功能。
硬件說明

    我認為一個想法要有完整的設計,不能只停留在開發(fā)板上,所以在前期我使用開發(fā)板完成了軟件功能的實現(xiàn),后面又設計并打樣了PCB和機械結構,把開發(fā)板上僅有的一枚CH32V103焊到了自制的PCB板上,安裝到3D打印的DEMO模型中,所以比較晚才完成提交項目。接下來我將從硬件和機械兩部分進行介紹。


   首先是硬件部分,整體的硬件架構如下圖所示:

2.png

   作為一個推桿,編碼器是必須的,為了結構簡單而不失分辨率性能,我選擇了12bit分辨率的AD5600線性旋轉霍爾傳感器,通過IIC與主控CH32V103相連接。

3.png

   為了絲滑推感同時增加可玩性,我增加了DRV2605和線性馬達作為力反饋,DRV2605內置多種震感波形,結合線性馬達可以提供多種力反饋特性,也通過IIC與主控相連接。

4.png

   在推桿一端,我設計了一個DRV2605帶燈的微觸開關,微觸開關的開關量,結合搖桿的線性控制量可以實現(xiàn)很多功能。在推桿本體中設計了兩個并聯(lián)的LED作為裝飾燈光,通過定時器可以實現(xiàn)呼吸燈效果。

5.png

   在對推桿如何連接電腦這塊,我思考了很久,為了讓推桿能夠實現(xiàn)電腦開關機功能,最簡單的方式就是將一個開關輸出量與主機開關鍵并聯(lián),直接控制短接就能開機了。但這也就意味著要有兩根線直接與主機相連。為了讓推桿和電腦還能走USB協(xié)議,那么也就還要至少接上DM DP GND三根線,再想獲得下電腦當前開機狀態(tài),那就還得再接兩根線到主機的POWER LED上(可能你會說,為啥不用USB連接狀態(tài)判斷?因為剛開機那會兒還沒建立USB連接,這個狀態(tài)不可靠?。?,算下來這就七根線了,另外推桿模塊也需要供電,要么外接電池,要么再接一個VCC到電腦上,那就需要8個線了,其中4跟可以用USB micro接口,但另外四根就很難受了。

 

   可能你會說,為啥不用USB來啟動呢?我也想到了,但是查了不少資料,都說現(xiàn)再新的電腦都不支持USB遠程喚醒關機了的電腦,想想也是,系統(tǒng)都關了,USB通訊也建立不起來啊,(當然也是有部分電腦可以通過BIOS加載USB設備來啟動,但我的電腦不支持。。)

 

   所以在簡潔美觀性的追求下,我的目光聚焦到了USBType-C接口,標準Type-C接口有24P,其中包含兩組USB3.x的差分數(shù)據(jù)線,但那個線間距是真的小啊,而且半插半帖的連接器也不好焊,所以我選擇了12P的剪裁版Type-C接口,其中包括一組USB2.0的接線,一組CC控制引腳和SBU控制引腳,后面這兩組引腳一般用于正反差識別、快充協(xié)議上,而我這里用不到這些功能,就正好替代成主機開關鍵和開關機狀態(tài)讀取功能,這樣一個Type-C接口就搞定了8根線的需求。為了也能正反插,在中間用二極管搭了個換向處理結構,這部分電路如下圖所示:

6.png

  整個硬件原理圖如下圖所示:

7.png


layout并打個樣板:


  當然,定義了Typr-c的接口,對應的數(shù)據(jù)線也需要特殊處理下,才能支持開關機功能,不過上述設計好的地方就是 普通的數(shù)據(jù)線接上推桿,也可以進行HID通訊,不妨礙USB的功能;特殊處理過的數(shù)據(jù)線也可以當做普通的USB Type-C線來用,妙哉吧~

  接下來是機械結構。

  在構思結構時,最開始我設想是導播室里面那個切換臺的推桿,那個質感不錯,只是感覺元素少了很多,所以就又找了找,正巧刷到《雙人成行》的游戲視頻,看到第一關里面夫妻變小了,在家里闖關時,需要一起拉動吸塵器的推桿,這推桿不正是我所設想的么!

  于是以此為原型,我設計了本項目的推桿的ID,如下圖所示


光有外觀還不夠,還要有內部堆疊,為了實現(xiàn)柔順并有推動阻尼感,我選型了好幾款阻尼器,最終選擇了一個合適力度的,設計了內部堆疊,藍色高亮部分為阻尼器,并增加了四個滾珠軸承來減小軸上不可控摩擦,如下圖所示:

 

3D打印了個DEMO,試了下手感,那種順滑舒服只可意會不能言傳啊!

17.jpg

由于手上只有開發(fā)板上一顆CH32V103的芯片,所以只好給它做個心臟移植手術了:

移植好了,只是燒寫器還是需要用開發(fā)板上的:

上電測試,功能一切正常:

21.jpg


軟件說明

開發(fā)平臺:MounRiver Studio

硬件MCU:CH32V103R8

代碼倉庫:zealerlu/Mult-PushRod-RISCV

軟件部分的整體的功能設計和程序設計如下思維導圖所示:

 18.png

 

軟件部分主要邏輯都體現(xiàn)在上面的思維導圖中。

開發(fā)環(huán)境和開發(fā)板相關介紹,寫到了【RTT大賽作品連載】CH32V103開發(fā)板資料及上電首測這個帖子里。

由于在開發(fā)AS5600外設時,要是用IIC,本以為CH32V103的會比較好用,也看到有網友用起了他的硬IIC,但我經過好久的調試,還是卡在初始化之后,總線處于busy狀態(tài),硬件排查了信號也沒啥問題,就是不好使。換成軟IIC就直接跑通..于是就沒太糾結這個,但是軟IIC模擬時序需要微妙延時,而沁恒給的MounRiver Studio中的rtt例程里面沒有實現(xiàn)微妙延時,于是研究了下并寫了【RTT大賽作品連載】CH32V RTT微秒延時的實現(xiàn)這個帖子里。

在開發(fā)HID通訊功能時,沁恒例程包里提供了USB通訊的例程,但是沒有HID的,所以從描述符到中斷狀態(tài)機修改,我構建了鼠標鍵盤的HID庫,寫在了【RTT大賽作品連載】CH32V103 USBHID鍵盤鼠標帖子里。


演示效果

1.bmp

  本項目設計的多功能推桿依靠HID協(xié)議,可以實現(xiàn)鍵盤輸出任意字符、鼠標點擊移動控制、系統(tǒng)操作、各種軟件快捷操作等,實用性、美觀性和可玩性極高。

  多功能推桿的照片:


 下面分別展示本項目的功能效果:

    1、將一個一對極的磁鐵貼在六角扳手一端,用CH32V103開發(fā)板通過IIC協(xié)議讀取AS5600數(shù)據(jù),并通過串口顯示,可以看到能夠讀到是否有磁鐵,轉動角度數(shù)據(jù)。

  2、開機功能展示:讓開機成為一種享受!

 3、快捷鍵功能(CTRL-C CTRL-V):讓“拿來主義”也具有形式感!

 4、輔助輸入: 我就是懶得打字!

5、音量調節(jié): 作為一個推桿,最基本的操作了!

評論區(qū)(1 )
  • jf_89933904: 阻尼器是哪款,能分享一下嗎

    回復