前一阵老友提了个需求,感觉现在市面上的键盘都不咋好用,想搞一套自己随意定义键位的机械键盘。稍微查了一下,现在市面上这种客制化键盘基本都是arduino开发的一些方案,倒是也没啥不好,就是感觉为了把灯做的更绚丽就又加了一块MCU,然后还没有什么双模的开源解决方案,其中最让人受不了的就是,键位设定很难受,朋友表示作为一个资深程序员无法接受这种订制不到位的键盘,于是乎我们抽了几天时间,重新开发了一套键盘。这份博客就是我用自己的键盘写的,感觉还不错。下面分几段来慢慢记录这个键盘的完成过程。
先附链接:https://github.com/BG2CRW/CoopBoard
定位板生成网站 http://builder.swillkb.com/
先用上面网站生成配列,这是我的40%键盘配列,个人追求小且好用
修改完成后就复制raw data,然后打开下面的网站
接下来就是导入AD中
选文件-导入即可
生成特定外形的PCB
再接着就是个精细的机械操作了,选中轴的器件拖动到对应的键位上,可以按住ctl加鼠标滚轮放大缩小,并且可以按方向键精确调整位置,总之这里的位置一定要精确,不要差太多,也不要把键所在位置搞错,平下心慢慢来,这里真急不得!
这里放完所有轴之后就可以放卫星轴和螺丝固定孔位了
卫星轴在pcb上
说白了就是四个无焊盘的通孔,可以根据cherry的mx轴规格表现画,原理图库和封装库均在github上,即本文开始时放的链接
在核心板上我们在设计的时候就要考虑电源管理,usb接口,蓝牙接口,不过我现在出的这版是纯USB的版本,不带电源管理和蓝牙通信模块,不过核心板上留的串口是为了扩展用的。
然后在往加工厂发定位板的时候,发1mm的就好,然后dxf文件上同样也一定记得在对应位置上打孔,这个大家随便画一下就好。
然后一大块就是画壳,我使用solidworks画的,然后用自家3D打印机打的
尺寸再大点我家机器估计就hold不住了。个人感觉颜值还是很高的,stl文件也在我的github中有,大家可以一看。
小板还没出的时候,其实我们就已经可以开始组装了,颜值还是很高的,大家上眼瞧
当然,我的审美不太好,大家也不要吐槽。安装过程中在卫星轴的安装那个地方大家需要自己百度一下安装方法,不同的卫星轴安装方法不太一样,并且挺麻烦。
接下来就可以开始考虑核心板的程序问题了,单片机采用STM32F103RCT6,一款物美价廉,性能强悍的单片机。功能在设计的时候为了方便每一个用户可以自由更改按键定义,并且在没有STLINK的时候,也可以通过USB进行程序升级和烧写,于是我开发了一个新的bootloader程序,这段代码在烧写的时候占在程序区的前面一块,程序在上电的时候如果没有检测到第一列按键被按下则跳转到后面的程序,即正常的键盘工作代码。如果按下了键盘第一列的任意按键,那么上电的时候,键盘就会卡在USB烧写程序的位置,设备管理器中会出现一个DFU,然后使用专用的烧写工具即可将生成的固件hex烧写进入单片机。具体烧写方法在最后会详细进行说明。
目前程序开发也不完全,仅仅完成了键盘功能的开发,对灯还没有进行开发,但是硬件上是支持每个单色LED可控,在我们的IO板上大家可以看到均使用74HC595进行控制,并且在输出加挂了三极管进行驱动,已测试每个灯都能达到较大亮度。
程序顶层全部C++进行开发,在编译的时候要勾选use mircolib,否则无法编译。
开发过程中烧写程序也没啥不一样的,不过注意GITHUB中有两个工程,一个是键盘工程,一个是BOOTLOADER工程,里面烧写区域已经相应的设置好了,大家可以分别upload进单片机,之后再进行更新代码,烧写程序就不再需要插入stlink了。
需要下载一个软件DfuSe_Demo_V3.0_Setup.exe
我们改完代码后需要编译成HEX文件,打开C:\Program Files (x86)\STMicroelectronics\Software\DfuSe\BIN\DfuFileMgr.exe,选择第一个,HEX转DFU,得到DFU文件,然后打开C:\Program Files (x86)\STMicroelectronics\Software\DfuSe\BIN\DfuSeDemo.exe,同时按住键盘第一列任意键,插上USB,可以看到软件中已经识别,然后上传DFU文件即可,方便的更改键位配置,以及灯效,当然,这种方式调试代码效率比较低,调试代码还是建议使用stlink