本帖最后由 flyfox 于 2017-10-11 10:20 编辑
玩键盘的猫,飞线版60键盘。
这篇文章是我做飞线60键盘的记录,为了纪念这美好的时刻,于是我给键盘起了个名字叫贱猫60,简称jm60 。在做之前百度了很多相关资料,加上自己的理解,于是做成了下面这个家伙。 这篇文章,不算是教程,算是一个分享吧,没准还有些认知错误。文章先对一些键盘常见概念进行介绍,都是一己之见,然后分享了jm60的制作过程。
--------------------------------------------------------------------------------- 前言 一个偶然的机会,了解到了 Arduino Pro Micro,就是下面这个东西。Arduino Pro Micro采用的32u4主控芯片,和gh60相同,这就意味着Pro Mirco可以使用gmk开源代码。再加上网上有好多大佬飞线做键盘的教程,于是产生了飞线做一个60%键盘的想法。
开关和按钮按钮,两态,按住触发,松开恢复,常见的按钮使用的是常开触点,按下后闭合。 开关,两态,但是两态可以自保持,人为干预可以切换状态。 这里不考虑多态开关。所以根据我的观点机械键盘的轴体应该是一种按钮。
上拉电阻 下图就是矩阵键盘用到的基本原理,电阻R就是上拉电阻,左侧是主控芯片的IO接口,当按钮断开,IO接收到高电平,当按钮闭合,IO电压被拉低,变成了低电平。矩阵键盘就是用了这个原理检测按键是否被按下。
32U4芯片IO引脚内置了上拉电阻,可以通过编程控制是否启用上拉电阻,默认处于启用状态,启用上拉电阻之后就变成了这个效果。
矩阵键盘 按钮状态变化是一种开关量输入,可以使用芯片的IO引脚直接接开关量输入,检测按钮状态。对于Pro Mirco来说,他有18个io,可以接18个按钮。照这个思路,做一个104键盘的话,呵呵~~ 矩阵键盘,采用矩阵扫描的方式来检测按键输入,扫描过程有行扫描和列扫描两种,本质上没有区别,常见键盘基本上都是矩阵键盘。 下图是一个4*4的矩阵示意图,PD0-PD3做行。PD4-PD7做列。行扫描就是逐行检测矩阵键盘的按键状态。扫描过程是,首先初始化引脚状态,行列所有引脚全都置成高电平。然后将第一行PD0置成低电平,如果此时K1处于按下状态则,就会检测到PD5的状态变为低电平,对应数值为0。然后重新初始化,扫描第二行,依次下去,直到扫描完所有行,这样就能检测到所有按键状态。
上面是一个4*4矩阵,最多可以接入16个按键,Pro Mirco有18个io,所以理论上可以做9*9矩阵,最多可以接81个按键。
二极管的作用 当下图连线相关的K2,K3,K4同时被按下的时候,就会导致PD0和PD5处于连通状态,从而扫描程序会识别成K1也是按下的,这样就导致了矩阵键盘识别错误。这个时候为了避免这种情况,我们需要在每个按钮上都接一个二极管。
二极管具有单向导通特性,增加二极管之后,还是K2,K3,K4按钮同时按下的情况,则PD5和PD0之间的通路就被K4上的二极管给断开了。这样就避免了按键误判。
配列 我理解配列是一种设置,矩阵键盘的按键定义。
层 键盘配列里面层的概念,类似于作图软件的图层。本质上是分时复用键盘按键,通过层设置可以实现在不同情况下一个按键对应不同的键值,同一时刻只使用其中一个按键层。层有多种切换方式,常见的就是fn层,按下fn之后,再按下的按键就被识别成了fn层设置的键值。
---------------------------------------------------------------------------------
制作过程 Pro Mirco主控飞线制作无灯版60%键盘,开始。 材料 主要材料如下表,键盘pcb和定位板从104键盘上切割,卫星轴从104键盘上拆得。
切割这一次是照着GH60做的键盘,GH60的按键布局和标准104键盘的主键盘区域是一样的。手头上有一把国产104键盘,键盘使用的铝合金上盖,铝合金定位板非常适合手工切割。 开始,切定位板。
切pcb
打磨手工切割误差还是比较大的,为了避免切了之后尺寸不合适,切割的时候比实际需要的要大一些,然后使用锉刀分别对切好的pcb和定位板进行打磨,边打磨边比对大小。
打磨后试装pcb。
打磨后整体试装,整体试装的时候需要给边角轴体上键帽,确保外壳不卡键帽,这一点很重要。
打孔GH60使用螺丝定位PCB板,切割好的PCB和钢板孔位都是不配套的,所以要自己打孔。这里PCB使用的手动钻,定位板使用的是电动钻。
打孔后,上螺丝,孔位刚好。
定位板,需要大约4mm的孔,电钻没有那么大的钻头,我先用电钻打了2mm的孔位,然后又用小钢锉扩孔,下面是2mm的效果,手工扩孔之后各种不规则了。。。
上轴 上轴,来吧。
装Pro Mirco Pro Mirco引脚定义如下。
轴体装好之后,开始给键盘焊接主控。为了少飞线,尽量保留原来键盘的矩阵设计。但原来键盘使用的是5*14的矩阵,需要19个IO,而pro micro只有18个,实际上键盘只有61个按键,5*13=65足够了,这里说的列是根据矩阵接线说的,而不是按键的物理位置,实际上第14列只有3个按键,我把这3个按键挪动到前面没有使用的位置上。开始,美工刀切断电路,改线。另外电路板打孔的时候,正好有2个孔的位置是二极管,这里二极管飞线绕行。
飞线安装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
焊接后连线。
改造软件硬件准备好之后,开始改造软件,在tmk开源代码中,以GH60代码为基础进行修改。复制keyboard下面的gh60文件夹,修改为jm60,ps:这里用的是Ubuntu系统。
下面开始对代码进行修改 先修改config.h,修改矩阵为5行,13列。
修改keymap_common.h 文件,更改按键映射关系。更改KEYMAP部分,改成5*13的矩阵,正好用满了这些按键。
然后修改,矩阵扫描程序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
最后修改led.c,取消灯控对io的占用,这里直接注释这部分代码。
接下来进行编译,在编译之前要先部署好编译环境,安装交叉编译链。 sudo apt-get install gcc-avr avr-libc avrdude 然后通过命令行,进入jm60目录,再输入make命令进行编译,处理编译过程的报错,最终获得编译好的hex文件。
下载到pro micro,短接pro micro上的rst和gnd,连接到电脑,然后放开rst,马上执行下载 命令 sudo avrdude -p atmega32u4 -P /dev/ttyACM0 -c avr109 -b 57600 -U flash:w:gh60_lufa.hex 这样完成了一个下载过程。 下载后测试,惊奇的发现,所有按键都不生效。经过一系列尝试发现,这个键盘的二极管是反装的,反装的,反装的,下面是原理图和实际键盘对比,原理图二极管导通方向是列线到行线,而这个104的pcb是从行线到列线,估计原本这个104键盘的主控扫描方式和gh60不同。
怎么办,有两个处理方法: 1. 改硬件,重新拆装二极管。 2. 改软件,当成13*5矩阵处理。 于是我重新复制了代码文件夹,开始重新修改代码,文件夹名叫jm60_13_5。 修改config.h文件
修改keymap_common.h文件
修改matrix.c文件
再重新make,下载到Pro Micro,这次一切正常。。
实际上还有一个很重要的地方,如果需要修改配列,则还需要更改配列代码keymap_poker.c,我这里保留了gh60原有配列,所以没有修改这个文件。
---------------------------------------------------------------------------------
优化jm60出炉之后,还有一些不尽人意的地方。看这里线是直接插在Pro Mirco上的,然后再引线出来。这里需要再优化一下,做真正的键线分离,同时再增加复位按钮,方便固件更新。
键线分离这里使用mini usb母头,这个接头后面有5个接线引脚,下面还有4个用于固定的金属脚,开始安装。
根据mini usb母头固定脚的位置进行打孔,孔位下方正好有一个二极管,同样方法拆掉,飞线绕行。
然后焊接mini usb母头和micro usb公头连接线。
接线测试,功能正常,上热熔胶固定
复位按钮接下来准备复位按钮,考虑到高度和安装问题,复位按钮单独安装在一块小板上。同样,需要进行打孔,切割。
接线,测试功能正常,上热熔胶。
成品改造完成后,安装底壳,上螺丝,安装键帽 ^_^
接口和复位按钮安装后的效果。
jm60成品!
|