电路设计论坛
直播中

王晾其

7年用户 1016经验值
私信 关注
[资料]

构建一款USB键盘编码器

描述
J-ACE是一款 DIY USB键盘编码器。它允许您制作例如 USB 街机棒,或者您可以在专用的 MAME 机柜中使用它。它具有便宜且简单的硬件,易于自己构建。

特征
  • 16 个输入都有一个专用的微控制器引脚。没有重影、干扰或延迟。
  • 自动触发按钮的一个附加输入。Autofire 具有可调节的速度,并且可以配置为任何动作按钮组合。
  • 4 个 LED 输出。一个 LED 用于自动点火指示,另外三个 LED 用作数字锁定、大写锁定和滚动锁定 LED。
  • 全速 USB,更新速度高达 1000 Hz (*)
  • 高级去抖动功能,在按下和释放按钮时增加零延迟。
  • 用作标准 HID 键盘或标准 HID 操纵杆
  • 4 个独立的键盘映射,配置为 MAME 播放器 1、2、3 和 4。
  • 无需软件即可在不同的键盘映射之间进行选择或更改自动触发设置
  • 自动触发和键盘映射设置存储在 EEPROM 中,并在重启后保留
  • 用于键盘编码器模式的完整 NKRO(N 键翻转)。所有 16 个输入同时工作。
  • Shift 功能将每个按钮发送的键码加倍。允许投币器、暂停等 MAME 特殊功能,无需专用按钮
  • 适用于 Windows、Linux、Mac(标准 HID 设备,无需驱动程序)
  • 适用于所有主要模拟器(MAME、RetroPie 等)
  • 可升级固件(与 Microchip 兼容的 HID 引导加载程序)
(*) 似乎取决于操作系统。Windows 以 1000 Hz 轮询,Linux 和 OSX 以 500 Hz 轮询。

硬件
硬件基于 PIC18F24K50,这是一款集成全速 USB 的微控制器。电路尽可能简单,同时试图提供最佳性能。

PIC 在端口 B 集成了上拉电阻。端口 A 和 C 需要外部上拉电阻。外部上拉由电阻网络 RN1 提供。上拉电阻值并不重要,所以如果你找不到 4k7 网络,你可以使用 1k 到 47k 之间的任何东西。电容器 C3 不是强制性的。它保护 PIC 复位输入免受虚假毛刺的影响,这可能导致 USB 连接在嘈杂的环境中复位,至少在理论上是这样。

我的目标是使用全速 USB,这通常需要 μC 的硬件 USB 支持。Atmel μC 的软件 USB 实现没有任何 USB 硬件。我发现这些实现非常令人印象深刻。然而,这些目前仅限于低速 USB。低速 USB 支持 100 Hz 的最大更新速率。实际上,这可能并不重要,大多数 HID 设备都是低速的。但我想获得尽可能低的延迟。

该板使用所有通孔组件,因此很容易为初学者构建。操纵杆、按钮和 LED 的所有连接都有用于连接的螺钉端子。对于 USB 连接,有两种选择。默认为标准 USB-B 连接器,可满足大多数需求。也可以使用 5 针接头,该接头用于某些电缆或面板安装连接器,例如 Bulgin Buccaneer 系列面板安装 USB 连接器。下面 J-ACE 的 Eagle 3D 再现显示了带有标准 USB B 连接器的板。

固件
固件是用CCS PIC-C 编译器编写的。目标是将延迟降至最低。轮询间隔为 1 ms,即更新率为 1000 Hz。按钮读出、去抖动、移位功能、自动发射和数据传输最多需要 650 μs,因此 1000 Hz 恒定更新率是现实的。去抖动算法对每个按钮都有单独的计数器,这意味着每个按钮都会立即对按下或释放做出反应,而与其他输入无关。去抖是针对按钮的按下和释放实现的,因为一些微动开关类型在释放时也有触点弹跳。

源代码和编译后的 .HEX 文件可在下面下载。笔记!包中不包含 HID 描述符的 USB 头文件,因为它是根据 CCS 版权代码修改的。如果您有编译器并需要这些文件,请与我联系。
下载

j_ace_circuit_diagram.pdf      正如文件名所说。是电路图!
j_ace_assembly_drawing.pdf    J-ACE 装配图和材料清单。包括 TME、Digi-Key 和 Mouser 的订购代码。
j_ace_hw.zip                       用于 J-ACE 的 Eagle 5.12 原理图和电路板文件
j_ace_gerber.zip                    Gerber 文件。
j_ace_fw_v07.zip                       J-ACE 固件 v0.7。包括用于键盘和操纵杆模式的源文件和编译的二进制文件

引导加载程序已包含在 .hex 文件中。要进入引导加载程序模式,请在连接 USB 电缆时按住自动启动按钮。
如何构建它

本章描述了构建 J-ACE 所需的步骤。它假设您拥有基本的电子工具并知道如何使用它们。

焊接组件
组装 PCB 是一项非常简单的工作。元件位置标记在丝印上,但您也可以使用此装配图来查找哪个零件去哪里。组件 IC1 和 RN1 需要以正确的方向安装。引脚 1 标有点或凹口,它们必须与装配图相匹配。螺钉端子需要在焊接前相互连接。
对 PIC 进行编程

J-ACE 最常见的用途是街机摇杆或街机柜。我不会详细介绍如何构建街机摇杆,互联网上有很多可用的资源。我已经绘制了如何将操纵杆、按钮和 LED 连接到 J-ACE 的接线图,见下文。此示例接线图具有操纵杆、三个操作按钮、启动按钮、自动启动按钮和自动启动 LED。该图显示了一个单独的 LED,但通常您会使用发光的街机按钮作为自动开火按钮。然后 LED 接线将连接到发光按钮的 LED 端子。只需选择带 5V LED 的发光按钮即可。

从中可以看出,每个按钮微动开关和每个操纵杆微动开关的一个端子都连接到 J-ACE 上的 GND。J-ACE 的每一侧都有一个 GND 端子,您可以使用任何一个。如果您使用例如包含线束的 Seimitsu 或 Sanwa 操纵杆,则将方向输入旁边的操纵杆 GND 和按钮 GND 连接到另一侧很方便。它有助于保持布线更有条理。对于按钮接地接线,您可以获得预压接的菊花链线,使接线快速简便。

LED 连接在 +5V 和 LED 输出之间。LED 1,2 和 3 分别是 Num Lock、Caps Lock 和 Scroll Lock。LED4 是自动发射 LED。它指示自动开火何时处于活动状态,使用时显示自动开火速度,有助于配置自动开火。LED 输出可以最大下沉。25毫安电流。

如何使用它
J-ACE 将被识别为三个标准 HID 启动协议键盘或一个 HID 兼容游戏控制器,具体取决于加载的固件。它不需要任何驱动程序。
与键盘固件一起使用时,您几乎可以直接与 MAME 一起使用。在 Retropie 上,您必须像第一次启动时的任何键盘一样对其进行配置。
使用操纵杆固件,您通常需要从仿真器中选择 J-ACE。您不需要像旧的模拟 PC 操纵杆那样进行任何校准。

要在键盘模式下测试 J-ACE 的操作,您可以使用文本编辑器,但它并不能说明全部真相。最好的方法是使用键盘测试应用程序。一个例子是Aqua 的按键测试。这种应用程序可以显示多个同时按键的正确操作(称为 N 键翻转或 NKRO)。它们还可以分离左右 ctrl、alt 和 shift 键。如果您知道适用于 Linux 或 Mac 的优秀键盘测试软件,请告诉我。
另一种可能性是在线键盘测试,例如key-test.ru或keyboardchecker.com。它们还可以同时显示按键,但不能将左右 ctrl、alt 和 shift 分开。

要在摇杆模式下测试 J-ACE 的操作,可以使用操作系统提供的工具。
在现代 Windows 版本上,无法从控制面板轻松找到操纵杆校准应用程序。但它仍然存在,您可以通过按 Win+R 并键入 joy.cpl 并按 Enter 来运行它。或者在 Windows 10 上,只需打开开始菜单并输入 joy.cpl。
在 Linux 系统上,您可以使用例如 jstest 命令行工具。
更新固件并在键盘和操纵杆模式之间切换

J-ACE 使用引导加载程序,因此不需要 PIC 编程器进行更新。引导加载程序还允许在键盘和操纵杆模式固件之间进行切换。您可以通过在连接 USB 电缆时按住自动启动按钮进入引导加载程序模式。然后,您可以使用我的USB HID 引导加载程序页面上建议的更新工具。
使用和配置 Autofire

80 年代的许多操纵杆都配备了自动开火功能,有时也称为快速开火。它以高频率反复按下开火按钮,从而消除了射击游戏中的手动按钮混搭。它可以减轻手指的压力,让您可以集中精力控制角色并避免敌人的子弹。
J-ACE 有一个专用的自动开火按钮。建议还连接一个自动发射 LED。
按下自动开火按钮可激活自动开火模式。自动发射 LED 亮起,表示自动发射已开启。现在,当您按住按钮时,J-ACE 会以预定义的速率反复按下和释放它。自动点火 LED 以相同的频率闪烁,以直观的方式显示火速。再次按下自动开火按钮将禁用自动开火模式。
按住自动开火按钮 1 秒以上可以进入自动开火设置模式。自动发射设置模式由自动发射 LED 指示,该 LED 以当前发射速率闪烁。您可以通过向上移动操纵杆来增加发射率,并通过向下移动操纵杆来降低发射率。有五种速度设置,分别是:4 cps、8 cps、16 cps、31 cps 和 63 cps。Cps 表示每秒点击次数。以最快的速度,您可能再也看不到自动开火 LED 正在闪烁,但它似乎一直亮着。
您还可以配置哪些按钮启用了自动触发。退出自动开火配置模式时,按住这些按钮,然后短按自动开火按钮。当您现在按下自动开火按钮时,这些按钮会激活自动开火功能。所有其他按钮的行为正常。
请注意,如果您使用 Aqua 的 Key Test 或 Windows 游戏杆测试应用程序,它们将无法正确显示最快的自动开火速率。但实际射速仍然是正确的。如果您在记事本上测试每秒可以获得多少个字符(当然是在键盘模式下),您可以看到这一点。

配置键盘模式键盘映射
J-ACE 的键盘模式有四个预配置的键盘映射。这使您可以同时连接四个基于 J-ACE 的控制器并允许四人游戏。连接 USB 电缆时,您可以通过按住按钮 1 来更改键盘映射。这将进入键盘映射选择模式。该模式通过闪烁所有连接的 LED 来指示。现在您可以通过操纵杆选择所需的键盘映射。保持操纵杆指向所需方向并按下按钮 1。
  • UP 玩家 1 键盘映射
  • 适合玩家 2 键盘映射
  • DOWN 玩家 3 键盘映射
  • 左为玩家 4 键盘映射
目前,键盘映射是固定的。

移位功能
移位功能类似于键盘中的移位。它改变了其他按钮的作用。J-ACE 使用开始按钮作为换档。shift 功能允许用更少的按钮构建一个mame 控制器,因为您不一定不必为例如硬币接收器或其他与模拟器相关的按钮使用专用按钮。shift 功能使开始按钮的行为略有不同。正常的开始按钮键码是在您释放开始按钮时发送的,而不是在您按下它时发送的。如果您已将开始按钮用作 shift 发送一些其他键码,则根本不会发送正常的开始按钮键码。
移位功能仅在 J-ACE 配置为播放器 1 键盘映射时可用。使用移位功能发送的替代键码如上表所示。
摇杆模式还实现了换档功能。如果要在摇杆模式下禁用移位功能,请查看键盘映射配置说明。操纵杆固件中也提供相同的配置模式。配置为播放器 1 时启用移位。带有操纵杆固件的键盘映射配置模式除了启用或禁用移位功能之外没有任何其他效果。

PCB+展示









更多回帖

发帖
×
20
完善资料,
赚取积分