CN / EN
CN / EN

写技术文章

如何优雅的DIY鼠标?

大道至简

2022-09-11 11:41:07

最近居家办公,鼠标用着用着突然坏掉了。

怎么办?换一个?那是不可能的。直接撸起袖子修啊。

但是修着修着,为啥不直接升级呢?

为什么要升级?因为原有鼠标是用的2.4G,意味着要独占一个USB口,而我笔记本正好只有一个USB口,另外,之前也有遇到过紧要关头,突然电池就没电的尴尬境遇。希望能改为锂电池的。最后,家里面电脑也比较多,桌子上都是鼠标?换来换去,岂不是很不爽。

为了逐步解决这些问题,于是有了如下想法:

首先是硬件改动:

要满足上述需求,就必须要替换一颗带BLE 基带的SOC,然后将原厂鼠标硬件的外设,如按键,滚轮,光电传感器进行接管。

1、按键篇:


上图红框部分为鼠标的左右按键,原厂按键是矩阵扫描的方式,因此我们需要改造一下,

上图红圈是按键的背面,这里我已经打胶了,大体改动就是将之前的走线全部隔断后,将两个按键的GND短在一起,后面分别使用两个GPIO去读取信号,其中需要保持上拉。按键采取下降沿触发。

滚轮篇:

该鼠标用的是机械式滚轮,其原理也很简单,上图红框即为机械滚轮传感器,其中包含三个引脚,一个为GND,另外两个为信号分别为A,B信号脚。当滚轮转动的时候,A,B引脚分别和GND导通,以此产生特定方波,同时根据A,B信号脚的相位先后关系可以确认滚轮方向。

因此,只需要通过两个GPIO读取A,B信号脚,同时需要保证内部上拉电阻使能。

光电篇:

上图红框部分为光电传感器(型号:FCT3065),这个传感器是国产的,但实际上内核仿的是PAW3205, 因此只需要参考后者的datasheet即可。


从芯片引脚定义来看,我们仅需要接管234号引脚即可。


下面是总线时序图:

乍一看以为是I2C,实际一看完全不是,读写位放在高位,而不是低位,没有I2CACK信号,同时读,也不需要RE-START。因此整体看还是很简单的。

再结合下列寄存器列表:

在默认的情况下,仅需使用上图红框的寄存器,即可Driver该芯片。

如果我们需要打造低功耗的产品,异步通信极为重要,因此这里就需要它提供的MOTION脚。当有信号时,它会主动唤醒SLEEP时的SOC,然后SOC再去采集sensor中的数据。

SOC篇:

上面讲了原厂鼠标PCBA上的器件如何驱动,现在看下我们选用的SOC情况:


这里选用一颗名为GR55xx的芯片,内核架构是Cortex-M4F,主频高达96Mhz,内嵌BLE5.2 基带,512KBRAM,以及1MBflash。丰富的外设资源,此处来满足鼠标需求,堪称砍瓜切菜。

电源篇:

首先,我们支持充电,这里挂了一个TP5046 1A充电芯片,电池挂了一个380Mah的锂电池,

电池动态范围3.2v4.2v,但是我选取了3.5v4.2v作为有效电量区域。这里自己搭了一个简单的分压电路,分压比为13,因此4.2V时,ADC实采1.4v

同时,我们选用的模组自带了一个LDO,因此不在需要额外追加稳压电路,只需要将模组上供出的VBAT电压分给鼠标PCBA用即可,SOC本身采用的VBAT

硬件改动基本讲完了,这其中涉及到一些改模的地方,就不细数了。上几张装机后的照片:

这两张和原厂是没有什么区别的,主要看下张:




1、红框是一个跳线开关,切断电池电源用。

2、绿色为TYPE-C接口的充电头。

3、蓝色框标出的是一组SWD+UART 调试口。

软件篇:

1、整机采用了FREERTOS,开源,小巧,稳定,易用的嵌入式实时操作系统。

2、BLE部分,集成了HID/BAT/DIS 三大基础service

3、其中涉及到按键,滚轮编码,光电传感器等驱动的集成。

功能对比:

改造前改造后
供电干电池锂电池
能否充电不可以可以
支持2.4G支持不支持
支持BLE不支持支持
支持多链接不支持支持
支持OTA不支持支持
支持SHELL不支持支持
支持电量采集不支持支持

截至目前,已调好基本的鼠标功能,配对,链接,基本通信,坐标上报,按键上报,电池电量上报。

后续有空在陆续完善OTA/多链接/低功耗调优等功能。


改完以后,再也不需要更换电池,不需要独占USB口了。这里说下为什么要支持多链接,因为这样可以一个鼠标,控制不同电脑了,不需要多个鼠标,或者换来换去的。

0收藏

1赞成

1条评论
您的评论
我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注