自制鼠标!回报率1000Hz!

自制鼠标!回报率1000Hz!
2024年12月06日 15:36 电子产品世界

本文引用地址:

鼠标嘛,买一个就好了,为啥费劲做一个?

本人在做数字图像处理时,接触过一款adns3080光流传感器,能够近距离拍照生成黑白像素图像。

深入了解后,发现其原理竟然鼠标使用的传感器原理一样!索性就自己尝试着做了一个鼠标!

且本着要做就做最好的原则,还选择了当时最流行的鼠标传感器paw3395,希望能给同样想DIY鼠标的伙伴提供一些参考意义

本文主要分享——功能亮点、硬件实现、软件设计原理、成本说明

  • 鼠标回报率:实测950Hz,最大1000Hz,市面上场景鼠标回报率在500Hz左右(该数据为项目作者实测数据)

  • 主控:stm32f103c8t6

  • 光电传感器:原相paw3395

  • 使用HID协议与电脑通讯

  • 目前以实现市面上鼠标所有基本功能正常鼠标功能:光标移动、左右键、中键、滚轮、DPI切换,DPI切换时LED闪烁3次

  • 拓展功能:两个自定义按键(已预留接口),本例程未添加

  • 尼龙外壳:基于嘉立创3D打印

  • 电路:基于嘉立创EDA设计,尺寸支持免费打样

硬件比较简单,本质就是stm32最小系统板 + PAW3395驱动电路 + 按键和滚轮电路+3D外壳的适配。

原理图原理图
PCB图PCB图
  • 总体架构使用类RTOS操作系统 的架构

  • PAW3395使用spi协议 驱动

  • 使用STM32CbueMX自动生成初始HID协议

  • 自定义HID报文发送函数,声明一个HID报文发送任务,每1ms更新一次位移数据 并向电脑发送报文

滚轮数据更新的原理?

本章主要解决:滚轮不灵敏or滚轮一直往上/下滚动的问题

在CubeMX中使用TIM2的编码器模式,默认配置如下:

想理解滚轮数据更新的原理,首先要搞清楚,在HID协议中,滚轮的各项数据:

  • 滚轮数据为0x80时,代表滚轮未移动

  • 0xff,为向上移动一个单位

  • 0x01,为向下移动一个单位

其他数值为向上或向下移动好几个单位,移动距离太大,我们把握不住,该怎么解决?

我是这么处理的:

只要判断滚轮移动就以一个单位处理,及0xff或0x01;

其他情况为滚轮未移动,及0x80。

但如果滚了一次后编码器就会长时间保持一个值造成重复判断,造成一直向上/下滚的情况,这就引出来一个新问题:什么时候将编码器的值清零?

很简单,判断完就清零,将判断出来的数值暂存在 wheel_num 中,通过上面刚自定义的报文发送函数 myMouse_update() 每1ms发送给电脑。

每1ms发送给电脑是最佳选择吗?

1ms要做的事情太多了,既要spi读鼠标位移值,又要发送HID报文给电脑,还要判断滚轮数据,容易时序紊乱。所以最终我测试出每5ms判断一次,会更合理,也符合实际使用,因此最终代码如下:

鼠标成本:200元以内。

后期可以控制在:50元以内。

开源参考资料:https://oshwhub.com/lidongze/shu-biao-zhong-ji-ban

鼠标移动电脑
新浪科技公众号
新浪科技公众号

“掌”握科技鲜闻 (微信搜索techsina或扫描左侧二维码关注)

创事记

科学探索

科学大家

苹果汇

众测

专题

官方微博

新浪科技 新浪数码 新浪手机 科学探索 苹果汇 新浪众测

公众号

新浪科技

新浪科技为你带来最新鲜的科技资讯

苹果汇

苹果汇为你带来最新鲜的苹果产品新闻

新浪众测

新酷产品第一时间免费试玩

新浪探索

提供最新的科学家新闻,精彩的震撼图片