OpenSplitDeck使用指南:DS4模式、触摸板手势与6轴陀螺仪操作完全详解
【免费下载链接】OpenSplitDeck
A steam deck-like controller made from a mix of off the shelf parts and 3d printed parts with custom hardware and firmware
OpenSplitDeck 是一款自制的 Steam Deck 风格模块化无线手柄,由左右两半独立模块 + USB Dongle 组成,通过 DS4(PS4 手柄)模式输出触摸板与 6 轴陀螺仪数据,让你用 Steam Input 手势层、陀螺仪瞄准玩到 PC 大作。本指南带你完整掌握 DS4 模式原理、触摸板手势映射与陀螺仪校准方法。
🎮 快速了解 OpenSplitDeck:拆成两半的 Steam Deck 手柄
OpenSplitDeck 的设计灵感来自 Steam Deck 和 Steam Controller:把一只手柄拆成左半和右半两个独立模块,通过 2.4GHz 无线链路(Enhanced ShockBurst 协议)汇聚到一个 USB Dongle,再由 Dongle 向电脑输出标准 HID 信号。
整个系统由 3 个固件模块构成:
| 模块 | 位置 | 职责 |
|---|---|---|
| 手柄半模块 ×2 | firmware/controller/ | 采集按键、摇杆、扳机、触摸板、IMU,无线发送 |
| USB Dongle | firmware/hid-custom/ | 接收无线数据,模拟 DS4 手柄 + 触摸板 + IMU 报告 |
| 构建资料 | Docs/、hardware/ | 构建指南 PDF 与 PCB 工程文件 |
几个核心硬件:每半各一颗 nRF52840 主控(Seeed XIAO BLE 板)、一块 Azoteq IQS7211E 电容触摸板、一个 DRV2605 触觉电机、一块 128×32 OLED 小屏(定义见 display.h),以及 6 轴 IMU(LSM6DS3TR-C)。
💡 左右两半之间还通过磁吸 Pogo Pin 触点连接,目前主要用于充电(见 README.md)。
🔌 DS4 模式:为什么选择模拟 PS4 手柄?
模拟 DS4 而不是 Steam Deck 手柄的原因
在 README.md 中作者解释得直白:模拟 DS4(DualShock 4) 可以原生启用 Steam Input 的触摸板手势层,而让系统识别为 Steam Deck 手柄的难度远超预期。因此 Dongle 在 USB 层面把自己伪装成一只标准 PS4 手柄:
- 设备 PID 被设置为
0x05C4(PS4 手柄编号),见 usb_hid_composite.c - 完整实现了 DS4 的复合 HID 报告:游戏手柄(Report ID 1)+ 触摸板坐标 + 6 轴 IMU 原始数据,报告结构见 usb_hid_composite.c
- 为兼容 DS4Windows,还实现了 MAC 地址等 Feature Report 应答(usb_hid_composite.c)
无线链路如何保证低延迟
手柄半模块与 Dongle 之间的通信经过精心调优:
- 2.4GHz 信道 50、2Mbps 速率、8dBm 发射功率,配置见 controller_esb.c
- 左右两半的发送周期错开 2ms,避免空中碰撞,见 main.c
- Dongle 通过 ACK payload 动态告知下一个包的发送间隔(默认 4ms),Dongle 侧以 250Hz(4ms) 向电脑输出 DS4 报告,见 main.c
接上电脑后的体验
- Windows:DS4Windows 可识别为标准 PS4 手柄,游戏内直接按 PS4 手柄操作
- Steam:识别为 DualShock 4,即可在 Steam Input 中启用触摸板层、陀螺仪层
- Linux:内核自带 ds4 触摸板扩展支持,同样可用
震动反馈(Rumble)是怎么实现的
DS4 的输出报告(0x05)会把震动强度回传给 Dongle,Dongle 再经 ACK payload 下发到两半手柄,由 DRV2605 电机执行震动效果。固件按强度分级调整脉冲频率(12/48/72/108ms 四档),实现从轻柔到强烈的平滑过渡,实现见 main.c。
👆 触摸板手势操作:双触摸板如何映射成一块 DS4 板
DS4 只有一块触摸板,而 OpenSplitDeck 左右各有一块 IQS7211E 触摸板(1024×1024 分辨率,驱动见 IQS7211E.c)。固件的巧妙做法是:把左右两块板合并到虚拟 DS4 触摸板的左、右两个区域。
- 右半触摸板 → 触摸点 1,坐标映射到右半区(+959 偏移),见 main.c
- 左半触摸板 → 触摸点 2,坐标映射到左半区,见 main.c
- 每帧还对坐标做 0.7 插值平滑,消除手指移动时的跳变,见 main.c
触摸板点击(Trackpad Click)
每半手柄的触摸板区域下方有物理按压开关(pad_click),按下时:
在 Steam Input 中玩转手势
由于输出的是标准 DS4 触摸板数据,你可以:
- 单指拖动:映射为鼠标移动 / 视角转动
- 双指滑动:Steam 手势层的标准双指操作(左右翻页、滚动等)
- 触摸板点击:作为右键 / 确认动作
- 触摸板 + 手指按压:组合触发高级手势
⚠️ 目前固件尚未实现独立的"gesture/tap/mouse/gamepad 可配置模式"(README 开发清单中标记为未完成),手势行为主要依赖 Steam Input 或系统驱动层面的配置。
🌀 6 轴陀螺仪:IMU 数据如何进入游戏
传感器与数据处理管线
右半手柄搭载 LSM6DS3TR-C 6 轴 IMU,数据链路为:
LSM6DS3TR-C (104Hz 采样)
→ 校准偏移扣除 + 静止漂移补偿 + 死区滤波
→ 指数低通滤波(alpha = 0.4)
→ ESB 无线上传至 Dongle
→ 写入 DS4 报告的 16 位 signed 陀螺/加速度字段
- 采样率与滤波参数定义在 imu_driver.c
- 漂移补偿:手柄静止约 20 个采样后,固件用 EMA(系数 0.01)缓慢学习陀螺零偏,静止判定容差 ±0.8 m/s²,见 imu_driver.c
- 只有右半手柄的 IMU 数据被采用(DS4 报告只有一个 IMU 通道),且 Y 轴做了反向处理,见 main.c
陀螺仪校准:3 秒组合键
校准由"摇杆点击 + 触摸板点击"同时长按 3 秒触发,屏幕显示校准进度,完成后写入 Flash 保存。相关逻辑见 main.c,数据持久化由 controller_storage.c 负责。
校准步骤:
- 开机后等待屏幕显示状态页(电量 + L/R 标识)
- 同时按住摇杆点击键与触摸板按键约 3 秒
- 屏幕切换到校准页:先保持手柄不动(归中阶段),再缓慢转动(运动阶段)
- 完成后自动返回状态屏,校准值永久保存
典型使用场景
- Steam 陀螺仪瞄准:FPS 游戏中微操修正,灵敏度建议在 0.1–0.3 之间
- 视角平滑:配合摇杆使用,比纯鼠标更细腻
- 体感操作:如《只狼》《对马岛之魂》的体感瞄准
🕹️ 按键布局与隐藏组合键速查
左右两半按键在 Dongle 端被映射为 DS4 标准按键(位映射见 button_driver.c):
| 物理按键(半) | DS4 输出 | 说明 |
|---|---|---|
| 十字键(左) | DS4 十字键 | 四方向 + 斜向 8 向支持 |
| 4 个面键(右) | A / B / X / Y | 右半的面键区 |
| 摇杆 ×2 | 左右摇杆 | 4 点滑动平均 + 指数平滑降噪 |
| 扳机 ×2 | L2 / R2 | 模拟量,20% 死区 |
| 摇杆点击 ×2 | L3 / R3 | 也可参与校准组合键 |
| 肩键 ×2 | L1 / R1 | |
| 触摸板按压 ×2 | Touchpad 键 | 带触感反馈 |
| 开始 / 选择(右/左) | Start / Select | |
| Mode 键(左右任一) | PS 键 | 长按还可调出模拟量调试屏 |
⚡ 实用组合键
| 组合键 | 效果 |
|---|---|
| 开始 + 肩键 长按 5 秒 | 进入低功耗睡眠(main.c) |
| 摇杆点击 + 触摸板点击 长按 3 秒 | 执行 IMU/摇杆校准 |
| Mode 键 长按 | OLED 屏显示模拟量调试数据 |
| 静置 5 分钟 | 自动睡眠(power_mgmt_driver.c) |
睡眠中任意唤醒键(Mode 键等)按下即可立即恢复,外设状态自动保存与恢复。
📚 遇到问题怎么办?
- 触摸板初始化慢/失败:固件内置最多 7 秒的 ATI(自适应阈值初始化)超时与 4 次写寄存器重试,见 main.c,重启手柄半模块通常可恢复
- 无线丢包:固件每 5 秒统计 Radio busy 比率并告警;保持 Dongle 与手柄距离 < 1 米、远离 USB 3.0 设备干扰
- 摇杆漂移:先执行一次完整校准组合键;触发调试屏(长按 Mode)查看原始 ADC 值排查硬件
- DS4 不被识别:确认 Windows 端已装 DS4Windows,或 Steam 中手动指定为 DualShock 4
🛠️ 更多资料入口
- 项目总览与开发清单:README.md
- 硬件构建指南(PDF):OpenSplitDeck_Build_Guide.pdf
- 左右手柄 PCB 图:LeftPCB.pdf、RightPCB.pdf
- 触摸板 PCB 图:TrackpadPCB.pdf
- 手柄端固件入口:main.c
- Dongle 端 DS4 报告构造:usb_hid_composite.c
- 3D 打印外壳与 STEP 源文件:
CAD/目录(含 OpenSplitDeckRawFiles.step)
OpenSplitDeck 目前处于 v0.2 早期阶段,仍在快速迭代——期待可配置手势模式、电容摇杆与更完整的 UI 配置工具加入。如果你想打造一只带触摸板与体感瞄准的"PC 版 Steam Deck"手柄,这套完全开源的硬件 + 固件方案值得动手一试!🚀
【免费下载链接】OpenSplitDeck
A steam deck-like controller made from a mix of off the shelf parts and 3d printed parts with custom hardware and firmware
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)