基于CH32V103的多功能推杆设计

简介: 这是一个创新项目,设计了一款灵感来源于游戏《双人成行》的多功能推杆设备。该推杆采用CH32V103微控制器、霍尔编码器和振动马达,通过自定义USB TYPE-C接口及HID协议,实现电脑开关、音量控制、鼠标/键盘模拟等多种功能。硬件部分包括线性旋转霍尔传感器、力反馈装置以及带灯微触开关,利用USB Type-C接口巧妙解决多线连接问题,确保功能性和简洁外观。此外,项目还包括3D打印的结构设计,以实现平滑的操作感。软件部分基于MounRiver Studio和CH32V103R8 MCU,代码托管在Gitee上。项目还展示了实际操作的图片,展现了其实用性和可玩性。

一、项目简介

“创意源于生活,工具始于懒惰。” 整体造型外观参考了最近比较火的夫妻游戏《双人成行》第一关里面那个吸尘器的推杆开关,结构中采用阻尼器/滚珠轴承等器件,使其非常具有质感和手感。功能上我构思不能只有电脑开关这么简单地一个功能,于是内部采用CH32V103、霍尔编码器,振动马达驱动等外设构建了一个具有开关/线性控制,力感反馈推杆,通过自定义USB TYPE-C接口和HID协议,实现了对电脑的开关机、音量控制、鼠标/键盘/摇杆模拟、甚至可以针对不同应用实现快捷键等功能。

二、硬件构成

我认为一个想法要有完整的设计,不能只停留在开发板上,所以在前期我使用开发板完成了软件功能的实现,后面又设计并打样了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

代码仓库:https://gitee.com/zealerlu/mult-push-rod-riscv

软件部分的整体的功能设计和程序设计如下思维导图所示:“创意源于生活,工具始于懒惰。”

软件部分主要逻辑都体现在上面的思维导图中。由于在开发AS5600外设时,要是用IIC,本以为CH32V103的会比较好用,也看到有网友用起了他的硬IIC,但我经过好久的调试,还是卡在初始化之后,总线处于busy状态,硬件排查了信号也没啥问题,就是不好使。

四、项目演示

本项目设计的多功能推杆依靠HID协议,可以实现键盘输出任意字符、鼠标点击移动控制、系统操作、各种软件快捷操作等,实用性、美观性和可玩性极高。多功能推杆的照片:

相关文章
|
8月前
|
监控 项目管理
MP项目特性详解
当今世界,项目管理已成为企业成功的关键因素之一。在众多项目管理方法和认证中,PMP(Project Management Professional)无疑是最受认可的之一。PMP认证代表着高水平的项目管理能力,而了解PMP项目特性则是掌握这一领域的重要一步。本文将深入探讨PMP项目特性,帮助您更好地理解和应用项目管理的最佳实践。
|
7天前
火山中文编程(PC) -- 类的介绍
火山中文编程(PC) -- 类的介绍
21 0
火山中文编程(PC) -- 类的介绍
|
9月前
|
数据可视化 定位技术 API
探索Streamlit中强大而灵活的 st.write() 函数(五):构建丰富多样的应用界面
探索Streamlit中强大而灵活的 st.write() 函数(五):构建丰富多样的应用界面
814 0
|
10月前
|
前端开发 Java 程序员
软件设计理念——输入输出为例
软件设计理念——输入输出为例
92 0
|
11月前
|
编解码 物联网
国产MCU-CW32F030开发学习-ST7735 LCD模块
国产MCU-CW32F030开发学习-ST7735 LCD模块
103 0
国产MCU-CW32F030开发学习-ST7735 LCD模块
|
11月前
STM32F1案例 ST7735 TFT液晶显示屏综合库使用
STM32F1案例 ST7735 TFT液晶显示屏综合库使用
166 0
|
内存技术
STM32Fxx位带操作还不会?哲学三问让你实现位带自由(含位带操作核心代码)以LED与键盘为例
STM32Fxx位带操作还不会?哲学三问让你实现位带自由(含位带操作核心代码)以LED与键盘为例
|
存储 数据库 数据安全/隐私保护
大型医院PACS系统源代码,VC + MSSQL开发,专业高级三维后处理功能
本套PACS系统为医院提供一个包括放射、超声、核医学、病理、内窥镜、心电图室在内的所有影像检查数字化的一体化解决方案。 它涵盖了传统PACS和RIS系统的所有功能,以构建全数字化影像科为目标,致力于实现对医院所有影像数据的统一管理、影像检查工作流的自动化,及影像诊断的智能化。
大型医院PACS系统源代码,VC + MSSQL开发,专业高级三维后处理功能
|
开发工具 git
OLED显示屏(内含:1.调试方式+2.OLED简介+3.硬件电路+4.驱动函数+5.软件代码部分+6.代码部分注释)
OLED显示屏(内含:1.调试方式+2.OLED简介+3.硬件电路+4.驱动函数+5.软件代码部分+6.代码部分注释)
261 0
OLED显示屏(内含:1.调试方式+2.OLED简介+3.硬件电路+4.驱动函数+5.软件代码部分+6.代码部分注释)
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的。为了更好的表述封装设计过程,本文描述了CH340G和MAX232芯片封装创建(SOP-16),并将原理图的元器件关联引脚封装。
硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件

热门文章

最新文章