【三键侧透光小键盘】CH552G
简介
主控使用CH552G,键盘主板上的LED灯用于透过定位板上的孔洞实现透光效果。支持五脚轴&热插拔,Type-C插口,使用Arduino编程。 主体和代码都蛮简单的。
简介:主控使用CH552G,键盘主板上的LED灯用于透过定位板上的孔洞实现透光效果。支持五脚轴&热插拔,Type-C插口,使用Arduino编程。 主体和代码都蛮简单的。开源协议
:Public Domain
描述
前言
一开始先感谢一下我的灵感来源,谢谢大佬们的开源让我最终有了这个成品。
参考:https://oshwhub.com/aihaodiylove/ch552g
https://oshwhub.com/TheLight/zi-ding-yi-jian-pan
虽然上面两个大佬的例程都是蛮详细的了,但我还是想把整个流程都写一边哈哈哈哈哈哈哈。
主要是做个自己的学习记录吧。
当然希望大家都很强,用不到我写的东西哈哈哈哈。
如有错漏欢迎评论指正。
做这个东西的初衷是为了马上要来的毕设练手,键盘是我一直很想做的项目。我从包括B站、装备前线、立创开源平台等很多地方看了很多大家做的东西,但是吧对我来说还是一头雾水,看的越多越乱。所以我的目标从一个完整的75配列一直降到了现在这个三键小键盘,对菜狗的我来说确实挺搞笑的hhh。
请注意:DRC报错为差分线长度不对,是由于其中的dp引了一根线至用于烧录短接的按键导致,如果想无报错可以考虑使用0欧电阻以跳线形式避免差分报错。
硬件部分
首先,主控使用沁恒CH552G单片机,它内置了USB设备控制器等模块,使我们可以直接将其通过数据线与电脑连接。这个单片机的外围电路相当的简单,在立创里面可以直接查看数据手册。
从数据手册可知,直接使用5V电源的话,只需要在VCC和V33引脚各外接 0.1uF 电源退耦电容就可以了。
详细解释在数据手册后面
P3.6UDP、P3.7UDM引脚分别连接USB设备的D+、D-信号端。
所以我们就完成了整个项目最重要的主控部分的设计
接下来是按键部分
立创商城有凯华热插拔轴座以及三脚/五脚轴体的数据手册,我根据数据手册给的尺寸绘制了我所需的五脚热插拔无灯封装供本项目使用。
为啥不用ws2812b之类的RGB,一是因为我觉得就三个按键没啥必要,二是因为我懒得画外壳。
其实这类封装在立创的公开库里蛮多的,我想了想还是自己画比较靠谱。
因为就三个键也就不涉及到矩阵,直接一端接ch552g一端接地就行了。
轴体用的是标准轴,我自己买的凯华box白V2,这个喜欢什么自己买就行了,想选出自己喜欢的轴可以去b站上搜搜客制化轴。
接口方面使用tpye-c,比micro usb多点引脚,不过用不到悬空就行了。
关于LED灯,我最初的想法是整个透光的定位板,然后下面布好灯可以印出我的英文名。
为了省钱我定位板也是自己用pcb打的,不过pcb板材是fr-4,本身也是可以用于定位板制作的一种。
但是吧pcb透光我实在没整明白,于是我采用了最简单的办法——打孔,用孔拼出我要的字母就行。
关于pcb透光,可以参考:https://oshwhub.com/mozixi/pcb-fa-guang-ziid-li-pai
我本来想学着整的,但好像确实有点麻烦,就算了。也可以整这个替换我的打孔方案。
我的建议是把定位板的孔改成你自己想要的字符,注意一点就是孔之间的间距要大于等于6mil。
led灯用啥都行,我用的蓝灯是因为正好立创商城有货,也可以换成白灯什么的,记得改对应的电阻。
短接烧录这里,看了蛮多都是说排针不用焊直接镊子短接就行,确实。
不过为了图方便,我这一版加入了按键,要烧程序直接摁着按键上电就行了,比镊子用着舒服点。
我烧录的时候忘拿镊子,我是掰了个回形针搞的,非常的痛苦。
不过你懒得多买个按键的话,直接不焊用别的短接也是可以的。
原理图以及PCB绘制
强烈推荐b站up未来电子工作室的视频,莫工的讲解相当的详细,看完你就什么都会了(狗头)。
https://space.bilibili.com/494969171/?spm_id_from=333.999.0.0
我就是跟着莫工学的,真心推荐没啥基础的跟着学。
软件部分
看了https://oshwhub.com/TheLight/zi-ding-yi-jian-pan的代码,说实话太复杂了,看着头晕。
所以选择了跟https://oshwhub.com/aihaodiylove/ch552g相同的方式,使用Arduino进行编程。
首先Arduino的安装去官网https://www.arduino.cc/下载。
然后是关于ch55x开发板的配置,可以参考https://oshwhub.com/aihaodiylove/ch552g中提供的b站视频https://b23.tv/q5gWt0p。
也可以上GitHub直接看作者的教程:https://github.com/DeqingSun/ch55xduino,全英文就翻译一下页面啦,还是很详细的。
接下来就是代码编写部分。
在GitHub作者提供的项目压缩包里,有很多写好了的例程,其中就包括如何实现键盘输入的。
ch55xduino-ch55xduino\ch55xduino\ch55x\libraries\Generic_Examples\examples\05.USB\HidMediaKeyboard
在这个路径里,就能看到作者写的例程以及src的库包。
例程如下:
/*
HID Keyboard example
created 2020
by Deqing Sun for use with CH55xduino
This example code is in the public domain.
*/
//For windows user, if you ever played with other HID device with the same PID C55D
//You may need to uninstall the previous driver completely
#ifndef USER_USB_RAM
#error "This example needs to be compiled with a USER USB setting"
#endif
#include "src/userUsbHidMediaKeyboard/USBHIDMediaKeyboard.h"
#define BUTTON1_PIN 11
#define LED_BUILTIN 33
bool button1PressPrev = false;
void setup() {
USBInit();
pinMode(BUTTON1_PIN, INPUT_PULLUP);
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
//button 1 is mapped to MEDIA_VOL_UP, refer to USBHIDMediaKeyboard.h for more media keys
bool button1Press = !digitalRead(BUTTON1_PIN);
if (button1PressPrev != button1Press) {
button1PressPrev = button1Press;
if (button1Press) {
Consumer_press(MEDIA_VOL_UP);
} else {
Consumer_release(MEDIA_VOL_UP);
}
}
delay(50); //naive debouncing
}
翻译一下英文,简单的来说就是定义引脚,然后识别是否按下,判断是否按下后发送给电脑相对应的字符。
如果需要修改发送内容,可以打开src文件夹中的USBHIDMediaKeyboard查看。
打不开可以下个VS Code看,或者Notepad++。
然后把例程中void loop中MEDIA_VOL_UP
改成你要的键命就可以了
或者直接改我的程序就行,主要就是一个键值的对照。
编译完成后我连上板子反正Arduino是没反应的,可以在文件-首选项-中打开显示详细输出-编译,可以就可以看到编译完成后的hex文件在哪了。
复制路径找到hex文件。
这时候要去下沁恒自带的下载器软件:https://www.wch.cn/downloads/WCHISPTool_Setup_exe.html
照这样选择,然后在用户程序文件中选择我们刚刚找到的hex文件
摁住短接按键或拿镊子短接,用Type-c先连接键盘和电脑,成功的话应该会在USB设备列表中出现CH552G什么什么的,接着点下载就行。
如果你懒得一次次点下载,你也可以把自动下载勾上,这样你一短接上电它识别到就自动下载了。
如果没识别的话可能还要装个驱动,我是说可能。
https://zadig.akeo.ie/下载,然后https://oshwhub.com/aihaodiylove/ch552g中提供的附件里有参考安装方式,可以去看一下。
下载完成后把Type-c拔了重插,电脑应该会识别,然后打开记事本或者键盘测试软件/网站https://www.zfrontier.com/lab/keyboardTester
就可以测试到底成没成功啦。
外壳结构
在主板和定位板上我开的都是M2尺寸的孔,如果买螺柱什么的别买错了。
底部支撑螺柱的厚度需超过Type-c母座/按键的厚度,4mm以上应该没啥问题。
关于定位板,从https://www.bilibili.com/read/cv14630975中我们可以了解到,键盘pcb上表面到定位板上表面的距离是5mm,立创pcb的常规尺寸是1.6mm厚,也就是说中间的间距剩下3.4mm。
所以我选择了3mm的螺柱以及0.3mm厚的垫片,留了0.1mm给尺寸误差。
注意底部支柱的螺纹长度和顶部钉子的螺纹长度加起来不能超过6.6mm
实测是可以装上去的,就是1.6mm的定位板会导致轴装的很紧,我的建议是买个好点的拔轴器,或者先不要装定位板。
购买的外壳物料清单:
后记
到这里这个键盘基本上就算是结束啦,虽然很简单,但也是我第一个成功的个人作品,总的来说还是有成就感的hhh。
如果有闲心的话可以画个外壳,也可以改ws2812b的rgb灯,这个的例程在GitHub作者的包里也有,找一下就行啦。
第一版小键盘就到这里了,不过已经在同时筹备第二第三代了哈哈哈哈哈哈。
那就祝大家天天进步不会秃头吧。
哈哈哈哈哈哈哈哈哈哈哈
对了bom表可能不太靠谱,不过元器件也不多,建议看着原理图自己实际用多少来买。
两块废板不用管,只是我留着做个纪念。正常打pcb跟定位板就行。
可以改掉pcb上的丝印,毕竟是我的名字还有我和我女朋友名字的缩写哈哈哈哈哈哈哈哈哈(狗头
#191970是色号,中文名幻影蓝,跟我名字很搭而且我也很喜欢蓝色。
目前上传附件包括:沁恒官网下下来的资料,GitHub上作者的压缩包,我本人的代码。
最后的最后再来点图吧
评论