本帖最后由 飞向狙沙 于 2024-2-18 09:31 编辑
18年得到一把主控挂掉的机械键盘,一开始打算拆轴,后来想修复,经历过stm32最小系统飞线修复,但是太丑,不想一把好看的键盘有一颗这么乱七八糟的芯,想美观不飞线要么就用原厂或引脚兼容单片机,这个搞不了,要么就用FPC做转接,但是以前的FPC打样价格太贵,都够买把全新键盘了,无解,就扔那吃灰了。 最近看到立创FPC支持白嫖了,那就搞起来,想到手里还有STC送的STC32,决定支持下STC,使用STC32彻底重做,可以直接USB升级,不需要晶振,不需要LDO降压,就是这么妙。 功能需求: 本次DIY稍作修改即可支持修复所有的主控损坏键盘,实际上也支持全新DIY一把机械键盘。
第一步:硬件测量 换芯修复键盘实际上比重新DIY还麻烦,需要兼顾原来的设计,需要检测按键引脚连接定义,对于带RGB的键盘还要检测RGB链接定义,更加复杂。N年前的第一版方案是通过万用表一点一点测量,相当苦逼,测了很久才测完。这次做了FPC转接板,直接重写了个按键扫描程序,只需要测量NumLock等指示灯的定义,剩下的按键引脚直接程序扫描完成。 清理焊盘,测量特殊引脚定义,主要指USB接口,三个指示灯连接,电源脚,这个键盘的RGB灯用的I2C接口的IC控制,所以需要测量I2C接口的连接,然后通过观察引脚的焊盘连接确定几个空连接的引脚(Pin2Pin,不筛选出空连接的引脚IO可能不够用),如下图。 确定了特殊引脚后就可以开始画PCB了,优先把特殊引脚连接好,其他引脚就近找最方便的引脚连接就行,后续按键连接通过程序扫描完成。画PCB可以使用小窍门,直接把键盘PCB的照片调整尺寸到实际大小然后通过立创eda的彩色丝印放置,方便原件定位。 首次下载通过按下FPC上的P32按键试下进入下载模式,后续通过键盘上的组合键进入下载模式。拉出了txrx,用于调试。芯片位置4脚打孔,防止焊接时PCB焊接有错位导致的应力。 白嫖的FPC到手,这里有个需要注意的地方,金手指尽量不要直接到边,保留0.2mm空间,不然激光切割的时候会导致碳化发黑,我就踩了这个坑。 焊接完成,实际上只要焊TXRX两根线就行,或者通过USB口转接串口的话什么线都不用焊,看自己方便吧,我是拿公司折腾懒得带键盘所以先飞线了。 调试完成后上键盘,清空飞线,背面贴点双面胶固定,正面也用704固定了下,完美。 第二步:按键定义扫描 传统键盘按键连接都是以矩阵方式实现,机械键盘为了实现全键无冲或部分无冲可能会增加一个二极管,原理图如下: 没有增加无冲二极管的直接把上图二极管短接,实际连接千千万,原理都是这一种,此处约定存在无冲二极管的,二极管正极连接的IO为列col,负极为行row,不存在无冲二极管时行列随意。 整理键盘PCB连接时使用到的连接除指示灯、RGB类特殊功能外的所有IO,打开keyboard.c文件,把整理后的IO放到这两个数组,IO顺序暂时无所谓,两个数组的IO不要重复,即任意一部分IO放到rowPins里,剩下的放到colPins里,注意ROW_NUM和COL_NUM的宏定义要按照实际数量调整,不然可能会出现意想不到的意外。 - uint8_t rowPins[ROW_NUM]={GP11,GP47,GP14,GP21,GP22,GP23,GP42};
- uint8_t colPins[COL_NUM]={GP27,GP04,GP03,GP45,GP02,GP00,GP46};
复制代码
打开common.h文件,去掉//#define ENABLE_KEY_DEFINE_SCAN前边的注释,编译下载后连接TTL,监视串口,按下键盘任意键,串口会打印扫描到的连接定义,如串口显示press P11--P22表示按下的按键连接着P11和P22两个脚,不存在无冲二极管,如显示press P11->P22表示存在无冲二极管,P11需要放到列数组,P22放到行数组。在表格中记录每个按键的行列指示,即可整理出引脚连接情况。 第三步:引脚和键值调整 按照整理出的引脚连接情况重新调整rowPins[ROW_NUM]和colPins[COL_NUM]数组里的引脚定义。同时按照表格里的按键调整keyMaps里的键值,同时检查FN键位置,调整common.h中FN对应的行列位置。 - //FN键位置
- #define FN_ROW_POS 8
- #define FN_COL_POS 2
复制代码
到此按键扫描工作完成。 第四步:多媒体键定义 现在基本上所有的键盘都有多媒体键定义,如静音、音量调节、下一首等,通过FN组合键实现,看qmk等固件都是通过分层设计实现,对于这种全键盘懒得搞这么复杂了,直接单独检测了。 打开keyboard.c文件,找到keyboardSend方法,在switch里case ID_KB_F1代表的就是FN+F1组合键,只要修改对应红框里的键值就能实现对应多媒体键。
具体多媒体键的键值键keycode.h文件,如想在F1实现打开计算器只需要把上方红框里的键值ID_MK_MediaSelect替换为ID_MK_Calculator即可。 默认实现了WinLock功能,即win键锁定,防止打游戏之类的情况下误触发,按下Fn+WinL实现锁定,再按一次恢复正常,但是这个功能没做持久化,即本次锁定后如果电脑关机或者键盘重插,会自动恢复正常。 实际上程序方面支持关机键等系统控制功能,但是这个功能基本上没人用,所以未作实现。 程序编译、下载
|