几年前,我需要一个快速、低频但失真极低的源来测试板载微控制器 ADC,看看它是否具有接近数据表中所述的有效位数 (ENOB) 和线性度。
我知道凌力尔特 [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]。我相信创意实验室不会制造垃圾,所以我买了一个试试。
使用我的 18 位 FFT 分析仪 [5] 进行的初步测试表明,笔记本电脑不仅“听起来”更好听我的耳朵,而且性能确实处于 16 位失真水平,底噪非常干净。
这种方法确实是我的通用 ADC 测试台的“快速设置”解决方案,因为所有软件都可以在我的实验室 PC 上运行;现在我将拥有一个“可控”的源、频率和幅度,并且它正在我的 PC 上运行,因此我可以拥有独立的应用程序,甚至可以构建 API 以在以后需要时包含在自动化测试套件中。
在那里解决了很多工作,并且通过使用外部声卡,精确的幅度和已知质量可以在任何测试台之间转移,因为我的测试笔记本电脑内部声卡在输出幅度和真实音质上随处可见.
将笔记本电脑用于测试控制器的另一个好处是,您可以拔下电源适配器并依靠电池运行,从而消除了许多接地回路问题,这些问题总是在您尝试快速移动并完成工作时突然出现。
输入 BlasterAmp
现在所需的所有项目都是用于 Sound Blaster 加密狗的模拟接口板,以便为我的“通用”测试设置获得所需的输出。
我测量了 Sound Blaster 音频输出到指定的 300 欧姆耳机负载和一些测试音调,我测量了满量程输出的一致 0.37 伏峰值,与我使用的 PC 或操作系统无关。
列出了常用的 ADC 输入范围(表 1)。我想如果我涵盖了常见的 ADC 输入范围,则可以通过使用音量控制来调整幅度来测量介于两者之间的任何内容,这最终会降低可实现的信噪比 (SNR),但 Sound Blaster 的 SNR 已经足够了对于我要测量的应用程序。
表 1:这些范围涵盖了我在过去 10 年中遇到的几乎所有 ADC 输入。该表用作确定 Sound Blaster 加密狗输出的放大器所需的增益和偏移量的基础。
3.3 伏的峰值范围很奇怪,但仍然出现在较低分辨率的基本设计中,无论如何大多数都是 10 位或 12 位 ADC,因此决定只使用音量控制和 0-5 伏范围在这些应用中,只有很小的信噪比损失。
然后我设计了我称之为“BlasterAmp”的东西,它具有所需的增益和偏移,以便能够转换 0.37 伏峰值,即 Sound Blaster 加密狗的满量程输出,以匹配表 2。
表 2:BlasterAmp 旨在涵盖表 1 中的常见电压,只有 4 个增益步长和 3 个偏移设置。单极范围需要使用三个偏移电压。
关于单极范围需要注意的一点:现在这些总是“轨到轨”,虽然我们说“轨到轨”,但几乎总是与“轨”有一些偏移。这将对任何 ADC/缓冲器测试造成严重破坏,因为如果“轨”不完全处于零或满量程,那么 ADC 将削波,这将导致严重的失真,从而阻止进行任何有意义的测量。此外,有时 ADC 参考电压为 2.048 或 4.096 伏,而不是 2.5 和 5 伏。为了解决这些情况,我使用了精确的 25 转微调器,以便在需要时对增益和偏移进行微调。微调器还允许 Sound Blaster 加密狗、电阻器容差和运算放大器偏移电压的任何细微差异。
图 1 显示了完成的 BlasterAmp 的一个通道。短路跳线用于允许根据需要更改偏移和增益,以适应各种所需的输出范围。
图 1:立体声 BlasterAmp 的一个通道。增益和偏移范围通过可移动的跳线设置,然后借助精确的 25 圈微调器进行微调。U101 周围的电阻网络是来自 Vishay (OSOPTC1001AT0) 的 1 k-ohm 匹配网络。所有其他电阻器的尺寸为 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 加密狗无疑大大简化了设计并节省了开发时间,但我仍然需要一种将高动态范围测试信号播放到 Sound Blaster 中的方法。我尝试了大约十几种音频测试音调软件解决方案,其中大多数都只有 60-dBc 或更低的失真水平,这对于听力测试来说很好,但对于我的应用来说不行,我需要将失真降低到 16位级别。
互联网上有几个发烧友网站提供非常低的失真文件用于测试 [7]。对于播放,您需要一个在循环时具有零死区时间的 WAV 或 MP3 文件播放器。我发现愚蠢地命名的程序“foobar2000”是一个很好的选择[8]。我最初在旅行时使用该程序在笔记本电脑上播放白噪声,以在尝试入睡时淹没多余的声音,并且在循环播放白噪声文件时也不能有任何咔哒声或爆裂声,否则您会立即醒来. foobar2000 程序非常适合 BlasterAmp 和睡眠。
这些预制测试文件具有固定频率,但可以通过 BlasterAmp 微调器或 PC 的音量控制根据需要微调幅度。
至于能够以编程方式设置频率和音量,我找到了一个名为 PyAudio [9] 的 Python 库,它允许我生成给定幅度的精确正弦波信号,然后能够直接从 Python 脚本 [10 ]。事实证明,这可以产生非常低的失真信号,如图 3 所示。
图 3:在我的 DMT9000 FFT 分析仪上测量的 BlasterAmp 设置为 +/-10V 范围时的结果 [5]。可以看到满量程失真产物在满量程以下 -96 dBc 的 16 位级别。
然而,在产生任何测试音时必须小心。您要么必须为测试创建一个连续且足够长的文件,要么必须不断循环。循环时,只需确保波形的起点和终点准确对齐,否则会出现不连续性,从而在循环点增加失真。
作为使用 Sound Blaster 加密狗生成精确音调的最后一点,请务必关闭正在播放声音生成的 PC 上的所有音频均衡器或控制程序,以确保没有不可预见的问题。
下次
在下一篇文章中,我将展示使用 BlasterAmp 测量一些实际 ADC 和测试组件的失真的技术。
Python 脚本的完整源代码和 BlasterAmp 的完整原理图可以在 Github 上找到。
审核编辑 黄昊宇
-
集成
+关注
关注
1文章
176浏览量
30212 -
模数转换器
+关注
关注
26文章
3150浏览量
126764
发布评论请先 登录
相关推荐
评论