几年前曾需要一个快速、低频、且失真极低的源来测试片上微控制器ADC,看它是否接近数据手册所给出的有效位数(ENOB)和线性度。
凌特公司的设计失真度很低,不过设计有些复杂,对于那时的需要来说,似乎有点大材小用了。最后,基于Hein van den Heuvel的电路,构建了一个经典的、三运放、状态变量振荡器,并用一小粒小麦灯泡作为振幅稳定电路。
对电路中运算放大器的各级负载进行了一天的摆弄,成功地将谐波失真产物降至-95 dBc以下,满足了当时的需求。
虽然可以构建分立式振荡器电路,但调试起来比较复杂。还有温度问题,如幅度漂移、频率漂移、启动和稳定时间等。同样,我认为将来如果有一个快速设置振荡器,具有2.5至+/-10v的多路输出,这样就可以实现一个通用ADC测试平台,可快速测量任何16位精度的ADC。
该测试平台如果采用模拟方案,实施起来太慢了,这让我想起不知道专业音频分析仪的源是如何实现的?我想要么是构建精密的分立式DDS,要么使用高分辨率I2S音频DAC。
然后,开始浏览TI应用手册,了解他们的超低失真测试振荡器是如何实现的。果不其然,使用了一款Burr Brown的 带I2S的音频DAC,后接了一些高性能低通滤波器。
我买了几个I2S DAC,将它们连接到我的一个微控制器演示板上,大约一天时间,I2S就开始运行了,并且系统中产生出了一些基本像样的信号。I2S的奇妙之处在于,它可以连接到处理器的DMA,使99%的数据传输对处理器透明。处理器所要做的就是,每隔一段时间把DMA管道充满。
这只是一次体验,在经济上并没有优势,因为TI的电路售价才不到300美元,不过没有公开API接口,无法从自己的测试程序来控制他们的解决方案。
然后我想,“USB声卡加密狗怎么样?它们也许既好用又便宜。”
快速搜索后发现,Creative Labs确实有一款成本很低、但性能又非常高的16/24位USB加密狗,其名字令人印象深刻:“Creative Labs Sound Blaster Play!3"。这款不到20美元的设备,竟然具有24位/96 kHz的数据速率。我相信Creative Labs制造的不会是“垃圾”,所以买了来试用。
使用18位FFT分析仪进行的初步测试表明,笔记本电脑不仅听起来音质更好,而且性能确实达到了16位失真水平,噪声基底非常干净。
对于我的通用ADC测试平台来说,这种方法确实是一种“快速”解决方案,因为所有软件都可以在实验室电脑上运行;如今,我拥有了一套频率和幅度都“可控”的信号源,并且运行在我自己的电脑上,这样就可以拥有独立的应用程序,甚至可以构建API,以便在以后需要时纳入自动测试套件。
这就解决了很多问题,通过使用外部声卡,精确的振幅和已知的质量可以在任何测试平台之间转移,因为我的测试笔记本电脑内部声卡的输出振幅和真实音质因地可变。
使用笔记本电脑作为测试控制器的另一个好处是,可以拔出电源适配器并用电池供电,从而消除了试图快速更换地点并完成工作时经常出现的许多接地回路问题。
现在需要的是用于声霸加密狗(sound blaster dongle)的模拟接口板,以获得“通用”测试装置所需的输出。
我在300欧姆的指定耳机负载上测量声霸音频输出,并使用了一些测试音,满量程输出测量到一致的0.37V峰值,并与使用的PC或操作系统无关。
表1列出了常见的ADC输入范围。我认为,如果覆盖了常见的ADC输入范围,则通过音量控制来调整幅度,就可以实现范围内任何输入的测量,不过这最终会降低可实现的信噪比(SNR ),然而,声霸的SNR已足以满足所预期的所有测量应用。
表1:表中所列涵盖了几乎所有常见的ADC输入范围,这些是计算声霸加密狗输出端放大器所需增益和偏置的基础。
表中的3.3V峰值范围貌似有点奇怪,但在分辨率较低的设计中仍然会出现,无论如何,基本设计大多是10位或12位ADC,因此决定在这些应用中只使用音量控制和0-5V范围,此时信噪比损失很小。
然后,我设计了具有所需的增益和偏置、且称之为“BlasterAmp”的放大器,能够转换0.37峰值,即声霸加密狗的满量程输出,以与表2中的数值匹配。
表2:BlasterAmp设计用于覆盖表1中的常见电压范围,仅有4个增益步长和3个偏置设置。对于单极性则需要使用三个偏置电压。
对于单极性范围,有一点需要注意,虽然目前所讲的这些范围都是“轨到轨”,但几乎总有一点偏差。这将对任何ADC/缓冲器测试造成严重影响,因为如果“供电轨”不完全处于零电平或满量程,ADC就会削波,导致严重失真,从而无法进行任何有意义的测量。此外,有时ADC基准电压为2.048或4.096V,而不是2.5和5V。为了应对这些情况,我使用了25圈精密微调电位器,以便在需要时对增益和偏置进行微调。该精密微调还可以对声霸加密狗、电阻容差和运算放大器失调电压存在的任何细微差异进行补偿。
图1显示了成品BlasterAmp的一个通道。根据需要,短路跳线用于改变偏置和增益,以适应所需的各种输出范围。
图1:立体声声霸放大器的单通道示意图。
图1中,增益和偏置范围通过可移动跳线设置,然后借助精密的25圈微调电位器进行微调。U101周围的电阻网络是Vishay (OSOPTC1001AT0)的1 k欧姆匹配网络。为了最大限度地减少电阻发热和后续的失真,所有其他电阻的尺寸均为0805,精度为0.1%。为了消除失真,C100和C101必须是薄膜或COG陶瓷电容。
对于放大器,选用了久经考验的Burr-Brown OPA1611,这是一款失真超低的音频运算放大器,其性能符合数据手册所列,可以说非常出色。
对于偏置基准电压,用的是TI REF5050,为一款5V精密基准电压源。
由于期望该电路用在测试工作台上,因此将其设计成由+/-15v电压轨供电,并使用了另一个久经考验的HP6234A双线性电源,将其放在工作台上以备此类场合使用。使用HP6234A这类的线性电源非常有用,因为它具有低噪声、低IO电容设计,而且没有开关电源到处冒出的共模电流。如果供电设计必须使用一个开关的话,应在电路中使用一些线性、低压差调节器和大共模扼流圈,以尽可能地消除电路板上的开关噪声。值得信赖的HP6234A消除了所有这些问题。
最后,将双通道BlasterAmp PCB放在一个小尺寸的Hammond外壳中,没有盖上外壳,因为这样可以方便地进行各种跳线更换和可调电位器调整,见图2。
图2:完整的声霸放大器示意图。
图中,印刷电路板被安装在一个冲压外壳中进行保护。PCB右上角的黑色电缆为声卡的音频电缆。电源由 HP6234A线性工作台电源,并通过PCB中间右侧的导线连接器供电。
使用声霸卡确实大大简化了设计,节省了开发时间,但还需要一种方法将大动态范围测试信号播放到声霸卡中。我尝试了大概十几种音频测试音软件解决方案,其中大多数的失真水平都只有60 dBc或更低,这对于听力测试来说还好,但对于我的应用来说就不够了,我的应用需要将失真降至16位水平。
互联网上有几个发烧友网站提供了非常低失真的测试文件。为了回放,需要一个WAV或MP3文件播放器,循环播放时没有死区时间。使用中发现这个“foobar2000” 程序虽然命名愚蠢,但却是一个极好的选择。最初使用该程序在笔记本电脑上播放白噪音,试图在睡觉时淹没外来声音,另外,当循环播放白噪音文件时,不能有任何点击或弹出,否则就会立即醒来。foobar2000程序非常适合BlasterAmp和睡眠。
这些预先录制好的测试文件的频率固定,但振幅可以根据需要通过声霸放大器中的微调电位器或电脑的音量控制来微调。
至于能够以编程方式设置频率和音量,我发现了一个名为PyAudio 的Python库,它可以生成特定幅度的精密正弦波信号,然后能够直接从Python脚本中播放。这已经证明可以产生失真非常低的信号,如图3所示。
图3:在DMT9000 FFT分析仪上测量声霸放大器范围设置为+/-10V时的测量结果。可以看出,满量程失真产物为满量程以下16位,即-96 dBc。
然而,在产生任何测试音时都必须小心。要么必须为测试创建一个连续且足够长的文件,要么必须连续循环。循环时,只需确保波形的起点和终点完全对齐,否则会出现不连续,这会增加循环点的失真。
关于使用声霸加密狗进行精确音调生成的最后一点注意事项是,请务必关闭正在播放PC上的任何音频均衡器或控制程序,以确保没有不可预见的问题出现。
(参考原文:An easier way to test integrated analog-to-digital converters,本文为《电子工程专辑》2022年10月刊杂志文章)