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