请选择 进入手机版 | 继续访问电脑版

你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】如何DIY一款属于自己的HID键盘?

[复制链接]
STMCU小助手 发布时间:2022-6-21 21:42
这是一个自定义游戏键盘,带有四个热插拔机械键和可自定义的RGB LED。它由STM32F103Cx微控制器供电,并通过Arduino IDE进行编程。
3 W0 H2 x* {* O, @4 w- y! I
文章末尾分享该项目资料。

+ K& K3 y6 ^0 r& W% ?- [
功能概述:
  • 快速STM32F103Cx微控制器可实现低输入延迟。
  • USB全速,轮询速率为1000hz。
  • 可热插拔的键。
  • EEPROM设置存储。
  • 动态密钥自定义(使用Windows用户的GUI)
  • 具有添加更多功能的三种RGB模式。
  • 完全开源。
  • 兼容Arduino。
  • 模块化且易于携带。

    6 N: `0 v5 X: \4 |% B, ^  g, v6 |
    8 d+ b* [4 _' [+ `7 u) G
设计框图
~V@BC@OE{E66FP0%7M1Z_K1.png
# v& n4 i2 ^3 W8 _4 w  P+ g
键盘使用STM32F103C8T6作为控制器。由于USB端口上的电源引脚为5V供电,但是该款单片机需要使用3.3V电源供电,因此需要将5V转为3.3V,项目中使用MCP1703T来实现该功能。使用Cherry MX风格的机械开关来作为键盘的按键。另外,还可以通过按键来控制LED的模式、颜色、亮度。
4 g! e% s4 Y& d+ g2 e! c
系统原理图
$%HU1O[K0U{L4DGKU}~O)DB.png

$ A5 \9 ]) }7 F9 W系统PCB1 n2 X- S+ Y$ l* V& G; Q) s: J/ N: }
- O& \. K* l' r  {
PCB大小为58mm x 59mm。为了能够方便手工焊接,所有的SMD器件均使用0805封装。
! h( r! s& H4 Q; I' }/ u) l& ~, k
Y`]O7JK(}EN8196H23V~]LC.png
7 Q3 l2 [0 C- s3 C$ \( t- J
硬件上提供了STLINK下载接口:
  • SWDIO-SWDIO
  • SWCLK-SWCLK
  • GND-GND
  • 3V3-3.3V

    1 l) i' f9 R/ {4 {2 t2 e& l& U
    * r: m, s. R, Z9 A/ G  P
材料清单:
  • 1个STM32F103CxT6
  • 2个7.3mm高的触觉开关
  • 4个反向安装4-PLCC LED
  • 6个0805 10K欧姆电阻
  • 4个0805 68欧姆电阻
  • 5个0805 1.5K欧姆电阻
  • 3个N沟道SOT-23-3 3.3V电平MOSFET
  • 3个0805 100nF电容器
  • 2个0805 1uF电容器
  • 2个0805 20pF电容器
  • 1个0805 4.7uF电容器
  • 1个MCP1703T-3302T / DB 3.3V稳压器
  • 1个1210 500mA PTC自恢复保险丝
  • 1个USB3090微型USB A / B端口
  • 1x 90度接头排
  • 1个8MHz HC-49晶体
  • 4个圆形橡胶保险杠
  • 4个Kailh热插拔插槽
  • 4个Cherry MX RGB或同等开

    ) {2 u8 f0 e' v9 ~$ C
    ! o3 g* T; f% A( L9 V

5 h/ z- M' q& h! d/ y安装STM32Duino
打开arduino ide,打开首选项

3 O6 n7 s' y3 g6 [
6$SO43[Z}5Z{07F(O$E6.png

0 g  B( F4 o6 r: q3 w8 O5 ]: v
添加完成之后,打开开发板管理器,搜索STM,安装STM32F1xx/GD32F1xx
3 L2 g( ]8 ?: r0 g! U& l
7N3NS1FHT85}GO6M5)}PRMS.png
8 ?; Q( F; Y& \' `
STM32Duino内的USB库已经提供的USB HID功能,但其轮询间隔为10ms,因此我们还要对其进行修改。
  • 进入目录C:\Users{username}\AppData\Local\Arduino15\packages\stm32duino\hardware\STM32F1{版本名称}\libraries\USBComposite下,打开usb_hid.c文件
  • 搜索bInterval,将该值修改为0x01。轮询间隔修改为1ms
    & s  [" O" \4 _4 g+ l
. }9 ?% p9 s- T8 n' O. l3 G3 l  x
AT%NFX7_O_44N3IV[7Q`00K.png
9 \8 z# c0 v2 o3 \' \- Z4 H9 R8 j3 j
代码配置说明
  • 去抖时间5 W! S7 {$ Q& ^, D
    这是检测到按键后按键拒绝注册按键释放的时间。需要一个反跳时间,因为机械开关在按下后自然会“反跳”,如果不使用反跳计时器,可能会在很短的时间内记录多次错误的按键。在这种情况下,设置防抖计时器的方式不会影响延迟,因此更改此值不会使按键延迟更多。Cherry指定反弹时间为5毫秒,该值应适用于大多数机械开关。
  • RGB LED
    * [, e5 t: R) M% D4 J/ W禁用此选项将禁用所有与RGB LED控制有关的代码。这可能会节省一些CPU周期,但不足以有效地更改键盘的性能。
  • 串行通讯# L/ n! l, l: T/ K) S9 ]
    禁用此选项将不允许通过串行或驱动程序软件对键盘进行编程,但是由于微控制器不再需要不断侦听串行命令,因此它将节省一些CPU周期。尽管理论上微控制器在不启用串行的情况下应该运行得更快,但是速度差异可以忽略不计。
  • RGB LED颜色和图案
    - L( F0 ~9 p5 P如果需要修改RGB LED颜色,则必须直接编辑代码。在checkRGBMode()函数下定义的颜色存储所有的灯光模式0颜色(静态),而incrementColor()下的颜色存储灯光模式2(颜色循环)颜色。
    6 ~+ b3 W1 S# q! ?7 `. e$ `更改颜色,只需更改rgbBrightness []值。这些值以百分比表示该颜色的亮度,其中0为0%,1为100%。rgbBrightness []中的1-3数组分别表示红色,绿色和蓝色。
  • ledDelay:
    + P% u8 K! g. s% Z这表示在灯光模式2下颜色切换过程之间的延迟,这意味着如果延迟较高,则颜色将缓慢切换,而如果延迟较低,则颜色将更快切换。
  • colorIncrementDelay# x- E; y7 L0 k3 `3 \& u7 D
    这表示在灯光模式2下切换颜色之间的时间。

      F  G! b# U  s! x, e+ M

    + c: Q4 j, i" X  i. l
使用键盘
: H# G7 k# }6 u' f; l# N
LB$VE73(0ICQIEK`OOS_18U.png

- k) j0 }" C( ^- {  ~2 ^) F1 ]
  • 该键盘的使用非常简单,直接插入电脑USB口,即可作为正常,低延迟,轮询速率为1000hz的HID键盘使用。同时,还可以通过按键修改LED的模式和颜色。
  • 按键说明:
    ( B0 }/ \5 j# Q7 V5 M5 h

    , K9 l2 i, X+ a% `' @# J$ K( S9 i
  • 按下模式按钮的时间少于0.3s会更改照明模式。
  • 按下按钮超过0.3s但少于5s会更改LED颜色,可以通过代码进行自定义。
  • 按住按钮超过5s将开始改变LED的亮度,并且按住按钮时亮度将以1s的增量下降。亮度将在释放按钮时设定。

    - C5 C% V0 @7 r) Q$ _2 O7 R

    ' _& q% W4 H; ?$ E0 h, U+ N) b
  • 灯光模式:
    " Y7 a' r$ n$ g& b
    : E5 |1 N4 L" {$ d# Q6 P
  • 静态色
  • 按下键时点亮
  • 交替(默认固件在红色和蓝色之间,但是可以有多种颜色)
    3 n8 T/ b+ T) h9 \  @$ I* |% t
    $ k( N3 P; o% b7 i6 \1 r# O
  • 系统的所有配置信息都是存放在EEPROM中。

    & d7 l4 a3 m! G( }. v$ |5 ?

    / l! k' D' ^( R  P' _, f) a
4 i2 v) {# [, [0 ~
配置按键
若想能够随时、方便的修改按键对应的键值,则需要开启程序中的串口通信功能。有了该功能后,系统将可以通过串口命令对其进行配置。也可通过上位机软件对其进行配置
  • 串口命令:"s:{key number}:{character}:"

    3 h9 T* j) ~5 D4 n
  • "s:1:k:",将按键1设置为k

    * V. V: I6 h) ]/ `
  • 使用上位机软件
    # p, t7 w5 F  \, ]3 U9 L+ i

    - v: W0 @: x' d8 U" p
{532M]S088Y%4}DL4U7J}(H.png

4 X! @. |0 f( R9 c上位机软件说明
( ]0 g8 K0 P' P, X' {9 x8 U
%A%V98`FC~WL410EHA]RNZ0.png

" a* V0 t5 M! u- d
  • 连接设备后,可以使用该程序即时设置按键绑定。为此,请使用名为"keybinds"的面板。您可以通过下拉菜单(参考帮助-键映射的键映射)选择键编号,然后可以通过文本框输入键绑定值。目前仅接受Ascii字符和数字,不幸的是,冒号不是可行的选择,因为它被用作分隔符。如果要禁用该键,只需在文本框中什么也不放,然后按set键即可。
  • 填写完两个选项后,只需按设置按钮,如果一切顺利,就可以设置按键绑定。即使断电,此新设置也将保存在微控制器上。
  • 原始序列号和状态
    9 p8 a7 O- Z5 x* _这两个部分用于诊断目的。原始串行是设备发送回的串行数据的显示,状态面板显示了存储在设备上的不同设置。
      e( w, ^  p. Y

    $ F% I3 H: b( d' A# w& d# P0 ]& s4 z. i' ]
组装
  • 效果图

    - z0 I2 E+ Y( W0 H0 Y
    4 O/ D. W8 P7 z2 S9 |$ o1 s- h& z
97F2JIA}4CVDPO$CWSPBNHA.png
  • 底板
    }{[{SSDQLF$P)~U2YPU0C$N.png
    - T1 }/ ]& S! g- z# L+ m9 q

$ e" a( S8 `0 {, v2 z+ c$ @2 H( z6 X
  • 实物图

    ; c' l. }7 X4 {1 a+ T9 R+ Q0 c9 O% h
    ~4J%M~XJLQAU8XH86ZHCA~O.png 4 L: l% P6 Y: l( @$ \% K2 b8 Y* [

) [0 ]& g# @/ Q) J' s& J( X
公众号后台回复:stm32键盘   即可获取全部设计资料。

7 m' y6 I1 Z+ x9 e/ d1 C" ?
$ s: W' s) A0 z8 X
收藏 评论0 发布时间:2022-6-21 21:42

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版