华为“天才少年”稚晖君又出新作,从零开始造“客制化”智能键盘
共 3190字,需浏览 7分钟
·
2022-08-01 13:24
整理 | 于轩
时隔四个多月,打破拖更记录的华为“天才少年”,有着“野生钢铁侠”之称的稚晖君,终于在7月24日发布了他的最新项目视频。
在本次视频中,稚晖君打造了一把模块化机械键盘,并称其为“很实用的生产力工具”。稚晖君将这把理想键盘命名为“瀚文”,由自己从头设计,并加入了智能交互模块,不仅可以安装各种APP,还可以实现指纹解锁等功能。
随后,这一视频还被华为官方转发,并评论“太厉害了!”
不满“客制化”键盘,稚晖君选择自己做
稚晖君表示,此次项目的想法源于几个月前的居家办公经历。对于程序员和打游戏的这一类群体,往往对键盘的要求非常高,甚至可以称为“吃饭的家伙”。正因如此,市场上一部分玩家对于电脑外设的性能和外观的极致追求,也就催生了一种叫做“客制化”的圈子。
但接触下来,他发现很多“客制化”总是以“换壳为本”,还有很大的进步空间。于是,稚晖君决定自己从零构思,设计一把真正的“客制化”键盘。
稚晖君认为,无论想做什么样的新概念键盘,首先要保证它打字作用的基本属性,所以他的第一步是把键盘本身的性能做到极致。相较于“客制化”的圈子里一般以工业设计为大头,软硬件方面都是采用现成的参考设计和开源固件,稚晖君为了保证能够有最大程度的开发度自由,于是选择自己从头设计电路硬件以及固件代码。
硬件设计三步走
首先从硬件来说,键盘的原理其实很简单,每个键轴就是一个独立的开关,按下导通为0,弹起断开为1,通过控制器芯片检测按键的高低电平就可以知道按键是否被按下。
虽然听起来很简单,然而稚晖君表示,真实的情况却有点复杂,他在设计中就遇到不少问题:
1、常规的键盘有100个左右的按键,如果每个按键都接一根导线到MCU的引脚,那么就需要MCU有100多个引脚,这显然是极其浪费且不太现实的。正因如此,所以市面上的键盘基本都使用一种叫做矩阵键盘的形式来检测按键。
比如说对于4行×4列、共16个按键组成的矩阵,单独连接的话需要16个IO,而矩阵扫描只需要4+4=8个IO。
2、如果采用矩阵扫描的方式设计电路,那么由于按键之间不再是独立连接,而是存在一定的耦合,就会出现没被按下的按键也会被触发的情况,也就是俗称的“鬼键”问题。
为了解决这个问题,稚晖君设想在按键下面再添加一个二极管,可以有效防止误触发的问题。
3、想要提升键盘的手感,PCB设计的时候就要做减震处理,因此需要在PCB键轴之间挖出很多长槽。那么矩阵键盘和一堆二极管的模式就会使PCB走线变得很麻烦。
所以为了从硬件根本上重构键盘扫描电路,稚晖君设计了一个相当完美的方案,那就是使用移位寄存器来实现按键扫描。
他使用1×n的矩阵,即基于移位寄存器的并行输入转串行输出功能,把每个按键都看作寄存器的一位,这样每加载一个时钟信号都可以依次读出每个按键的状态。
基于这个方案,稚晖君的设计就有了以下优势:
1、极其节省IO。不管扫描多少按键都只需要一根数据线、一根时钟线以及一根锁存线、3个IO。
2、扫描速度极快。74HC165系列芯片的最高时钟速度超过50MHz,也就是理论上每秒能扫描5千万个按键。由于用不了那么高,稚晖君在实际使用中通过硬件SPI接口模拟时序,扫描频率为4MHz。
3、电路极其简单。减去了所有二极管。
固件设计,性能拉满
键盘硬件问题解决了,下面就来到了固件。目前市面上绝大多数的客制化键盘都是使用像QMK、ZMK这样的开源固件,但它们往往为了适配大量的键盘型号,导致存在代码臃肿、性能优化不足、扩展性不太好等问题。
因此,基于高性能的ARM主控,稚晖君自己开发了一套键盘固件,基本上把全速HID设备的性能都拉到了顶。他在固件中实现了HID设备枚举、1kHz的硬实时报文以及1ms的超低延迟。
超高刷新率的全按键独立RGB灯控制,支持NKRO也就是所谓的全键无冲;添加每个按键独立的滤波算法,支持Bootloader更新固件,支持多层键位映射配置。
此外,设计中还有很多的时间细节,稚晖君表示稍晚会将固件代码开源,感兴趣的小伙伴可以前去仓库阅读源码(地址:https://github.com/peng-zhihui)
不只炫酷,效率提升也不在话下
在结束电路硬件以及固件代码的设计后,键盘本体的硬核部分基本就搞定了,项目也终于来到了外观设计环节。稚晖君请了好友@Xikii厂长帮忙设计加工(此前自动驾驶自行车、机械臂等外壳零件就出自他手)。
组装完成后,稚晖君提到了在构思这个项目时的思考——什么才是智能键盘?
稚晖君表示,如果参考智能手机的定义,智能键盘应该有各种传感器,能够随时安装各种APP,不断获取新能力。基于“模块化”的思路,他给键盘加上了不止一块屏幕。
键盘由三部分组成,除了本体之外,还有一个带USB-HUB功能的底座,以及一个可以替换成各种场景的智能交互模块。智能交互模块可以安装各种APP,首先模块搭载了一块电子墨水屏幕,可以自定义显示各种内容,比如喜欢的图片、天气预报、电脑状态,或者任何其它想要显示的信息。
稚晖君表示会把这个模块二次开发,所需要的通信协议和驱动都封装成SDK,方便大家基于SDK开发各种交互应用。
在电子墨水屏幕上还有一个小屏幕,一块OLED以及一个电机。此外,稚晖君还加入了一个智能滚轮,结合旁边的OLED屏幕,可以把它模拟成弹性开关来当做自定义的按键,向上推打开任务视图,向下推显示桌面,它还能成为一个动态仪表,实时显示电脑的CPU占用的信息等。
稚晖君认为作为生产力工具,他理想中的键盘不应该只有炫酷的功能,还应该实际解决一些效率提升的问题,于是他给键盘添加了指纹识别模块;还在空格键的下方添加了一个电容式的触摸按键条,其功能可以自定义,比如用它快速切换桌面、标签、音乐以及复制/粘贴等。
不同场景扩展模块,玩转“瀚文”键盘
稚晖君将这次尝试模块化键盘DIY的作品命名为“瀚文”,英文名是“Hello Word”。他表示这个项目纯粹是为了满足个人对理想键盘的幻想,接下来会把“瀚文”作为之后的主力设备。本次项目的软硬件都将开源,欢迎大家在此基础上继续开发。
另外,稚晖君还表示,由于开发时间有限,项目还有很多可以完善的地方。他还为大家提供了一些额外的思路,构思了一些用于“瀚文”的其他场景模块,比如用于直播场景的扩展模块:
3D建模场景的扩展模块:
用于视频剪辑场景的模块:
用于音乐制作的模块:
最后,稚晖君透露,未来有时间的话,自己也许会尝试都实现一下。另外,下一期视频会是一个主线的机器人项目。期待他下个设计的到来!
参考链接:
https://www.bilibili.com/video/BV19V4y1J7Hx
如何做一个炫酷的墨水屏电子钟?
看似简单的光耦电路,实际使用中应该注意些什么?
在“古董级” 诺基亚功能机上跑Linux是怎样的画风?表示想拥有一个