外设堂

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

点击进入授权页面

只需一步,快速开始

搜索
查看: 3969|回复: 70

[改造] 【玩键盘的猫】【贱猫60】纯手工飞线做60键盘

  [复制链接]
发表于 2017-10-10 11:28 | 显示全部楼层 |阅读模式
本帖最后由 flyfox 于 2017-10-11 10:20 编辑

玩键盘的猫,飞线版60键盘。

这篇文章是我做飞线60键盘的记录,为了纪念这美好的时刻,于是我给键盘起了个名字叫贱猫60,简称jm60 。在做之前百度了很多相关资料,加上自己的理解,于是做成了下面这个家伙。
image001.jpg
这篇文章,不算是教程,算是一个分享吧,没准还有些认知错误。文章先对一些键盘常见概念进行介绍,都是一己之见,然后分享了jm60的制作过程。

---------------------------------------------------------------------------------
前言
    一个偶然的机会,了解到了 Arduino Pro Micro,就是下面这个东西。Arduino Pro Micro采用的32u4主控芯片,和gh60相同,这就意味着Pro Mirco可以使用gmk开源代码。再加上网上有好多大佬飞线做键盘的教程,于是产生了飞线做一个60%键盘的想法。

image003.jpg

开关和按钮
按钮,两态,按住触发,松开恢复,常见的按钮使用的是常开触点,按下后闭合。
开关,两态,但是两态可以自保持,人为干预可以切换状态。
这里不考虑多态开关。所以根据我的观点机械键盘的轴体应该是一种按钮。

上拉电阻
    下图就是矩阵键盘用到的基本原理,电阻R就是上拉电阻,左侧是主控芯片的IO接口,当按钮断开,IO接收到高电平,当按钮闭合,IO电压被拉低,变成了低电平。矩阵键盘就是用了这个原理检测按键是否被按下。

image005.png


32U4芯片IO引脚内置了上拉电阻,可以通过编程控制是否启用上拉电阻,默认处于启用状态,启用上拉电阻之后就变成了这个效果。
image007.png

矩阵键盘
按钮状态变化是一种开关量输入,可以使用芯片的IO引脚直接接开关量输入,检测按钮状态。对于Pro Mirco来说,他有18io,可以接18个按钮。照这个思路,做一个104键盘的话,呵呵~~
矩阵键盘,采用矩阵扫描的方式来检测按键输入,扫描过程有行扫描和列扫描两种,本质上没有区别,常见键盘基本上都是矩阵键盘。
下图是一个4*4的矩阵示意图,PD0-PD3做行。PD4-PD7做列。行扫描就是逐行检测矩阵键盘的按键状态。扫描过程是,首先初始化引脚状态,行列所有引脚全都置成高电平。然后将第一行PD0置成低电平,如果此时K1处于按下状态则,就会检测到PD5的状态变为低电平,对应数值为0。然后重新初始化,扫描第二行,依次下去,直到扫描完所有行,这样就能检测到所有按键状态。

image009.jpg

上面是一个4*4矩阵,最多可以接入16个按键,Pro Mirco18io,所以理论上可以做9*9矩阵,最多可以接81个按键。

二极管的作用
    当下图连线相关的K2K3K4同时被按下的时候,就会导致PD0PD5处于连通状态,从而扫描程序会识别成K1也是按下的,这样就导致了矩阵键盘识别错误。这个时候为了避免这种情况,我们需要在每个按钮上都接一个二极管。

image011.jpg

    二极管具有单向导通特性,增加二极管之后,还是K2K3K4按钮同时按下的情况,则PD5PD0之间的通路就被K4上的二极管给断开了。这样就避免了按键误判。

image013.jpg


配列
    我理解配列是一种设置,矩阵键盘的按键定义。

    键盘配列里面层的概念,类似于作图软件的图层。本质上是分时复用键盘按键,通过层设置可以实现在不同情况下一个按键对应不同的键值,同一时刻只使用其中一个按键层。层有多种切换方式,常见的就是fn层,按下fn之后,再按下的按键就被识别成了fn层设置的键值。


---------------------------------------------------------------------------------

制作过程
    Pro Mirco主控飞线制作无灯版60%键盘,开始。
材料
    主要材料如下表,键盘pcb和定位板从104键盘上切割,卫星轴从104键盘上拆得。
序号
材料
数量
1
GH60塑料外壳
1套
2
轴体
61颗
3
ABS双色键帽
1套
4
Pro Mirco主控板
1个
5
104机械键盘
1个


切割
这一次是照着GH60做的键盘,GH60的按键布局和标准104键盘的主键盘区域是一样的。手头上有一把国产104键盘,键盘使用的铝合金上盖,铝合金定位板非常适合手工切割。
开始,切定位板。

image015.jpg

切pcb

image017.jpg


打磨
手工切割误差还是比较大的,为了避免切了之后尺寸不合适,切割的时候比实际需要的要大一些,然后使用锉刀分别对切好的pcb和定位板进行打磨,边打磨边比对大小。

image019.jpg

    打磨后试装pcb

image021.jpg

    打磨后整体试装,整体试装的时候需要给边角轴体上键帽,确保外壳不卡键帽,这一点很重要。

image023.jpg


打孔
GH60使用螺丝定位PCB板,切割好的PCB和钢板孔位都是不配套的,所以要自己打孔。这里PCB使用的手动钻,定位板使用的是电动钻。

image025.jpg

    打孔后,上螺丝,孔位刚好。

image027.jpg

    定位板,需要大约4mm的孔,电钻没有那么大的钻头,我先用电钻打了2mm的孔位,然后又用小钢锉扩孔,下面是2mm的效果,手工扩孔之后各种不规则了。。。

image029.png


上轴
    上轴,来吧。

image031.jpg
image033.jpg


Pro Mirco
    Pro Mirco引脚定义如下。

image035.jpg

轴体装好之后,开始给键盘焊接主控。为了少飞线,尽量保留原来键盘的矩阵设计。但原来键盘使用的是5*14的矩阵,需要19IO,而pro micro只有18个,实际上键盘只有61个按键,5*13=65足够了,这里说的列是根据矩阵接线说的,而不是按键的物理位置,实际上第14列只有3个按键,我把这3个按键挪动到前面没有使用的位置上。开始,美工刀切断电路,改线。另外电路板打孔的时候,正好有2个孔的位置是二极管,这里二极管飞线绕行。

image037.jpg

飞线安装pro micro,为了方便接线,定义行列引脚如下。
    行引脚定义
    row:  0   1   2   3   4
    pin :  D3  D2  D1  D0  D4

    列引脚定义
    col:  0   1   2   3   4   5   6   7   8   9   10  11  12
    pin:  C6  D7  E6  B4  B5  B6  B2  B3  B1  F7  F6  F5  F4

image039.jpg

  焊接后连线。

image041.jpg


改造软件
硬件准备好之后,开始改造软件,在tmk开源代码中,以GH60代码为基础进行修改。复制keyboard下面的gh60文件夹,修改为jm60ps:这里用的是Ubuntu系统。

image043.png

下面开始对代码进行修改
先修改config.h,修改矩阵为5行,13列。

image045.png

修改keymap_common.h  文件,更改按键映射关系。更改KEYMAP部分,改成5*13的矩阵,正好用满了这些按键。

image047.png

然后修改,矩阵扫描程序matrix.c
* row: 0   1   2   3   4
* pin: D3  D2  D1  D0  D4
* col: 0   1   2   3   4   5   6   7   8   9   10  11  12
* pin: C6  D7  E6  B4  B5  B6  B2  B3  B1  F7  F6  F5  F4

image049.png
image051.png

最后修改led.c,取消灯控对io的占用,这里直接注释这部分代码。

image053.png

接下来进行编译,在编译之前要先部署好编译环境,安装交叉编译链。
  sudo apt-get install gcc-avr avr-libc avrdude
然后通过命令行,进入jm60目录,再输入make命令进行编译,处理编译过程的报错,最终获得编译好的hex文件。

image055.png

下载到pro micro,短接pro micro上的rstgnd,连接到电脑,然后放开rst,马上执行下载 命令
sudo avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -b 57600 -U flash:w:gh60_lufa.hex
这样完成了一个下载过程。
下载后测试,惊奇的发现,所有按键都不生效。经过一系列尝试发现,这个键盘的二极管是反装的,反装的,反装的,下面是原理图和实际键盘对比,原理图二极管导通方向是列线到行线,而这个104pcb是从行线到列线,估计原本这个104键盘的主控扫描方式和gh60不同。

image057.jpg

怎么办,有两个处理方法:
1.  改硬件,重新拆装二极管。
2.  改软件,当成13*5矩阵处理。
于是我重新复制了代码文件夹,开始重新修改代码,文件夹名叫jm60_13_5
修改config.h文件

image059.png

修改keymap_common.h文件

image061.png

修改matrix.c文件

image063.png
image065.png
image067.png

再重新make,下载到Pro Micro,这次一切正常。。

image069.jpg


    实际上还有一个很重要的地方,如果需要修改配列,则还需要更改配列代码keymap_poker.c,我这里保留了gh60原有配列,所以没有修改这个文件。


---------------------------------------------------------------------------------

优化
jm60出炉之后,还有一些不尽人意的地方。看这里线是直接插在Pro Mirco上的,然后再引线出来。这里需要再优化一下,做真正的键线分离,同时再增加复位按钮,方便固件更新。

image071.jpg


键线分离
这里使用mini usb母头,这个接头后面有5个接线引脚,下面还有4个用于固定的金属脚,开始安装。

image073.png

根据mini usb母头固定脚的位置进行打孔,孔位下方正好有一个二极管,同样方法拆掉,飞线绕行。

image075.png

然后焊接mini usb母头和micro usb公头连接线。

image077.jpg

接线测试,功能正常,上热熔胶固定

image079.jpg


复位按钮
接下来准备复位按钮,考虑到高度和安装问题,复位按钮单独安装在一块小板上。同样,需要进行打孔,切割。

image081.png

接线,测试功能正常,上热熔胶。

image083.jpg


成品
改造完成后,安装底壳,上螺丝,安装键帽  ^_^

image085.jpg

    接口和复位按钮安装后的效果。

image087.png

    jm60成品!

image089.jpg

评分

7

查看全部评分

发表于 2017-10-10 11:36 | 显示全部楼层
这个动手能力无敌
发表于 2017-10-10 11:46 | 显示全部楼层
厉害的,佩服。
 楼主| 发表于 2017-10-10 11:56 | 显示全部楼层

  秒回啊,多谢~~~
 楼主| 发表于 2017-10-10 12:00 | 显示全部楼层

   多谢~~~
发表于 2017-10-10 13:21 | 显示全部楼层
超有耐心的活…!!!
发表于 2017-10-10 18:05 | 显示全部楼层
牛人动手能力无敌
发表于 2017-10-10 20:27 | 显示全部楼层
666
发表于 2017-10-10 21:20 | 显示全部楼层
全程懵逼中....
发表于 2017-10-10 22:03 | 显示全部楼层
手活挺好
发表于 2017-10-10 22:33 | 显示全部楼层
牛人,厉害了,有空自己做个电脑吧
发表于 2017-10-10 22:36 | 显示全部楼层
仰望大佬,厉害厉害(虽然看不懂)
 楼主| 发表于 2017-10-11 09:46 | 显示全部楼层
hider2015 发表于 2017-10-10 13:21
超有耐心的活…!!!

确实,前前后后做了几天,才弄好~~
 楼主| 发表于 2017-10-11 09:46 | 显示全部楼层

多谢,多谢~~~~
 楼主| 发表于 2017-10-11 09:48 | 显示全部楼层

信息量有点大,但不复杂,需要些时间~~~~
 楼主| 发表于 2017-10-11 09:54 | 显示全部楼层
灵隐 发表于 2017-10-10 22:33
牛人,厉害了,有空自己做个电脑吧

这,做不来啊,哈哈~~~
 楼主| 发表于 2017-10-11 09:55 | 显示全部楼层
KILLUA 发表于 2017-10-10 22:36
仰望大佬,厉害厉害(虽然看不懂)

  多谢多谢,自认为还是萌新~~~
 楼主| 发表于 2017-10-11 09:57 | 显示全部楼层

   还好,还好~~~
发表于 2017-10-11 11:38 | 显示全部楼层
看到pull up resistance,腻害。。。
发表于 2017-10-11 11:51 | 显示全部楼层
999
您需要登录后才可以回帖 登录 | 立即注册  

本版积分规则

手机版|外设堂 ( 辽ICP备13014379号

GMT+8, 2018-10-22 20:30 , Processed in 0.198143 second(s), 33 queries .

Powered by Discuz! X3.2

© 2013-2017 Weistang.com All rights reserved.

快速回复 返回顶部 返回列表