修复2.58美元HDMI转VGA适配器上的模拟音频问题

Hacker News Top 工具

摘要

关于诊断和修复超廉价HDMI转VGA适配器上模拟音频噪声问题的详细指南,涉及阻抗分析、滤波和PCB返工。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/07/07 20:14

# 修复 2.58 美元 HDMI 转 VGA 适配器上的模拟音频问题 来源:https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/ 作者:nyanpasu64,2026 年 7 月 4 日 我最近购买了一个超便宜的 HDMI 转 VGA DAC,想将我的 Nintendo Switch 连接到我的 CRT 显示器和外置音箱上。不幸的是,它的音频输出插孔给我的音频混音器以及电脑的麦克风插孔带来了严重的噪声问题。我花了几天时间诊断阻抗问题,为 delta-sigma 音频 DAC 制作滤波原型,并重新调整 PCB 元件,以利用现有硬件达到最佳音质。 ## 前传:修复我的旧款 HDMI DAC 在购买音频 DAC 之前,我最初计划通过我的 ICY-Box HDMI 转 VGA DAC 将 Switch 底座连接到视频输出。在修复 I2C 飞线时,我损坏了板上的几条走线并丢失了一些元件,不得不通过在 GIMP 中追踪 I2C 线路来重建它们,以了解其功能。(DAC 的 HDMI 输入是一个 I2C 从设备,SDA/SCL 线路上有高阻抗上拉电阻连接到 5V,我忽略了这些电阻,并且还有低阻抗电阻连接到芯片以将总线拉低。) 我借此机会练习微焊接,使用了 NH 推荐的 (https://hardware.hacks.guide/wiki/Guides/Recommended_Tools) 磁线和 3 秒阻焊剂 (https://www.youtube.com/watch?v=x46ubxf8Th4),之后才将其用于 Switch 破解芯片的安装。36 号导线很有用,因为其漆包绝缘层比 Kynar 更不易熔化,而且导线足够粗不易折断,同时细到基本不会扯掉焊盘。阻焊剂可以覆盖我不想焊接的裸露焊盘;我还在附近工作时用它来固定“已完成”的焊点和导线,不过它对 PCB 的附着力较差。也许我需要更好地清洁和打磨表面,或者尝试 YCS 的 3 秒阻焊剂而不是 Relife 的? - 在根据照片追踪 PCB 时,我多次搞错,因为在翻转顶层和底层时读取了错误的 PCB 方向。下次我可能会使用 KiCad 的参考照片功能来符号化地建模 PCB,而不是用 GIMP 铅笔工具追踪走线。 ## 将 Switch 连接到我的音频混音器 令人惊讶的是,设置中最难的部分是将我的主机连接到外置音箱。ICY-Box DAC 没有音频输出(据我所知,ITE IT6892FN 芯片不输出模拟音频),而 Switch 的耳机插孔给我的音频混音器 (https://codeberg.org/nyanpasu64/mixer-3.5mm) 和音箱带来了烦人的干扰。经过几个小时的排查(拔插和更换各种线缆和元件),我最终得出结论:当 Switch 连接到地环路且未处于睡眠模式时,其音频电路会拾取 60Hz 的嗡嗡声并将其放大到输出中。 在网上询问后,我收到了大量建议,可行性各不相同。 - 地环路隔离器使用变压器来传递电路段之间的电压偏移,同时隔离地线。- 我读到小型隔离器往往会衰减低频信号(如低音),而大型隔离器价格昂贵。也许一个便宜的地环路隔离器仍然值得考虑? - 将我的音频设备转换为平衡差分音频可以避免地环路;这是专业音频调音台采用的方法。- 但设备似乎很贵,而且 DI 盒通常将电压降低到麦克风电平(这似乎适得其反,因为它*增加*了噪声敏感度)。 - 另一个选择是 HDMI 音频提取器,但 chaos(👋)告诉我,它尝试过的每个 AliExpress HDMI 转 3.5mm 或 TOSLINK 提取器质量都很差,而发烧级产品价格昂贵。- 在我的研究中,大多数 HDMI 音频提取器都是完整的比特流接收器的一部分,这些接收器也处理视频信号。也许仅仅*提取*数据岛并转换为模拟或 S/PDIF 音频同样昂贵? - 负反馈音频光隔离器有两个接收器,LED 被驱动使得两个接收器的电压与输入电压匹配。- 1BitSquared Discord 服务器劝阻我不要使用它们,但我不知道为什么。 - 我研究过将地线和两个音频信号作为差分放大器的输入进行处理。我放弃了这个想法,因为我不知道如何使其在输入超出运放供电轨的情况下工作,而且共模噪声抑制可能很差。 我找到的最简单的解决方法是,将 Switch 的音量调到最大(关闭耳机音量限制器),这样游戏音频会比地环路嗡嗡声更响,然后在混音器上降低音量。但我仍然需要在每次将主机放入或取出底座时插拔耳机插孔,并且我担心这会长期损坏主机的音频放大器。我还测试了苹果的 USB-C 音频转接头,但没能从中获得音频输出。 (我在将“朋友”的 Switch 2 连接到我的混音器时也遇到了同样的音频嗡嗡声,但当时我将其归咎于我的第三方 HDMI 转接器。顺便说一句,在任天堂起诉 Switch 模拟器开发者之后——他们滥用公司法律预算,针对法律保护的活动 (https://en.wikipedia.org/wiki/Sony_Computer_Entertainment,_Inc._v._Connectix_Corp.) 威胁独立开发者个人破产,以填充公司金库,并且继续对 fork 进行 GitHub 下架——我永远不会再买他们的新游戏主机。) /crt/ Discord 服务器推荐了一个带有 3.5mm 音频输出的 AliExpress VGA 转接器 (https://www.aliexpress.us/item/3256806185045998.html),价格为 2.58 美元加运费。(价格随时间略有波动,目前为 2.71 美元,不包括临时的 7 月 4 日促销。)一周后转接器到货,我将 VGA 输出插入视频切换器,将 HDMI 输入连接到 Switch 的视频输出,将音频输出连接到我的音频混音器……然后听到了我 Switch 发出的最糟糕的噼啪声。 困惑之下,我将其连接到电脑,通过主板麦克风插孔捕获音频。我发现了奇怪的现象:当我把 Realtek 音频的麦克风增强设为关闭时,噪声几乎听不见;但当我把麦克风增强设为 +30 dB 时,噪声完全淹没了正常声音(即使我调低音量使游戏音频处于正常水平)。此时,我怀疑音频转接器要么在输出超声波谐波,要么其放大器在麦克风增强改变麦克风插孔输入阻抗时发生了失真。 Audacity 频谱图模式截图,显示一系列音调随后是频率下降的噪声扫描。(https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/noise-sweep.png)当我按下 Switch 控制器的 Home 键且音频淡出时,随着音量衰减到静音,我得到了一个下降的噪声扫描。为了测试阻抗理论,我用示波器测量了主板音频输入与地之间的电阻。烦人的是,输入引脚有超过 2 伏的恒定直流偏移,当对地短路时消失,但移除短路后片刻又出现。这让我无法正确测量阻抗。但我没有气馁,双向测量了电阻,发现一路为开路,另一路为 300 欧姆。重要的是,这个测量结果在切换麦克风增强级别时*没有变化*。此时,我不得不用示波器检查信号问题。 ## 用示波器探测音频 我将音频输出插入一个分线电缆,用示波器探测裸露的导线头。然后发现了令人震惊的 500-600 mV 噪声覆盖在音频上,谐波高达 50 MHz。 Rigol DS1054Z 示波器在触发模式下的照片,显示许多轨迹叠加。垂直刻度为 100 mV/格,水平刻度为 20 ns/格。信号高度接近 7 格(700 mV),周期在水平方向为 4 格(80 ns),但波形充满了比 1 个周期更细的波动。(https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/oscilloscope%2020ns.webp)sigma-delta DAC 的原始输出峰峰值幅度超过 600 mV,周期约 80 ns,但充满了周期低至 20 ns 的子振荡。这里无法辨认原始比特。Rigol DS1054Z 示波器屏幕照片。垂直刻度为 100 mV/格,水平刻度为 1 ms/格。信号高度为 5 格(500 mV)。(https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/oscilloscope%20fadeout%201ms.webp)这是捕获一个几乎静音的音乐淡出,但你仍然可以看到 500 mV 的噪声以及 sigma-delta 比特流不同域之间的毛刺过渡。所以,我确认了音频问题的*确*是 MHz 范围内的超声波 DAC 开关噪声,被非线性放大器调制成了可闻失真。 此时我打开转接器看看里面是什么芯片。照片显示芯片是 NX3303X;我找不到任何数据手册,但一个中文网站 (https://www.xcc.com/news/detail/5573530) 有该芯片的框图和引脚图。 NX3303X 芯片的引脚图。它是一个方形 32 引脚 QFN 芯片,每边 8 个引脚,外加一个接地的 EPAD。音频输出 AOUTL/R 位于右侧底部的引脚 17-18。(https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/nx3303x.png)我的 HDMI DAC 上 NX3303X 芯片的引脚图。搜索其他使用该芯片的用户时,我发现了 c0pperdragon(因 Lumacode 而闻名)的 HDMI2SCART 项目 (https://github.com/c0pperdragon/HDMI2SCART)。这个 PCB 使用的芯片大多是从像我这样的 AliExpress DAC 上拆下来的,并且同样将音频输出直接连接到扬声器(通过隔直电容,但没有高频滤波)。后来我得知他也遇到了和我一样的音频问题,并且不得不在芯片输出与地之间添加电容 (https://github.com/c0pperdragon/HDMI2SCART/issues/6#issuecomment-4582824137)。 浏览仓库的问题追踪器时,我看到了问题“哪里能买到 NX3303X?” (https://github.com/c0pperdragon/HDMI2SCART/issues/1)。这个线程揭示 MX9291 是另一种集成音频输出的 HDMI 转 VGA DAC 芯片。在网上搜索 NX3303X 时,我还找到了 MX9291 的宣传材料 (https://en.eeworld.com.cn/bbs/thread-1298314-1-1.html),称该芯片可以替代 NX3303X 并带有 sigma-delta DAC,这表明 NX3303X 也同样如此。然而 MX9292(和 9291)的引脚排列与我手上的芯片不同,所以我没有进一步研究。 MX9292 芯片的引脚图。它也是一个方形 32 引脚 QFN 芯片,每边 8 个引脚,外加一个接地的 ePad。与 NX3303X 不同,音频输出 AUD_R/L 位于引脚 22/24。该图相对于 NX3303X 逆时针旋转了 90 度,因此音频位于顶部的左侧。(https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/mx9292.png)MX9292 芯片的引脚图。引脚位置完全不同,包括音频。 ## 构建低通滤波器 要修复音频播放,我需要设计一个低通滤波器来滤除开关噪声。 在设计信号滤波器时,通常建议绘制波特图来显示滤波器的频率响应。我找到了一个波特图生成器 (https://bodeapp.simonebertonilab.com/),它通过评估滤波器在频率扫描中的复数传递函数来绘制精确曲线。 为了模拟截止频率为 50 kHz 的一阶 LPF(低通滤波器),我绘制了 `1/(1+s/50000)`,频率从 `10000000`(10 MHz)向下扫到 `10000`(10 kHz)。然后我们可以检查在 20 kHz(理想人耳听觉上限)处损失了多少高频,以及在 5-10 MHz(DAC 的大致开关频率)处抑制了多少开关噪声。 - 附注:`s` 标准的单位是虚数弧度/秒,但我们可以假装它是周/秒,因为传递函数是单位不变的。 现在我们已经确定了 50 kHz 的截止频率,开始寻找方便的电阻和电容值来达到这个截止频率。(注意,这完全行不通,原因很快就会清楚。) 要计算 RC 滤波器的截止频率,可以使用 `f = 1/(2πRC)`。代入 `qalc`: ``` > f = 50 kHz > R = 31 ohms > 1/(2pi R "C") = f C ≈ 102.6806084 nF ``` 所以我们可以串联一个 31 欧姆电阻,然后接一个 100 nF MLCC 到地。这会带来一个问题:X7R 陶瓷电容会将振动转化为信号,但在玩游戏时没人*这么*在意音质,而且我们还有时钟抖动需要担心…… 我将发现报告给了 HDMI2SCART 仓库的一个问题 (https://github.com/c0pperdragon/HDMI2SCART/issues/6)。作者很快回复说,他需要添加滤波电容来阻挡 DAC 噪声。有趣的是,他发现*没有*滤波电阻的情况下,10 nF 甚至 1 nF 的电容就足以阻挡开关噪声。(伏笔……) ### 附注:音频时钟抖动 在用示波器探测滤波后的波形时,我注意到波形的周期存在相当大的抖动(尽管在 Audacity 中播放前它们是整数个采样点)。这意味着 DAC 的音频输出有明显的采样时钟抖动,使采样点相对于“真实”采样率(例如每 1/48,000 秒一个采样点)在时间上前后偏移。 这是一个本应稳定的锯齿波,但不同部分以不同速度播放。位移带似乎从右向左移动。抖动为什么会发生?我没有直接证据,但一些可能性包括: - 它将每个消隐期内的音频采样点拉伸到下一行扫描上,即使采样点数量不恒定。 - DAC 使用不稳定的振荡器或 PLL 来计时采样输出。 - DAC 根据从 HDMI 收到但尚未播放的采样点数量不断调整音频播放速率。- 这可以解释我偶尔听到的音频间隙;当 DAC 播放过快以至于采样点耗尽(欠载)时,它必须等待新的采样点到达。 我的理解是,为了减少抖动,最好重新生成一个稳定的音频时钟,并使其与通过 TMDS 消隐期到达的音频保持松散同步。我曾在 audiosciencereview 等地方看到过 HDMI 重锁的讨论,但怀疑其中很多是骗人的。 无论如何,对于测试音调或游戏音频,抖动不会产生任何*可闻*问题,整体音频输出“足够好”用于游戏,尽管音量和偶尔的音频间隙问题依然存在。我猜你花了 3 美元买 HDMI DAC,也就只能得到这样的表现。 ### 确定开关频率 此时,主要是出于好奇,我想描述滤波后音频信号的特性。我会先找出开关噪声的频率,以便更好地理解 delta-sigma DAC 并选择最佳滤波器截止频率。 Rigol 示波器截图。水平刻度为 20 ns/格,垂直刻度为 50 mV/格。输入 1 显示一个方波,周期为 76.80ns,幅度 175mV。输入 2 显示波形降低为低幅度的类三角波。(https://nyanpasu64.gitlab.io/blog/hdmi-vga-dac-audio/oscilloscope%20before%20after%20filter.png)我将 DAC 设置为播放静音,并测量 RC 滤波前后的信号。芯片输出符号 `10`,产生周期 76.8 ns、幅度 175 mV 的方波。滤波器将振荡减小为安静的类三角波。安装滤波器后,你实际上可以看到 sigma-delta DAC 输出的各个比特。 输入静音信号将输出一串 `10` 和 `1100` 符号。通过测量 delta-sigma 信号中每个高电平或低电平脉冲的周期,我估计每个符号

相似文章

神秘的XF86AudioPlay问题

Lobsters Hottest

一篇博客文章,详细描述了在Emacs中调试重复出现的XF86AudioPlay按键事件,最终通过libinput和evtest追踪到头戴式耳机设备驱动的问题。

Adafruit USB Type C CC电阻修复器

Hacker News Top

Adafruit USB Type C CC Resistor Fixer是一种小型PCB组件,它通过添加缺失的5.1K电阻来修复电缆和端口中USB Type C的电源和数据连接问题。