前一阵老友提了个需求,感觉现在市面上的键盘都不咋好用,想搞一套自己随意定义键位的机械键盘。稍微查了一下,现在市面上这种客制化键盘基本都是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,否则无法编译。

开发过程中烧写程序也没啥不一样的,不过注意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

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

  1. FPGA项目开发:基于FPGA的伪随机数发生器(附代码)

    FPGA项目开发:基于FPGA的伪随机数发生器(附代码) 今天是画师和各位大侠见面了,执笔绘画FPGA江湖,本人写了篇关于FPGA的伪随机数发生器学习笔记,这里分享给大家,仅供参考. 一.概念 随机数 ...

  2. 完整的端到端的机器学习流程(附代码和数据)|比赛、工程都可以用!

    近日在github上发现一个机器学习的完整流程,附代码非常全,几乎适合任何监督学习的分类问题,本文提供代码和数据下载. 作者:WillKoehrsen 翻译:DeqianBai(https://git ...

  3. 关于STM32的USB设备库DIY机械键盘

    前言 为什么想写这个呢,首先一方面是因为自己喜欢DIY一些小玩意,另一方面关于USB-HID的东西断断续续的学习了不少东西,想总结整理一下.其次就是网络上关于STM32制作USB-HID的案例很多,我 ...

  4. ESP32与STM32的SPI半双工通信与握手协议讲解(附代码)

     说在最前:下面把主要代码都已经附上,如果有人想要完整的工程文件(包括ESP-IDF和KEIL5和STM32CUBEMX的工程)请移步下载链接: 完整资源下载 如果你自己写的,有bug无法解决,请参考 ...

  5. 绝对不容错过:最完整的检测模型评估指标mAP计算指南(附代码)在这里!

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 前言 本文翻译自Measuring Object Detectio ...

  6. Oracle APEX 系列文章2:在阿里云上打造属于你自己的APEX完整开发环境 (准备工作)...

    本文是钢哥的Oracle APEX系列文章中的第二篇,完整 Oracle APEX 系列文章如下: Oracle APEX 系列文章1:Oracle APEX, 让你秒变全栈开发的黑科技 Oracle ...

  7. 软件集成:Simulink与STM32联合开发

    本文首先通过一个简单的Simulink模型生成代码,然后将代码copy到一个STM32工程中去编译软件.最后将软件下载到STM32F407中,通过串口输出Simulink计算的结果. 阅读本文需要有一 ...

  8. STM32环境下AS5048A14位磁旋转编码器SPI通讯调试记录——我学到的东西、遇到的问题、解决的过程

    ❤ 2019.3.16 事情是这样的. 在很多天以前,老师接了个项目,问我有没有意向,我谨慎的表达了我对新事物的好奇心,对新知识的求知欲,同时又委婉的表达了我的能力有限的实际情况,然后我以为事情就这么 ...

  9. STM32开源开发环境的搭建

    STM32开源开发环境的搭建 Eclipse+ GNU ARM Eclipse Plug-in+Sourcery G++ Lite Edition for ARM+OPENCD+Jlink的开源开发环 ...

  10. STM32入门开发: 制作红外线遥控器(智能居家-万能遥控器)

    一.环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 红外线传输协议:  NEC协议---38KHZ载波:.NEC协议是红外遥控协议中常见的一种. 编码发送思路:  延时函数 ...

最新文章

  1. Solr 4.x定时、实时增量索引 - 修改、删除和新增索引
  2. 斯坦福大学报告称中国AI论文引用率首超美国!但李国杰院士也发文灵魂拷问!...
  3. python开发的优秀界面-八款常用的 Python GUI 开发框架推荐
  4. matlab如何将相近的数据,matlab新手,求帮助!主要是如何将数据和公式导入
  5. Flink State 有可能代替数据库吗?
  6. Dubbo源码分析:ThreadPool
  7. android toolbar区别,Android《ToolBar》
  8. mysql font连接数据库_MySQL-Front连接数据库的详细操作流程
  9. 12、testng.xml指定运行测试包、测试类、测试方法
  10. sleep方法和wait方法的区别?
  11. JS实现,页面显示数据加载,显示加载效果,加载完成显示数据
  12. eXosip认证头域authentication
  13. 对本人所发资源“金山词霸2010牛津旗舰版安装及故障终极解决方案”的说明
  14. Python中使用print函数的三种输出方式
  15. 2018年11月29日 16点50分 小苗苗出生了
  16. 关于iTunes11.1 不能刷自制固件的解决方案
  17. sessionId的生成过程和过期时间
  18. 关于设计WAP网站缩放的问题
  19. 用Visual Studio快速发布网站
  20. 看看大佬们最近写的文章

热门文章

  1. android音频系统(6):AudioService之音频输出通道切换
  2. 复联4里的钢铁侠原型是谁?(剧透警告慎入)
  3. 费式序列(斐波那契数列)
  4. vue3+TDesign实现表格序号递增(t-table)
  5. excel冻结窗口怎么设置_粗暴讲解,2分钟 | 即懂excel 冻结首行、首列和单元格怎么弄?...
  6. 【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
  7. java计算机毕业设计企业员工档案管理源码+系统+数据库+lw文档+mybatis+运行部署
  8. 二元隐函数求二阶偏导_隐函数求二阶偏导
  9. 可偏导不一定连续的例子
  10. 微信头像 尺寸 php,怎么把照片缩小做微信头像