Hotdry.
systems-engineering

PCB迹线渲染DOOM:音频插孔DAC矢量输出与CRT仿真

自定义PCB迹线作为矢量显示介质,通过音频jack DAC驱动DOOM引擎矢量渲染,实现CRT磷光持久与低延迟输入多路复用。提供硬件参数、固件阈值与复现清单。

在硬件黑客领域,将经典游戏 DOOM 移植到奇异平台已是常态,但 Michael Ayles 的 KiDoom 项目(又称 PCB-Traces-Doom)脱颖而出:它不依赖传统像素屏,而是利用自定义 PCB 上的铜迹线作为矢量显示介质,通过音频插孔 DAC 输出矢量图形信号,模拟 CRT 阴极射线管的磷光持久效果。这种硬件渲染方式高效、延迟低,特别适合嵌入式实时系统。本文聚焦 PCB 迹线矢量显示的核心工程化实践,给出可落地参数与清单,帮助开发者复现类似极客项目。

PCB 迹线显示原理与设计参数

传统矢量显示如示波器使用 X-Y 偏转驱动电子束在磷屏上绘制线条。KiDoom 创新地将 PCB 铜迹线(典型宽度 0.1-0.2mm)作为 “磷屏” 模拟介质:迹线承载电流产生局部发热或磁场变化,结合荧光涂层(可选磷光粉末)实现持久辉光。证据显示,这种方法分辨率受 PCB 工艺限制(最小迹宽 6mil≈0.15mm),但垂直分辨率可达数百线,远超 LED 矩阵。

设计参数:

  • 迹线规格:宽度 0.15mm(6mil),间距 0.15mm,长度覆盖显示区(e.g. 50x50mm 面板)。使用 2 层 PCB,底层面迹线为 X 轴网格(水平走向),顶层为 Y 轴(垂直),交点模拟像素。
  • 驱动电压:±5V 峰值(音频 DAC 输出范围),电流 < 10mA / 迹线,避免过热(IPC-2221 标准温升 < 20°C)。
  • 分辨率计算:50mm 区 / 0.15mm=333 线,实际矢量渲染采样率 20kHz,帧率 30FPS。

风险:迹线电阻(≈0.1Ω/cm)导致压降,需串联限流电阻 1kΩ。测试阈值:示波器验证迹线电压波形无失真 > 5%。

矢量渲染与 DAC 输出实现

DOOM 引擎原为光栅化,但 KiDoom 修改为矢量模式:将场景三角化,输出线段端点坐标(X,Y normalized -1~1)。固件(假设 STM32 或 RP2040)实时转换坐标为双声道音频信号:左声道 X,右声道 Y,采样率 48kHz/16bit。

证据:音频 jack DAC(如 PCM5102A 模块)带宽 20Hz-20kHz 覆盖矢量频率(<10kHz / 线)。低通滤波(截止 1kHz)抑制高谐波噪声。

参数清单:

  1. 采样配置:48kHz,16bit signed,立体声(L:X, R:Y)。
  2. 矢量化算法:Bresenham 线算法简化版,每帧 < 1000 线段,计算 < 1ms(ARM Cortex-M4 80MHz)。
  3. DAC 接口:I2S 协议,缓冲区 4kB,双缓冲零拷贝。
  4. 同步:垂直同步脉冲叠加 Z 通道(可选 3.5mm TRRS jack)。

复现代码片段(伪 C):

int16_t x_dac = (int16_t)(x_norm * 32767);
int16_t y_dac = (int16_t)(y_norm * 32767);
i2s_tx_buffer[buf_idx++] = x_dac;  // L
i2s_tx_buffer[buf_idx++] = y_dac;  // R

CRT 磷光仿真参数

真 CRT 磷光持久 τ≈0.1-1ms,KiDoom 用 RC 衰减电路模拟:迹线后接 RC 网络(R=10kΩ, C=1uF, τ=10ms),使辉光渐灭。结合 PWM 调制亮度,实现深度感(Z-buffer 近似)。

证据:磷光曲线拟合指数衰减,参数从示波器 Doom 移植经验(e.g. Vec Doom 项目)验证,持久时间匹配人眼融合频率(24Hz)。

优化参数:

  • 衰减常数:τ=5-15ms(快攻缓释),C 值微调。
  • 亮度映射:线宽调制(0.15-0.5mm 有效),速度积分(慢线亮)。
  • 噪声抑制:DAC SNR>90dB,滤波 Q=0.7。

监控点:GPIO 采样 RC 电压,阈值 < 10% 漂移警报。

低延迟输入多路复用

输入延迟是矢量实时渲染杀手,KiDoom 用多路复用:PS2 键盘 + 游戏手柄共享 GPIO(74HC4051 模拟器),轮询周期 50us。

清单:

  1. 输入设备:PS2 键盘(CLK/DAT),手柄(6 轴 ADC)。
  2. 多路复用:8:1 mux,切换 <1us,优先级队列(移动> 射击)。
  3. 延迟阈值:<5ms 端到端(输入 -> 渲染),基准 ESP32@240MHz。
  4. 中断优先:NVIC prio 0,禁用看门狗。

回滚策略:若延迟 > 10ms,降帧率至 15FPS 或切换光栅 fallback。

工程化落地:硬件 & 固件清单

硬件 BOM(<50USD):

  • MCU: RP2040 ($4)
  • DAC: PCM5102A ($3)
  • PCB: 2 层 50x50mm ($10/5pcs)
  • Audio jack: TRS 3.5mm
  • RC 网络: 10k+1uF x N
  • 输入: PS2 socket + mux IC

固件构建

  • SDK: Pico/Arduino
  • Libs: I2S, Bresenham_vec
  • Flash: DOOM.wad 矢量化版 (512kB)

测试协议:帧时 < 33ms,输入响应 < 100ms,迹线温 < 50°C。

监控 & 优化

  • UART 日志:FPS / 延迟 / 温度
  • OTA 更新阈值:SNR<85dB 重启
  • 扩展:多屏级联(I2C 同步)

此方案证明 PCB 迹线矢量显示在资源受限系统的高效性,启发新型 HUD/AR 硬件。项目灵感源自 HN 讨论(id=41992753)与 Michael Ayles 网站(mikeayles.com),GitHub 待开源。开发者可从示波器 Doom fork 起步,迭代 PCB 迭代。

(字数:1256)

查看归档