最丐61+3键机械键盘(附原理讲解)

简介:采用价格低廉的沁恒CH551(CH55X家族中的丐中丐)没ADC,内存0.75+10,我就挑战不加io扩展,作出最低成本的61键机械键盘

开源协议: GPL 3.0

发布时间:2020-03-19 18:12:48
  • 1.4w
  • 28
  • 134
描述

键位设置:

未按下Fn:

61键默认.png

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

按下FN.png

设计要求:

虽然是挑战最低成本,最简电路,但下限还是有的:

1.全键无冲

2.带灯(我可以不焊,但你不能没有)

3.而且是双色led灯

4.带HUB,方便插无线鼠标(距离近,信号更强更稳定),U盘,不过因EDA对等长优化不够好,已砍

(在另一个版本已实现,尽请期待)

设计思路:

百度“最少的io扫描最多的按键”你能看到的有(这里只列举几张代表性的)

传统矩阵:

u=1470209489,3692830599fm=173app=49f=JPEG.jpg

二极管编码:

u=1405912506,2491446644fm=173app=49f=JPEG.jpg

变种的行列键盘:

u=3603759020,178093515fm=173app=49f=JPEG.jpg

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

捕获.PNG

这是原理图的部分截图(忽略掉led引脚,只看按键),这里是由K1、K2、K3三个io驱动扫描六个按键,细心的观众可能看出来了,这和上面第三个方案是类似的。都是IO两两配对,正反各一个按键。这里不作运行流程讲解。

技术难点:

假设同时按下S1、S9,但K1置低电平时,K2、K3的电平是???

为了解答这个问题,我们翻开技术文档:

这是4148的伏安特性图:

捕获1.PNG

这是CH551的触发电平电压:

电源为5V时:

捕获2.PNG

电源为3.3V时:

捕获3.PNG

再假设流过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正反面:

IMG_20200328_130046.jpg 先焊接typeC口:

IMG_20200328_132522.jpg 输入滤波:

IMG_20200328_133410.jpg 电源稳压块:

IMG_20200328_134236.jpg 单片机:

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

IMG_20200328_185249.jpg 开始焊4148:

IMG_20200328_213207.jpg 先焊一边固定:

IMG_20200328_213611.jpg 全部焊好:

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

IMG_20200328_215635.jpg 侧边按键:

IMG_20200328_220143.jpg 开始焊轴25%

IMG_20200328_230713.jpg 50%

IMG_20200328_231133.jpg 75%

IMG_20200328_231643.jpg 100%

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

IMG_20200328_232458.jpg 上平衡杆:

IMG_20200328_233345.jpg 加键帽:

IMG_20200328_234815.jpg 金主logo特写:

IMG_20200328_234944.jpg

VID_20200410_194329 \[640i\].gif

程序更新日志:

Ver0.1:

  1. 无灯,
  2. 完善部分FN组合键,
  3. 软件消抖,
  4. 多按键按下时,序号低的优先输出
  5. 侧键功能: 未按下FN:截图、PGUP、PGDN 按下FN:INS、HOME、END

Ver0.2:

  1. 加入灯光驱动(不可按键调节)
  2. 将io全部配置成开漏输出,运行功耗降低(一点点)

Ver0.3:

  1. 优化消抖,在廉价轴上的双击现象会有改善。按键上升沿无影响,但下降沿会延迟10ms
  2. 功耗优化(键盘扫描次数边少了,改为定时扫描,自然功耗就降低了)

Ver0.4:

  1. 重写USB底层,修改代码里的调试端点,改为鼠标端点。
  2. 修改FN键下的触发,改为在FN期间按下的,直到对应按键松开为止都是FN下的功能。
  3. 大写时1Hz呼吸灯,小写时0.5Hz呼吸灯
  4. 消抖时间改为10ms

Ver0.41:

  1. 修复了上电ctrl可能误触发的bug

Ver0.5:

  1. 添加多媒体操作按键,详细见键位图
  2. 消抖时间改为12ms

Ver0.51:

  1. 开启看门狗
  2. 修复USB总线复位后死机的BUG

Ver0.52:

  1. 亮度,颜色变化过程修改,由线性变化改为对数变化(开始慢结束快)
  2. 降低数据包回报速率,从1000Hz改为500Hz

Ver0.6:

  1. 消抖动算法改良,按下和松开事件都是即时动作
  2. 因运算量增加,扫描周期改为2ms

Ver0.7

  1. 加入方向锁,FN+》启动或关闭,上下左右对应按键默认逻辑会翻转
  2. FN+《调节亮度
  3. FN+M调节灯效
  4. 方向锁和灯效会在20秒无修改后保存进EEPROM,下次开机仍然保持设置
  5. EEPROM均衡磨损算法
  6. 上报名称改为“最丐61+3键盘”

灯效:

image.png

程序前前后后持续了一年多的更新,我觉得现在功能很完善了,

所以软件版本接下来应该不会有什么功能性大更新了,当然如果你们有好的想法可以评论区提出。

IMG_20200626_204146.jpg

已知硬件BUG:

  1. 上面图片的稳压块封装反了,所以倒着焊接(现PCB已修正)
  2. S40的LED左右两通道是反的,注意一下(现PCB已修正)
  3. 灯光控制脚不拉低也会微亮,是我忽略了单片机io的钳位二极管。不过影响不大,也就灯不能完全灭掉。
  4. TYPE C只接了单面,故只有一个方向能识别。
  5. TYPE C的CC脚悬空,导致不能使用双TYPE C线触发OTG。

套件出售链接:http://aliurl.cn/299o2p

【DIY机械键盘套件(51单片机)】

110元不包邮:

定位板+线路板+底板+脚垫+平衡杆+青轴+电子元件

自己可以稍微计算一下成本,如果自己做一两套剩下咸鱼转手可能还不如买我的套件,因为你转手肯定卖不过我,

自己做5套送朋友或者成品转手的话另当别论,建议转手后把这个网站告诉他,以让他们更新程序。

程序更新教程引用站内另一个开源项目(记得不要勾复位脚使能):https://oshwhub.com/TheLight/zi-ding-yi-jian-pan

外观篇: https://oshwhub.com/yANgZEN/zui-gai-jian-pan-de-wai-qiao

【由于版幅较长,把售出用户的成品摆到外观篇】

QQ截图20200815180450.png

关联词语:charlieplexing

这个名字是最近看到的,原理很类似,就把名字放这里了,有兴趣自己百度

其他版本:

通过减少一路pwm输出,达到九九八十一个按键,caps lock键下的灯还能作为大小写指示,并于其他LED保持相同亮度 IMG_20200627_175011.jpg

加入HUB修改布局给USB接口让路 微信图片_20210125210145.jpg

原理说明图片引用链接https://baijiahao.baidu.com/s?id=1621173179116478690&wfr=spider&for=pc# 标题 #斜体

设计图

单片机最小系统

在编辑器中打开

行列键盘及LED均流

在编辑器中打开
ID Name Designator Footprint Quantity
1 CH573F-QFN28 U2 QFN28-4*4*0.4_CH573F 1
2 CH551G U5 SOP-16_L10.0-W3.9-P1.27-LS6.0-BL 1
3 AO3401 Q3 SOT-23-3_L2.9-W1.6-P1.90-LS2.8-BR 1
4 32MHz X1 OSC-SMD_4P-L3.2-W2.5-BL 1
5 CherryMX_Stabilizer_6.25U K1 CHERRY_MX_6.25U 1
6 IP5306 U1 ESOP-8_L4.9-W3.9-P1.27-LS6.0-BL-EP 1
7 10K R6,R19,R20,R23,R22,R1,R4,R2,R7 R0603 9
8 1K R9 R0603 1
9 5.1K R11,R12,R13,R14 R0603 4
10 0R R15,R8 R0603 2
11 500mR R3 R0603 1
12 100 R5 R0603 1
13 USB-A USB2 USB-A-TH_USB-302-T 1
14 18650 B2,B1 18650直插 2
15 高特插拔轴(3535) S83,S84,SWKUP,SBOOT,S41,S18,S9,S80,S79,S85,S86,S78,S87,S77,S76,S88,S82,S89,S90,S75,S74,S73,S64,S65,S66,S67,S81,S68,S69,S72,S63,S54,S70,S71,S62,S61,S60,S45,S36,S59,S58,S57,S1,S56,S55,S2,S3,S46,S4,S47,S5,S48,S6,S49,S7,S50,S8,S51,S52,S17,S53,S16,S44,S15,S43,S14,S42,S13,S27,S12,S11,S40,S39,S10,S19,S38,S37,S20,S21,S28,S22,S29,S23,S30,S24,S31,S25,S32,S26,S33,S34,S35 高特插拔轴(3535RGB) 92
16 CherryMX Stabilizer 2U K7,K6,K3,K4,K5,K8,K2 CHERRY_MX_2U 7
17 AO3400 Q2,Q1 SOT-23-3_L2.9-W1.6-P1.90-LS2.8-BR 2
18 1uH L1 IND-SMD_L5.8-W5.2_SLF05XX 1
19 ANT-2.4GHz(PCB天线) A1 ANT-2.4GHZ(PCB) 1
20 100uF C15 CAP-SMD_L3.5-W2.8-R-RD 1
21 LW05202-30 J_LEFT,J_RIGHT FPC-SMD_30P-P0.50_LW05202-30 2
22 HX6206P332MR U7 SOT-23-3_L2.9-W1.6-P1.90-LS2.8-BR 1
23 1K RN3,RN2,RN1 RES-ARRAY-SMD_0603-8P-L3.2-W1.6-BL 3
24 S8050 Q5 SOT-23_L2.9-W1.3-P0.95-LS2.4-BR 1
25 MPU-6050 U3 QFN-24_L4.0-W4.0-P0.50-BL-EP2.6 1
26 TSA363G25-250B BOOT SW-SMD_L6.5-W3.6-LS8.0 1
27 106 C48,C46,C34,C45,C9,C47,C10,C4,C3,C2,C6,C5,C1,C27,C26,C25,C24,C23,C22,C21,C20,C19,C18,C17,C44,C38,C39,C40,C41,C42,C43 C0603 31
28 104 C35,C32,C31,C29,C12,C36,C11,C7,C14,C13,C8 C0603 11
29 105 C33,C30,C28 C0603 3
30 222 C16 C0603 1
31 4148 D23,D68,D92,D67,D91,D66,D22,D29,D65,D64,D28,D21,D73,D74,D20,D35,D75,D37,D76,D38,D77,D19,D78,D10,D79,D39,D80,D9,D11,D40,D18,D12,D27,D41,D36,D13,D45,D42,D54,D14,D63,D43,D72,D15,D81,D90,D44,D89,D53,D88,D16,D87,D52,D86,D17,D85,D51,D84,D8,D50,D83,D82,D7,D49,D6,D48,D5,D4,D47,D46,D3,D2,D55,D56,D1,D34,D57,D33,D58,D26,D59,D32,D60,D25,D61,D31,D62,D71,D24,D70,D30,D69 LL-34_L3.5-W1.5-RD 92
32 HX6206P282MR U6 SOT-23-3_L2.9-W1.3-P1.90-LS2.4-BR 1
33 22uH L2 IND-SMD_L2.5-W2.0 1
34 TYPE-C16PIN USB1,USB3 USB-C-SMD_TYPE-C16PIN 2
35 BRCL3160MF U4 SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BL 1

展开

工程成员

服务时间

周一至周五 9:00~18:00
  • 153 6159 2675

服务时间

周一至周五 9:00~18:00
  • 立创EDA微信号

    easyeda

  • QQ交流群

    664186054

  • 开源平台公众号

    oshwhub