一种更容易测试集成模数转换器的方法
以下是我如何为我的通用ADC测试台找到一个“快速设置”解决方案,所有软件都可以在我的实验室PC上运行。 几年前,我需要一个快速、低频但失真度很低的源来测试板载微控制器ADC,看看它是否接近数据表所说的有效位数(ENOB)和线性度。 我知道线...
以下是我如何为我的通用ADC测试台找到一个“快速设置”解决方案,所有软件都可以在我的实验室PC上运行。
几年前,我需要一个快速、低频但失真度很低的源来测试板载微控制器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声卡加密狗怎么样?它们一定很不错,也很便宜。”
快速搜索发现,创意实验室确实制造了一款成本很低但性能很高的16/24位USB加密狗,名为“创意实验室Sound Blaster Play!3”。这款不到20.00美元的设备甚至具有24位/96 kHz的数据速率[4]。我相信创意实验室不会制造垃圾,所以我买了一个来试用。
用我的18位FFT分析仪[5]进行的初步测试表明,笔记本电脑不仅在我耳边“听起来”更好,而且性能确实达到了16位的失真水平,并具有良好的干净噪声基底。
这种方法确实是我的通用ADC测试台的“快速设置”解决方案,因为所有软件都可以在我的实验室PC上运行;现在,我有了一个“可控”的源,无论是频率还是幅度,它都在我的电脑上运行,这样我就可以有独立的应用程序,甚至可以构建API,以便在以后需要时包含在自动化测试套件中。
这是一项解决的大量工作,通过使用外部声卡,精确的振幅和已知的质量可以在任何测试台之间传输,因为我的测试笔记本电脑内部声卡在输出振幅和真实音质方面各不相同。
使用笔记本电脑作为测试控制器的另一个好处是,你可以拔出电源适配器并使用电池运行,从而消除了当你试图快速移动并完成任务时总会出现的许多接地回路问题。
输入爆炸机放大器
现在所需要的所有项目都是一个用于Sound Blaster加密狗的模拟接口板,以获得我的“通用”测试设置所需的输出。
我测量了Sound Blaster音频输出到指定的300欧姆耳机负载和一些测试音中,全刻度输出测量到了一致的0.37伏峰值,与我使用的PC或操作系统无关。
列出了通常的ADC输入范围(表1)。我想,如果我涵盖了常见的ADC输入范围,那么可以通过使用音量控制来调整幅度来测量介于两者之间的任何东西,这最终会降低可实现的信噪比(SNR),但Sound Blaster的SNR对于我想要测量的应用来说绰绰有余。
<img data-lazy-fallback="1" decoding="async" src="https://uploads.9icnet.com/images/aritcle/20230421/BlasterAmp-Table1.jpg">
表1:这些范围几乎涵盖了我在过去10年中遇到的所有ADC输入。该表被用作计算Sound Blaster加密狗输出端放大器所需增益和偏移的基础。
3.3伏的峰值范围很奇怪,但在分辨率较低的基本设计中仍然会出现,这些设计大多是10位或12位ADC,因此决定在这些应用中只使用音量控制和0-5伏的范围,只有很小的信噪比损失。
然后,我设计了我所说的“爆炸机放大器”,它具有所需的增益和偏移,能够转换0.37伏的峰值,即Sound Blaster Dongle的满刻度输出,以匹配表2。
<img data-lazy-fallback="1" decoding="async" src="https://uploads.9icnet.com/images/aritcle/20230421/BlasterAmp-Table-2.jpg">
表2:爆炸机放大器设计用于覆盖表1中的公共电压,只有4个增益步长和3个偏移设置。单极范围需要使用三个偏移电压。
关于单极范围需要注意的一点是:现在这些范围总是“轨对轨”,当我们说“轨对铁”时,几乎总是有一些偏离“轨”的偏移。这将对任何ADC/缓冲区测试造成严重破坏,因为如果“轨”不完全处于零或满刻度,则ADC将进行削波,并且这将导致严重失真,这将阻止进行任何有意义的测量。此外,有时ADC参考电压为2.048或4.096伏,而不是2.5和5伏。为了解决这些情况,我使用了精确的25圈微调器,以便在需要时对增益和偏移进行轻微调整。微调器还允许在Sound Blaster加密狗、电阻器容差和运算放大器偏移电压方面存在任何细微差异。
图1显示了成品爆炸机放大器的一个通道。短路跳线用于允许根据需要改变偏移和增益,以适应各种所需的输出范围。
<img data-lazy-fallback="1" decoding="async" src="https://uploads.9icnet.com/images/aritcle/20230421/BlasterAmp-circuit-Figure-1-e1655941701113.jpg">
图1:立体声爆炸机放大器的一个通道。增益和偏移范围由可移动跳线设置,然后借助精确的25圈微调器进行微调。U101周围的电阻网络是来自Vishay的1 k欧姆匹配网络(OSOPTC1001AT0)。所有其他电阻器的尺寸为0.1%,0805,以最大限度地减少电阻器发热和随后的失真。C100和C101必须是薄膜或COG陶瓷类型,以消除失真。
对于放大器,我使用了久经考验的Burr Brown OPA1611,这是一种超低失真音频运算放大器,它们的性能符合数据表,也就是说非常出色。
对于偏移参考电压,我使用了TI REF5050,这是一个精确的5伏参考电压。
由于该电路预计将在测试设置安排中在我的工作台上使用,我将其设计为由+/-15伏导轨供电,并使用了另一个久经考验的组件,即HP6234A双线电源,我在这种情况下将其放在工作台上。像HP6234A这样的线性电源的使用非常有用,因为它具有低噪声、低IO电容的设计,而且它不会到处从开关电源喷出共模电流。如果我必须使用切换器来为设计供电,我会在电路中使用一些线性、低压差调节器和严重的共模扼流器,以尽可能地消除开关噪音。值得信赖的HP6234A消除了所有这些问题。
我把最后的双通道BlasterAmp PCB放在一个小尺寸的哈蒙德外壳[6]中,我没有盖上盖子,因为这样可以很容易地更换各种跳线和调整微调器(图2)。
<img data-lazy-fallback="1" decoding="async" src="https://uploads.9icnet.com/images/aritcle/20230421/BlasterAmp-PCB-Figure-2.jpg">
图2:完成的爆炸机放大器。我将印刷电路板安装在一个挤压外壳中以进行保护。声卡的音频是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所示,这已被证明可以产生非常低的失真信号。
<img data-lazy-fallback="1" decoding="async" src="https://uploads.9icnet.com/images/aritcle/20230421/BlasterAmp-distortion-Figure-3.jpg">
图3:在DMT9000 FFT分析仪[5]上测得的爆炸机放大器设置为+/-10V范围时的结果。可以看出,全标度失真产物处于低于全标度的-96 dBc的16位电平。
然而,在生成任何测试音调时都必须小心。您要么必须创建一个连续且足够长的文件来进行测试,要么必须连续循环。循环时,只需确保波形的起点和终点精确对齐,否则会出现不连续,从而增加循环点的失真。
作为使用Sound Blaster加密狗进行精确音调生成的最后一点,请确保关闭正在播放声音生成的PC上的任何音频均衡器或控制程序,以确保不会出现意外问题。
下一次
在下一篇文章中,我将展示使用BlasterAmp测量一些实际ADC和测试组件失真的技术。
Python脚本的完整源代码和BlasterAmp的完整示意图可以在Github[10]上找到。
参考文献:
[1] Jim Williams,Guy Hoover,“A的保真度测试→D转换器”,线性技术AN132:
https://www.analog.com/media/en/technical-documentation/application-notes/an132f.pdf
https://www.analog.com/en/design-center/evaluation-hardware-and-software/evaluation-boards-kits/dc1858a.html
[2] Hein van den Heuvel,“参考正弦波发生器”,Elektor Post,项目编号53–https://www.elektormagazine.com/index.php/files/attachment/326
[3] 用于测试ADC性能的精密信号注入器(PSI)评估模块,德州仪器-https://www.ti.com/tool/PSIEVM
[4] Creative Labs Sound Blaster播放!3 –https://us.creative.com/p/sound-blaster/sound-blaster-play-3
[5] 未来的设计文章将详细介绍我的DMT9000 18位FFT分析仪。
[6] 哈蒙德制造,挤压外壳——https://www.hammfg.com/electronics/small-case/extruded/1455
[7] 这些测试音调质量良好:
https://www.mediacollege.com/audio/tone/download/
https://www.audiocheck.net/testtones_thd.php
[8] “foobar2000”循环音频播放程序–https://www.foobar2000.org/download
[9] PyAudio安装程序截至2022年5月已损坏,可从以下位置下载固定版本:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio
[10] 完整的BlasterAmp设计和Python脚本可以在–https://github.com/Hagtronics/BlasterAmp
—史蒂夫·哈格曼大约从五年级开始就被确认为“模拟疯狂”。他有幸设计运算放大器、开关电源、千兆赫采样示波器、锁定放大器、无线电接收器、50 GHz射频电路以及数字无线产品的测试设备。Steve知道所有的现代设计都不可能用Rs、Ls和Cs来完成,所以他涉猎了PC和嵌入式系统的编程,足以完成这项工作。
>>这篇文章最初发表在我们的姐妹网站上,电子数据网络.