前一阵老友提了个需求,感觉现在市面上的键盘都不咋好用,想搞一套自己随意定义键位的机械键盘。稍微查了一下,现在市面上这种客制化键盘基本都是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
原网址: 访问
创建于: 2020-10-23 12:54:12
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论