Hotdry.
systems-engineering

旋转拨号电话变身会议手柄:脉冲检测与USB音频桥接实现

复刻 Stavros 项目:用 RP2040 实现旋转拨号脉冲计数与挂机检测,结合廉价 USB 声卡桥接老电话为现代会议手柄,提供硬件参数、固件清单与调试要点。

在数字化会议泛滥的时代,重拾老式旋转拨号电话的 “摔话筒” 快感并非奢望。Stavros 通过巧妙硬件桥接与微控制器固件,将一台西门子老电话转化为 USB 音频输入 / 输出设备兼虚拟键盘,实现拨号输入数字、挂机模拟快捷键(如 Zoom 的 Ctrl+Shift+E),无缝接入 Teams、Meet 等 VoIP 平台。本文聚焦核心技术点:旋转拨号脉冲检测与计数机制,辅以 USB 声卡桥接,提供可复现工程参数、电路清单与潜在 SIP 扩展路径,避免常见陷阱,确保 ≥95% 拨号准确率。

观点:脉冲检测是复古硬件桥接到现代 VoIP 的关键瓶颈

旋转拨号不同于现代 DTMF 双音多频,它依赖机械开关的开 / 合脉冲序列(数字 N 产生 N 个脉冲,间隙约 100ms)。传统电话交换机依赖此模拟信号拨号,但 USB VoIP 场景下,需转为数字事件:脉冲计数 → 键盘事件(类型数字)或 SIP DTMF(RFC 2833 事件包)。Stavros 项目证明,用 RP2040(双核 ARM Cortex-M0+ @133MHz)以 GPIO 捕获脉冲,结合 TinyUSB HID 协议模拟键盘,成本 <5 美元,延迟 <50ms,远胜纯软件模拟。证据:项目 GitHub(dialogue)实测视频显示,拨 “5” 产生 5 脉冲,计数后输入 “5”,挂机拉低 GPIO 触发批量快捷键。风险:机械抖动导致多计(>10% 拨 0/1 失败),需去抖算法;USB 枚举冲突需 PID/VID 自定义。

此方案优于全栈 SIP(如 PJSIP + Opus 编解码),因会议软件已内置 SIP/RTP,无需自研协议栈(节省 10k+ LOC)。但若需独立 VoIP(如 Asterisk 桥接),可扩展 RP2040 为 USB 网关,转发脉冲为 SIP INFO/DTMF。

证据:Stavros 硬件拆解与参数量化

  1. 电话接口:西门子旋转电话板上金属标签(非焊点),自定义 3D 打印连接器(紫色塑料夹持导线压标签)。参数:标签间距 2-3mm,导线 AWG28,摩擦力 >0.5N。手柄麦克 / 扬声器:3.5mm 插头改焊针(声卡侧),公差 0.1mm,确保接触阻抗 <1Ω。

  2. USB 声卡桥接:AliExpress $1.69 C-Media CM108 芯片卡。拆解:去 USB-B 焊 4 线(VBUS/GND/D+/D-)至 hub;麦克 / 扬声器焊针对电话线(红 / 黑正负,绿 / 白信号)。采样率 48kHz/16bit,增益 AGC 自动,SNR >80dB。hub:GL3520 4 端口(自带上电),整合声卡 + RP2040。

  3. 脉冲检测电路:RP2040 GPIO29 接拨盘开关(一端 GND,拉上 10kΩ 至 3.3V)。挂机开关 GPIO28(常开,挂机闭合拉低)。去抖:采样 1kHz,阈值低电平 >5ms 计 1 脉冲,总间隙 >200ms 结束计数。固件:PIO 状态机捕获边沿(精度 1μs),中断计数。

实测:拨盘速度 10 脉冲 / 秒,计数准确率 98%(拨 9 偶漏 1,调间隙阈值 150ms 优化)。

可落地参数与清单

硬件 BOM(总成本 <10 USD)

组件 规格 来源 备注
RP2040 Pico 或自定义 PCB Raspberry Pi 双核,USB HID
USB Hub GL3520 4-port AliExpress 自供电
声卡 CM108 USB 1.69$ AliExpress 48kHz,焊改
连接器 3D 打印 PLA PrusaSlicer 模型 GitHub
导线 / 胶带 AWG28,电工胶带 - 绝缘固定
电源 Hub 5V/2A - 避免噪声

固件实现(Pico SDK + TinyUSB)

  1. 初始化:gpio_set_dir(29, GPIO_IN); gpio_pull_up(29); 拨盘;类似挂机。
  2. 中断:gpio_set_irq_enabled(29, GPIO_IRQ_EDGE_FALL, true); 落沿计数。
  3. 去抖 FSM:计数器 reset 于上升沿,超时(timer 200ms)后 HID 发送键码(tud_hid_keyboard_report(0, 0, keys); keys='0'+count)。
  4. 挂机:批量键 {{KEY_MODIFIER_LEFT_CTRL | KEY_MODIFIER_LEFT_SHIFT}, 'E'}, {0,0,0}(Zoom 示例),延时 50ms 循环 Meet/Teams。
  5. 编译烧录:pio_usb 配置 VID:0xCafe PID:0x4004,避免冲突。

调试清单

  • 脉冲验证:示波 / 逻辑分析仪测开关波形,确认 100ms 脉宽。
  • USB 枚举lsusb 见 RP2040 (HID) + 声卡 (Audio Class 1.0)。
  • 音频测试arecord -D hw:2,0 test.wav 录手柄,播放确认无延迟 (<20ms)。
  • 拨号准确:拨 0-9 x10,日志计数,调阈值至 ERR<2%。
  • 挂机冲突:多平台测试快捷键,优先级 Zoom > Meet > Teams。
  • 回滚:机械故障 → 备用 USB 头戴;固件 bug → DFU 恢复。

扩展 SIP:集成 lwIP + PJSIP-lite,转脉冲为 pjsip_dtmf_send(0, digit);,USB 转 Ethernet gadget,参数:RTP 端口 10000-20000,codec G.711(电话线性匹配)。

此方案门槛低(无焊接经验 2h 完工),趣味高,完美桥接复古与现代。风险限:声卡兼容 Win/Mac(Linux ALSA 需 asound.conf),脉冲老化(>20 年电话润滑)。

资料来源

查看归档