记录一下自己用STM32完整开发一台双模机械键盘的过程(附代码和原理图)

前一阵老友提了个需求,感觉现在市面上的键盘都不咋好用,想搞一套自己随意定义键位的机械键盘。稍微查了一下,现在市面上这种客制化键盘基本都是arduino开发的一些方案,倒是也没啥不好,就是感觉为了把灯做的更绚丽就又加了一块MCU,然后还没有什么双模的开源解决方案,其中最让人受不了的就是,键位设定很难受,朋友表示作为一个资深程序员无法接受这种订制不到位的键盘,于是乎我们抽了几天时间,重新开发了一套键盘。这份博客就是我用自己的键盘写的,感觉还不错。下面分几段来慢慢记录这个键盘的完成过程。

先附链接:https://github.com/BG2CRW/CoopBoard

做键盘要准备出如下东西:PCB,定位板,轴,键帽,壳,一大堆原件

第一步肯定是先定结构然后画一套板子(参考http://tieba.baidu.com/p/4592747695?traceid=的帖子)
这一步比较简单,有很多工具可以用,我们在这一步需要把大PCB和定位板做出来,这里首先要推两个网站:
键位编辑网站http://www.keyboard-layout-editor.com/#/
定位板生成网站http://builder.swillkb.com/
先用上面网站生成配列,这是我的40%键盘配列,个人追求小且好用

可以直接修改rawdata,W是键宽度,H是键上下高度,A表示键上字符的位置
修改完成后就复制raw data,然后打开下面的网站
轴位形状一般选第三种,然后draw my cad即可
这里下载DXF格式的cad图
接下来就是导入AD中
选文件-导入即可
然后就会出现一个对话框,如果你没有安装插件就不能像下面这样导入DXF格式,解决办法请百度“ad无法导入dxf“
导入时要注意三个地方,单位mm,位置-每次导入都要保持相同位置,我一般就是(0,0),导入层-一般选机械层2就行,制作多配列时,可以把其他配列DXF导入到其他机械层,修改键位时只要选择显示哪个层就行了
这里pcb形状更改一下,按住shift多选四个边框,然后在设计-板子形状里按如下选择即可
生成特定外形的PCB

再接着就是个精细的机械操作了,选中轴的器件拖动到对应的键位上,可以按住ctl加鼠标滚轮放大缩小,并且可以按方向键精确调整位置,总之这里的位置一定要精确,不要差太多,也不要把键所在位置搞错,平下心慢慢来,这里真急不得!

这里放完所有轴之后就可以放卫星轴和螺丝固定孔位了
卫星轴在pcb上
说白了就是四个无焊盘的通孔,可以根据cherry的mx轴规格表现画,原理图库和封装库均在github上,即本文开始时放的链接
选工具栏中放置器件(快捷键PC)
放置封装,在封装右边点… 打开封装库
选择对应的卫星轴宽度
这里还有注意一点,一般1X卫星轴一般都是细孔在上,粗孔在下,空格的卫星轴则相反,当然,有时候也要看定位板,一般要保证,cad图上的横线正好穿过通孔的中间
摆放完毕就可以开始布线了,布线方法就不多说了,但是不建议大家自动布线,本键盘的原理图已经在github中放出供大家参考。

然后稍微讲一讲CoopBoard的设计思想,考虑到开板成功率,将来升级兼容性和成本因素,本键盘分为两块PCB。大板我们称之为IO板,小板称之为核心板。IO板顾名思义,没有单片机,所有的LED,按键,开关等接口通过FPC排线引出,由于面积大,这块板打板我们需要一步成功,不再返工,至于核心板我们稍后再说。现在IO板绘制完成后,要打4个M3的螺丝孔以便将来PCB与壳子进行固定。大家在画PCB的时候记得画上就好。IO板上是留有一个电池的位置和一个开关的位置,这些全都通过FPC引出。

在核心板上我们在设计的时候就要考虑电源管理,usb接口,蓝牙接口,不过我现在出的这版是纯USB的版本,不带电源管理和蓝牙通信模块,不过核心板上留的串口是为了扩展用的。

然后在往加工厂发定位板的时候,发1mm的就好,然后dxf文件上同样也一定记得在对应位置上打孔,这个大家随便画一下就好。

然后一大块就是画壳,我使用solidworks画的,然后用自家3D打印机打的


尺寸再大点我家机器估计就hold不住了。个人感觉颜值还是很高的,stl文件也在我的github中有,大家可以一看。


小板还没出的时候,其实我们就已经可以开始组装了,颜值还是很高的,大家上眼瞧


当然,我的审美不太好,大家也不要吐槽。安装过程中在卫星轴的安装那个地方大家需要自己百度一下安装方法,不同的卫星轴安装方法不太一样,并且挺麻烦。

接下来就可以开始考虑核心板的程序问题了,单片机采用STM32F103RCT6,一款物美价廉,性能强悍的单片机。功能在设计的时候为了方便每一个用户可以自由更改按键定义,并且在没有STLINK的时候,也可以通过USB进行程序升级和烧写,于是我开发了一个新的bootloader程序,这段代码在烧写的时候占在程序区的前面一块,程序在上电的时候如果没有检测到第一列按键被按下则跳转到后面的程序,即正常的键盘工作代码。如果按下了键盘第一列的任意按键,那么上电的时候,键盘就会卡在USB烧写程序的位置,设备管理器中会出现一个DFU,然后使用专用的烧写工具即可将生成的固件hex烧写进入单片机。具体烧写方法在最后会详细进行说明。

目前程序开发也不完全,仅仅完成了键盘功能的开发,对灯还没有进行开发,但是硬件上是支持每个单色LED可控,在我们的IO板上大家可以看到均使用74HC595进行控制,并且在输出加挂了三极管进行驱动,已测试每个灯都能达到较大亮度。

程序顶层全部C++进行开发,在编译的时候要勾选use mircolib,否则无法编译。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章