标准版
最丐61+3键机械键盘(附原理讲解)
3.6w
0
0
59
简介
采用价格低廉的沁恒CH551(CH55X家族中的丐中丐)没ADC,内存0.75+10,我就挑战不加io扩展,作出最低成本的61键机械键盘
简介:采用价格低廉的沁恒CH551(CH55X家族中的丐中丐)没ADC,内存0.75+10,我就挑战不加io扩展,作出最低成本的61键机械键盘开源协议
:GPL 3.0
创建时间:2020-03-19 18:12:48更新时间:2023-02-07 09:37:52
描述
键位设置:
未按下Fn:

按住Fn(多媒体功能在0.5版本添加):

设计要求:
虽然是挑战最低成本,最简电路,但下限还是有的:
1.全键无冲
2.带灯(我可以不焊,但你不能没有)
3.而且是双色led灯
4.带HUB,方便插无线鼠标(距离近,信号更强更稳定),U盘,不过因EDA对等长优化不够好,已砍
(在另一个版本已实现,尽请期待)
设计思路:
百度“最少的io扫描最多的按键”你能看到的有(这里只列举几张代表性的)
传统矩阵:

二极管编码:

变种的行列键盘:

当然,上面都是有键冲的,市面上常用的是基于第一种改造的无冲突键盘。而我要另辟蹊径,用第三种改造。

这是原理图的部分截图(忽略掉led引脚,只看按键),这里是由K1、K2、K3三个io驱动扫描六个按键,细心的观众可能看出来了,这和上面第三个方案是类似的。都是IO两两配对,正反各一个按键。这里不作运行流程讲解。
技术难点:
假设同时按下S1、S9,但K1置低电平时,K2、K3的电平是???
为了解答这个问题,我们翻开技术文档:
这是4148的伏安特性图:

这是CH551的触发电平电压:
电源为5V时:

电源为3.3V时:

再假设流过4148的电流为1mA,那么压降为0.5V。
在这种情况下,若单片机5V供电,则K2、K3都为低。
显然这就有违全键无冲的初衷。
但在3.3V供电下,2*0.5V>0.8V,则K2为低、K3为高。成了。
(实测551在0.9V下还不算低电平,故还需要上拉电阻给二极管提供偏置电流,增加压降,不然和5V供电下雷同)
但我还不满足于此,还想加多按键,细看技术文档,发现RST脚能当输入脚使用,但技术文档没标出它的触发电平,保险起见,外接一个PNP管做反相器。
这样一来,仅一个CH551,16条腿,除去3条电源,2条usb,剩下10个IO加一个RST脚,在不考虑灯的情况下,就能做到100键无冲突。你说厉不厉害。
但3D打印机大小有限,而且要驱动LED。正巧自带两路PWM,用去驱动双色LED。剩下的还能做64键无冲。61键排列,还富裕3个按键,做成侧键。
各方面榨干这单片机。
制作过程:
PCB正反面:

先焊接typeC口:

输入滤波:

电源稳压块:

单片机:

排阻和三极管:(忘了下单贴片8550,直插顶上)

开始焊4148:

先焊一边固定:

全部焊好:

特写:(后面发现有一只4148一侧没上锡,刚好在图片上)

侧边按键:

开始焊轴25%

50%

75%

100%

焊点特写:(没上锡的4148又上镜了)

上平衡杆:

加键帽:

金主logo特写:

![VID_20200410_194329 [640i].gif](http://image.lceda.cn/pullimage/caV1ib4NYLGgZpsH98OEHgHevBJUrPzOOHbR1MB6.gif)
程序更新日志:
Ver0.1:
- 无灯,
- 完善部分FN组合键,
- 软件消抖,
- 多按键按下时,序号低的优先输出
- 侧键功能:未按下FN:截图、PGUP、PGDN按下FN:INS、HOME、END
Ver0.2:
- 加入灯光驱动(不可按键调节)
- 将io全部配置成开漏输出,运行功耗降低(一点点)
Ver0.3:
- 优化消抖,在廉价轴上的双击现象会有改善。按键上升沿无影响,但下降沿会延迟10ms
- 功耗优化(键盘扫描次数边少了,改为定时扫描,自然功耗就降低了)
Ver0.4:
- 重写USB底层,修改代码里的调试端点,改为鼠标端点。
- 修改FN键下的触发,改为在FN期间按下的,直到对应按键松开为止都是FN下的功能。
- 大写时1Hz呼吸灯,小写时0.5Hz呼吸灯
- 消抖时间改为10ms
Ver0.41:
- 修复了上电ctrl可能误触发的bug
Ver0.5:
- 添加多媒体操作按键,详细见键位图
- 消抖时间改为12ms
Ver0.51:
- 开启看门狗
- 修复USB总线复位后死机的BUG
Ver0.52:
- 亮度,颜色变化过程修改,由线性变化改为对数变化(开始慢结束快)
- 降低数据包回报速率,从1000Hz改为500Hz
Ver0.6:
- 消抖动算法改良,按下和松开事件都是即时动作
- 因运算量增加,扫描周期改为2ms
Ver0.7
- 加入方向锁,FN+》启动或关闭,上下左右对应按键默认逻辑会翻转
- FN+《调节亮度
- FN+M调节灯效
- 方向锁和灯效会在20秒无修改后保存进EEPROM,下次开机仍然保持设置
- EEPROM均衡磨损算法
- 上报名称改为“最丐61+3键盘”
Ver1.0
- 开启端点4用作上位机通讯接口
- 获取单片机内部唯一ID作为设备ID
- 修复上报长度仅保留低字节的bug
- 添加上位机直接控制PWM和还原命令
- 上报版本号修改为0x0100
- 修复上电会闪灯的BUG
- PWM频率下调到2KHz
Ver1.1
- 通讯端点与小键盘同步更新
- 修改存储格式,更新版本需清空flash
- 修改改灯方式,FN+[|]多击来亮度、灯效、方向锁、开源网
灯效:

怕有人不理解后面几个灯效,就是caps按键下选择单独一个通道时做大小写指示,每种都有两个是分别对应两个通道相反的情况


程序前前后后持续了一年多的更新,我觉得现在功能很完善了,
所以软件版本接下来应该不会有什么功能性大更新了,当然如果你们有好的想法可以评论区提出。

已知硬件BUG:
- 上面图片的稳压块封装反了,所以倒着焊接(现PCB已修正)
- S40的LED左右两通道是反的,注意一下(现PCB已修正)
- 灯光控制脚不拉低也会微亮,是我忽略了单片机io的钳位二极管。不过影响不大,也就灯不能完全灭掉。
- TYPE C只接了单面,故只有一个方向能识别。
- TYPE C的CC脚悬空,导致不能使用双TYPE C线触发OTG。
授权出售合集:
【腾讯文档】丐中丐小键盘授权ID以及授权费记账
程序更新教程引用站内另一个开源项目(记得不要勾复位脚使能):https://oshwhub.com/TheLight/zi-ding-yi-jian-pan
【由于版幅较长,把售出用户的成品摆到外观篇】

关联词语:charlieplexing
这个名字是最近看到的,原理很类似,就把名字放这里了,有兴趣自己百度
其他版本:
通过减少一路pwm输出,达到九九八十一个按键,caps lock键下的灯还能作为大小写指示,并于其他LED保持相同亮度

加入HUB修改布局给USB接口让路

设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。









