几年前,我需要一个快速、低频但失真极低的源来测试板载微控制器 ADC,看它是否具有数据表中所说的有效位数 (ENOB) 和线性度。
我知道 Linear Technology [1] 的失真度非常低,但设计有些复杂,但对于我的即时需求来说,这似乎有点过分了。因此,我基于 Hein van den Heuvel [2] 的电路构建了一个经典的三
运算放大器状态可变振荡器,带有一个小麦粒灯泡作为振幅稳定电路。
经过一天摆弄电路中运算放大器各级的负载后,我设法将谐波失真产物降低到 -95 dBc 水平以下,这足以满足我的即时需求。
虽然可以构建分立振荡器电路,但它很繁琐。存在温度问题,例如振幅漂移、频率漂移、启动和稳定时间等。同样,我认为将来有一个具有 2.5 到 +/-10 伏的多个输出的快速设置振荡器,这样我可以以 16 位精度快速测量任何 ADC。
模拟方法绝不是一种快速设置,这让我开始思考音频分析仪如何实现它们的源。我认为,他们必须构建精密的分立式 DDS,或者使用其中一种高分辨率 I2S 音频 DAC。
然后我浏览了 TI 应用说明,了解他们对超低失真测试振荡器的看法,果然,它使用了他们的 Burr-Brown I2S 之一,音频 DAC 后跟一些高性能低通滤波器 [3]。
我买了几个 I2S DAC 并将它们连接到我的一个微控制器演示板上,大约一天后 I2S 开始运行,并且有一些不错的信号从设置中跑出来。I2S 的妙处在于它可以连接到处理器的 DMA 上,使 99% 的数据传输对处理器透明。处理器所要做的就是每隔一段时间保持 DMA 管道充满。
这是学习经历,在经济上没有优势,因为 TI 以低于 300 美元的价格出售他们的电路,但是,没有已发布的 API 可用于从您自己的测试程序控制他们的解决方案。
然后我想,“USB 声卡加密狗怎么样?它们一定很不错而且很便宜。”
快速搜索显示,Creative Labs 确实制造了一种成本非常低但性能很高的 16/24 位 USB 加密狗,令人印象深刻的名称是“Creative Labs Sound Blaster Play!3.” 这款不到 20.00 美元的设备甚至具有 24 位/96-kHz 数据速率 [4]。我相信 Creative Labs 不会制造垃圾,所以我买了一个试试。
使用我的 18 位 FFT 分析仪 [5] 进行的初步测试表明,笔记本电脑不仅“听起来”更适合我的耳朵,而且其性能确实达到了 16 位失真水平,并且本底噪声非常干净。
这种方法确实是我的通用 ADC 测试台的“快速设置”解决方案,因为所有软件都可以在我的实验室 PC?? 上运行;现在我将拥有一个“可控”的源、频率和幅度明智的,并且它正在我的 PC 上运行,因此我可以拥有独立的应用程序,甚至可以构建 API 以在以后需要时包含到自动测试套件中。
很多工作就在那里解决了,通过使用外部声卡,的振幅和已知质量可以在任何测试台之间转移,因为我的测试笔记本电脑内部声卡在输出振幅和真实音质上各处都不同.
使用笔记本电脑作为测试控制器的另一个好处是,您可以拔出电源
适配器并使用电池运行,从而消除了很多接地环路问题,这些问题在您尝试快速移动并完成工作时总是会出现。
进入 BlasterAmp
现在需要的所有项目是 Sound Blaster dongle 的模拟接口板,以获得我的“通用”测试设置所需的输出。
我测量了 Sound Blaster 音频输出到指定的 300 欧姆耳机负载和一些测试音调,以及全量程输出我测量了一致的 0.37 伏峰值,与我使用的 PC 或操作系统无关。
列出了常用的 ADC 输入范围(表 1)。我认为如果我涵盖常见的 ADC 输入范围,则可以通过使用音量控制调整幅度来测量介于两者之间的任何内容,这终会降低可实现的信噪比 (SNR),但 Sound Blaster 的 SNR 绰绰有余对于我要测量的应用程序。
表 1:这些范围几乎涵盖了我在过去 10 年中遇到的所有 ADC 输入。该表用作确定放大器在 Sound Blaster dongle 输出端所需的增益和偏移量的基础。
3.3 伏的峰值范围是一个奇怪的东西,但仍然出现在较低分辨率的基本设计中,无论如何大多数都是 10 位或 12 位 ADC,因此决定只使用音量控制和 0-5 伏范围这些应用中,信噪比损失很小。
然后,我设计了我称之为“BlasterAmp”的东西,它具有所需的增益和偏移,能够转换 0.37 伏峰值,即 Sound Blaster Dongle 的满量程输出,以匹配表 2。
表 2:BlasterAmp 旨在覆盖表 1 中的常见电压,仅具有 4 个增益步长和 3 个偏移设置。单极性范围需要使用三个偏移电压。
关于单极范围需要注意的一件事:它们现在总是“轨到轨”,而当我们说“轨到轨”时,几乎总是与“轨”有一些偏移。这将对任何 ADC/缓冲器测试造成严重破坏,因为如果“轨”不完全处于零或满刻度,则 ADC 将削波,这将导致严重失真,从而阻止进行任何有意义的测量。此外,有时 ADC 参考电压为 2.048 或 4.096 伏,而不是 2.5 和 5 伏。为了解决这些情况,我使用了的 25 圈微调电位器,以便在需要时对增益和偏移进行微调。微调电位器还允许 Sound Blaster dongle、电阻容差和运算放大器偏移电压存在任何细微差异。
图 1 显示了完成的 BlasterAmp 的一个通道。短接跳线用于允许根据需要更改偏移和增益,以适应各种所需的输出范围。
图 1:立体声 BlasterAmp 的一个通道。增益和偏移范围通过可移动跳线设置,然后借助的 25 圈微调电位器进行微调。U101 周围的电阻网络是一个 1 k 欧姆的匹配网络,来自 Vishay (OSOPTC1001AT0)。所有其他
电阻器均为 0.1%、0805 尺寸,以限度地减少电阻器发热和随后的失真。C100 和 C101 必须是薄膜或 COG 陶瓷类型以消除失真。
对于放大器,我使用了久经考验的 Burr-Brown OPA1611,这是一款超低失真音频运算放大器,它们的性能符合数据表,可以说非常出色。
对于偏移参考电压,我使用了 TI REF5050,这是一款精密的 5 伏参考电压。
由于预计该电路将在我的工作台上用于测试设置,我将其设计为由 +/-15 伏电源轨供电,并使用了另一个久经考验的组件,即我保留的 HP6234A 双线性电源在这种情况下坐在我的长凳上。使用像 HP6234A 这样的线性电源非常有用,因为它具有低噪声、低 IO 电容设计,而且它不会从开关电源到处喷出共模电流。如果我必须使用切换器为设计供电,我会在电路中使用一些线性、低压降稳压器和强大的共模扼流圈,以尽我所能将开关噪声远离电路板。值得信赖的 HP6234A 消除了所有这些问题。
我将终的双通道 BlasterAmp PCB 放置在一个小型 Hammond 外壳 [6] 中,我没有盖上盖子,因为这样可以轻松更换各种跳线和调整电位器(图 2 ).
图 2:完成的 BlasterAmp。我将 PCB 安装在挤压外壳中以提供保护。来自声卡的音频是 PCB 右上角的黑色
电缆。我的 HP6234A 线性台式电源通过 PCB 右中部的电线连接器供电。完整的设计可用,请参阅参考资料 10。
通用格言:硬件需要软件
使用 Sound Blaster dongle 无疑大大简化了设计并节省了开发时间,但我仍然需要一种方法来将高动态范围测试信号播放到 Sound Blaster 中。我尝试了大约一打音频测试音软件解决方案,其中大部分都只有 60 dBc 的失真级别或更低,这对于听力测试来说还不错,但对我的应用程序来说不太好,我需要将失真降低到 16 -位级别。
互联网上有几个发烧友网站提供非常低失真的测试文件 [7]。对于播放,您需要一个 WAV 或 MP3 文件播放器,它在循环时死区时间为零。我发现名字愚蠢的程序“foobar2000”是一个很好的选择 [8]。我初在旅行时使用该程序在我的笔记本电脑上播放白噪声以在尝试睡觉时淹没无关的声音,并且在循环播放白噪声文件时也不能有任何咔哒声或爆裂声,否则您会立即醒来. foob??ar2000 程序非常适合 BlasterAmp 和睡眠。
这些预制测试文件具有固定频率,但可以根据需要通过 BlasterAmp 微调电位器或 PC 的音量控制对振幅进行微调。
至于能够以编程方式设置频率和音量,我找到了一个名为 PyAudio [9] 的 Python 库,它允许我生成给定幅度的正弦波信号,然后能够直接从 Python 脚本 [10] 播放它]. 事实证明,这会产生非常低的失真信号,如图 3 所示。
图 3:在我的 DMT9000 FFT 分析仪 [5] 上测得的 BlasterAmp 设置为 +/-10V 范围时的结果。可以看到满量程失真产物处于低于满量程的 -96 dBc 的 16 位级别。
然而,在生成任何测试音时必须小心。您要么必须制作一个连续且足够长的文件来进行测试,要么必须连续循环。循环时,只需确保波形的起点和终点完全对齐,否则会出现不连续性,从而在循环点处增加失真。
作为使用 Sound Blaster 加密狗进行音调生成的一点注意事项,请务必关闭正在播放声音生成的 PC 上的所有音频均衡器或控制程序,以确保不会出现不可预见的问题。