一文带您了解如何进行ADCDAC精度测试

作者介绍

一、前言

ADC(模数转换器)和DAC(数模转换器)是电子设备中至关重要的组件,它们负责将模拟信号转换为数字信号,或者将数字信号转换为模拟信号。这些转换器的存在形式主要有两种:一种是作为独立的集成电路(IC)芯片,另一种则是作为IP核心或功能模块内嵌于微控制器单元(MCU)等其他类型的芯片中。

不论采取何种形式,ADC和DAC的分辨率都仅由其设计架构所决定。分辨率是指转换器能够区分和表示的最小信号变化,通常以比特数(bits)来衡量。然而,除了分辨率之外的其他性能参数,如实际量程范围、编码的均匀性、误差性能以及高频响应等,都可能会因为半导体制造过程中的微小差异或材料本身的不一致性而与设计预估值存在偏差。

为了确保ADC和DAC的性能符合设计规范,无论是在设计验证阶段还是在生产出货阶段,对这些转换器进行精度测试都是必不可少的。这些测试不仅能够验证产品是否达到了设计要求,而且还为可能的进一步校正提供了依据。通过这些严格的测试流程,可以保证电子产品的性能和可靠性,满足用户对高质量信号转换的需求。而本文将围绕如何进行这些精度测试而展开介绍。

二、针对ADC测试

我们先以ADC测试为例。在ADC的精度测试中,通常有3种主要的测试方法:斜坡测试(Ramp Test)、动态性能测试(Dynamic test)以及直方图测试(Histogram Test)。这三种测试方法虽然在测试激励信号的设计和分析数据的手段上有所差异,但它们通常可以在相同的测试硬件环境下进行。

在进行这些测试时,选择合适的测试硬件和软件工具至关重要,他们是确保测试结果准确、可重复的关键。此外,测试过程中应严格控制环境条件,如温度和电源稳定性,因为这些因素都可能影响测试结果。

三、测试环境基础

在深入探讨3种主要的测试方法之前,我们首先从测试环境基础入手,这不仅是因为所有3种测试都可以共享同一测试平台,更重要的是,这将有助于我们清晰地追踪信号的流向,从而更深入地理解测试的全貌。

首先,我们可以把问题简化,想要对ADC进行测试,那么最简单的方法就是给ADC一个标准的模拟电压,等待ADC进行转换后,再用一个数字信号接收器捕获转换结果,然后进行处理、运算和分析。

首先,我们可以先将问题简化,以便于理解。一个最简单的ADC测试配置如下图所示。其基本步骤是:向ADC提供一个精确的模拟电压输入,随后ADC将这个模拟信号转换为数字信号。在此之后,我们使用一个数字信号接收装置来捕获转换后的数字输出。最后,对这些数字数据进行处理、运算和分析,以便准确评估ADC的转换精度和性能。

图1:理论上最简单的ADC测试环境

这看起来是不是有点过于简单了?没错,接下来我们向该测试平台补充一些细节,以便让他从理论可行变成实际工程可行。

首先,考虑到ADC作为一个有源设备,其运作依赖于外部电源。因此,我们的测试系统必须包含一个电源供电模块,以确保ADC能够正常工作。此外,对于某些特定的ADC架构,它可能还需要一个外部参考电压输入,以便在转换过程中与之进行比较,从而获得正确的转换结果。所以,在测试平台中,我们可能需要引入一个独立的、高精度的参考电压源。

接下来,为了确保ADC输出的数字信号能够被正确接收和处理,这些信号需要受到时序逻辑的控制。这种时序通常由一个外部时钟信号来管理,因此,我们的测试平台还需包括一个能为待测ADC提供参考时钟源的设备。值得一提的是,在某些ADC的设计中,时钟信号不仅控制输出时序,还直接决定了ADC的实际采样率和内部流水线的处理时序,从而对整体性能产生重要影响。

最后,我们需要一套软件控制系统来管理各个硬件模块的输入和输出。这套软件需要确保各个组件之间的协同工作,以顺利完成ADC的测试流程。此外,软件还需要对获取到的ADC输出数据进行后续的运算和分析,通过这些分析,最终可以准确地获得我们关注的性能指标数据结果。

目前,我们已经构建了一个实际可行的测试平台架构,如下图所示。在测试功能更加复杂的ADC时,我们可能还需要增设额外的数字信号输出设备。其用途是将配置信号、触发信号或其他控制指令发送给ADC,以便对特定模式或功能下的精度性能进行详尽的测试。

图2:一个基础且实际可行的ADC测试平台架构

四、斜坡测试(Ramp Test)

斜坡测试,又称锯齿波测试,是利用单个或多个斜坡组合形成的锯齿波信号作为输入激励,以此对ADC进行精度评估。在该测试中,为了全面评估待测ADC的性能,通常需确保在每个最低有效位(LSB)的区间内,至少有一个激励信号电压点。当每个LSB范围内激励信号电压点数只有1~2个时,可能仅可以确认增益误差(Gain Error)、失调误差(Offset Error)这样的宏观参数;LSB范围内点数足够多时,才能深入分析以确定转换编码的跳变电压点,从而算出其积分非线性(INL)、微分非线性(DNL)性能数据,以及判断是否有丢码(Missing Code)现象。

图3:斜坡测试结果示例

从精度角度看,单个信号斜坡内包含的电压点数量越多,理论上能够提供更为精确的测量结果。然而,实际上存在两个主要的限制因素:首先,电压点之间的最小间隔受到信号源精度的制约,这意味着信号源必须具有足够的分辨率来生成非常接近的电压步进;其次,电压点数量的增加会直接导致测试时间的延长,这可能会影响测试效率,因而,在实际的斜坡测试中,需要在测量精度和测试速度之间找到适当的平衡点。

另外,在实际执行测试时,我们通常建议将斜坡信号的最大和最小值设定得稍微超出待测ADC的标称量程。这样做有助于准确地确定ADC的实际量程界限。例如,对于一个设计量程为0至+5 V的ADC,其实际量程可能略有不同,比方说-0.01至+5.01 V。在这种情况下,测试时可以应用一个最小值为-0.05 V,最大值为+5.05 V的斜坡信号。在测试结果的分析阶段,可以通过特定的算法识别并排除超出实际量程的测试点,这些算法能够确保超出范围的点不会对各静态参数的分析结果产生不利影响。这种做法也有助于更精确地评估ADC的性能,并确保在实际应用中的可靠性和稳定性。

总的来说,斜坡测试对模拟电压生成设备的分辨率和精度参数提出了较高的要求。这种模拟电压生成设备通常由任意波形发生器(AWG)充当,它们能够提供精细的电压步进,以确保在待测ADC的每个LSB范围内都有足够的测试电压点,从而准确评估待测件的增益误差、失调误差、INL、DNL等关键静态性能指标。此外,也正如上面所提到,AWG的输出范围还应该稍稍大于待测ADC的标称量程。

五、动态性能测试(Dynamic test)

动态测试是一种利用正弦波信号作为激励,对ADC进行频率响应特性评估的方法。在此测试中,ADC的转换输出会经过快速傅里叶变换(FFT)处理,以便在频域内进行分析。通过这种分析,可以获得关键的动态性能参数,包括信号噪声及失真比(SINAD)、有效位数(ENOB)、总谐波失真(THD)以及无杂散动态范围(SFDR)。这些参数对于评估ADC在处理变化信号时的性能至关重要,特别是在音频、通信和测量等领域,其中信号的频率成分和动态范围对系统整体性能有着决定性的影响。

图4:动态性能测试结果示例

由于FFT算法的要求,测试数据的采样点数量通常需要是2的整数次幂。如果采样点数量不满足这一条件,可能需要对采集到的数据进行切割处理,以符合FFT算法的要求。同时,为了减少频谱泄露现象并避免在频域结果中产生不必要的旁瓣和谐波,我们强烈建议测试信号段包含整数个周期的正弦波信号。为了满足这一条件,有时需要对AWG的输出频率进行微调。例如,在执行10 kHz频率点的测试时,可以将频率略微调整至9.97 kHz,以确保在整个测试信号段中包含整数个周期的正弦波,这种微调可以有效地提高频域分析的准确性和可靠性。

在设置AWG输出的正弦波幅值时,应遵循一个基本原则:“宁缺毋滥”,也就是说,需要确保输出幅值不超过待测ADC的实际量程,而ADC实际量程是有可能比标称量程更窄的。这一原则的目的是为了避免ADC在信号转换过程中出现饱和现象。当信号饱和时,输出信号会被“削波”(clipping),这种现象会在信号经过FFT转换后导致频谱失真,并降低信噪比。在这一点的考虑上,与斜坡测试时略有不同,需要注意区分。

在动态测试中,会对AWG的输出采样速度和时钟精确度有较高的要求。同时,AWG的高速输出与ADC的高速采集必须精确同步,以避免在ADC转换过程中发生AWG输出跳变,进而影响测试结果。这对测试平台中的时钟控制模块和平台整体的软硬件控制提出了更为严格的要求。

六、直方图测试(Histogram Test)

直方图测试是ADC精度测试中的一个常用手段,其核心在于对统计域数据的分析和处理。这种方法与斜坡测试相似,都旨在评估ADC的静态特性参数。通过对ADC输出进行大量采样,并绘制数据分布的直方图,可以直观地观察到量化误差的分布情况,从而对ADC的线性度、增益误差、偏移误差等关键性能指标进行定量分析,除此之外,我们还可以通过检查是否存在编码频次为零的情况来找出丢码现象。为了确保统计结果的可靠性,有时需要进行多轮循环测试,并将各轮的统计结果进行叠加,以便获得更稳定和可信的数据分析。

图5:直方图测试原理示例

从测试输入信号的类型角度说,直方图测试和斜坡测试都可以采用锯齿波信号进行测试,然而,直方图测试更为灵活,也接纳三角波、正弦波等其他信号类型进行统计和分析。值得注意的是,当使用正弦波进行直方图测试时,由于正弦波在ADC每个LSB范围内的出现概率并不均匀,因此需要通过额外的算法来进行概率密度函数的均衡化处理。经过这样的补偿后,才能准确比较不同码宽的偏差,从而对ADC的性能进行准确评估。也正因为使用正弦波进行测试时会引入额外的计算复杂性,我们通常不建议使用正弦波等电压分布不均匀的波形进行直方图测试,以免增加测试的难度和不必要的计算负担。

从测试信号的幅值来说,直方图测试与斜坡测试相似,均要求使用AWG产生信的幅值略高于ADC的标称量程。这一做法的目的是确保测试能够涵盖ADC的全部编码范围,即从最小到最大值。然而,这种做法的一个副作用便是导致最小编码和最大编码的出现频率异常增加。为了获得更易于分析和观察的直方图结果,通常会将这两个极值编码点排除在外,从而减少极端值对整体性能评估的影响。

直方图测试与斜坡测试在测试条件和方法上存在一定的相似性,它们所关注的参数也有部分重合。因此,在实际的测试实践中,可以采用一种更为高效的策略:使用单一的锯齿波信号进行测试,然后对采集到的数据分别进行斜坡测试和直方图测试的分析。这种做法的优点在于,它能够简化测试流程,并显著减少测试所需的时间,提高测试的效率。此外,这种方法还有助于减少对测试设备的磨损,延长其使用寿命。

七、针对DAC测试

在掌握了ADC测试的相关知识后,将这些概念扩展到DAC的测试领域是相当直接的。与前面类似,我们可以先把问题简化。一个最简单的DAC测试配置如下图所示。

图6:理论上最简单的DAC测试环境

我们不难发现,其实只需要把ADC测试中的数据流动方向反转,即可应用于DAC的测试。具体来说,我们会使用数字信号设备来输出激励信号,同时利用模拟信号采集设备来捕获DAC产生的模拟输出。而这种测试配置的转变,自然导致了硬件需求上的显著变化。

首先,对于数字信号设备,其角色从接收输入信号转变为主动输出信号。这意味着,我们需要一个能够产生精确、可控数字信号的设备,如一个高精度的数字信号发生器。

其次,在模拟信号一侧,原本用于输出信号的AWG被替换为用于采集信号的数字化仪,也称为WFD(Waveform Digitizer)。这类设备能够将模拟信号转换为数字信号,以便进行后续的信号处理和分析。

同样地,面向DAC的精度测试,也有斜坡测试、动态性能测试以及直方图测试三种常见方法。这些测试的基本原理与前面所说的,应用在ADC测试时类似,关注的参数也大致相同。也即是说,还是通过斜坡测试和直方图测试评估DAC的静态特性,而动态性能测试则用于测量其动态特性。

值得一提的是,在进行DAC测试时,输入输出量程的处理相对简单。无论采用哪种测试方法,数字信号发生器只需将其输出码型与DAC的输入编码范围一一对应即可。此外,用于采集数据的WFD的量程应确保略大于DAC的设计输出范围,以便能准确捕捉到所有的输出信号。

八、结论

综上所述,ADC和DAC的精度测试需要使用不同硬件构建平台,此外,根据所选测试方法的不同,软件和硬件的具体要求可能会有所变化。因此,笔者建议最好能够选择一个具有较高功能灵活性,且保证自身精度的软硬件平台,以同时满足多种测试需求。这样做不仅可以确保通过多种测试方法获得准确可靠的测试结果,还可以避免在待测芯片或测试方案发生变化时,需要重新采购测试设备的尴尬情况。

推荐使用的平台之一是德思特ADC/DAC测试系统,该系统以模块化设计将所有必要的硬件集成于一个机箱内,包括数字输入/输出(DIO)和时钟发生模块、AWG模块、WFD模块、供电电源模块以及参考电压源模块。在软件方面,该系统同样能够支持ADC和DAC的斜坡测试、动态性能测试以及直方图测试。用户只需进行简单的测试方案配置,即可一键启动测试并直接获得最终参数结果,无需进行额外的编程控制或数据处理。这种集成化设计不仅提高了测试效率,也大幅降低了用户的使用门槛。

图7:德思特ADC/DAC测试系统


关于德思特

德思特是原虹科测试测量事业部孵化出来的独立公司,基于超过10年的业务沉淀,德思特公司专注提供电子测试/测量解决方案。主要业务范围涵盖:汽车电子仿真及测试、射频微波及无线通信测试、无线频谱监测与规划、无线通信(包括智能网联汽车无线通信、轨道交通、卫星通信、室内无线通信)、半导体测试、PNT解决方案、大物理和光电测试等。

核心成员具有9年以上的测试测量、无线通信及其他相关行业资历;技术团队获得世界五百强PNT解决方案合作伙伴Safran的GNSS技术及信号仿真和软件Skydel培训认证证书、航空航天测试和测量合作伙伴Marvin Test 的自动化测试软件ATEasy培训认证证书。

德思特研发部,核心成员获得国际项目管理师PMP认证资质,并具备LabVIEW、python等多种编程语言能力,优势能力集中于:HIL测试,半导体测试,EOL测试和质量检测等多种系统研发集成,拥有10多个实用新型和专利授权。

围绕汽车电子、射频微波、通信、航空航天等行业提供专业可靠的解决方案,现有客户包括华为、德赛西威、蔚来汽车、理想汽车、航天科工集团、清华大学、北京航空航天大学、中电科集团等。

此外,我们还是中国无线电协会、中国通信企业协会、雷达行业协会、RIS智能超表面技术协会等行业协会的会员。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/293621.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言-static

static作用&#xff1a;修饰变量和函数 修饰局部变量-静态局部变量 static未修饰局部变量 #include <stdio.h>void print() {int a 0;a;printf("%d ", a); }int main() {int i 0;for (i 0; i < 10; i){print();}return 0; }运行结果 static修饰局部变…

vulnhub靶场之driftingblues-4

一.环境搭建 1.靶场描述 get flags difficulty: easy about vm: tested and exported from virtualbox. dhcp and nested vtx/amdv enabled. you can contact me by email for troubleshooting or questions. This works better with VirtualBox rather than VMware. 2.靶场…

[SpringCloud] Feign Client 的创建 (二) (五)

文章目录 1.自动配置FeignAutoConfiguration2.生成 Feign Client2.1 从Feign Client子容器获取组件2.2 Feign Client子容器的创建2.3 构建Feign Client实例 1.自动配置FeignAutoConfiguration spring-cloud-starter-openfeign 包含了 spring-cloud-openfeign-core FeignAutoCo…

QT_day5:使用定时器实现闹钟

1、 程序代码&#xff1a; widget.h&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime>//时间类 #include <QTimer>//时间事件类 #include <QTextToSpeech>//文本转语音类 QT_BEGIN_NAMESPACE namespace Ui { cla…

Python读取PDF文字转txt,解决分栏识别问题,能读两栏

搜索了一下&#xff0c;大致有这些库能将PDF转txt 1. PyPDF/PyPDF2&#xff08;截止2024.03.28这两个已经合并成了一个&#xff09;pypdf PyPI 2. pdfplumber GitHub - jsvine/pdfplumber: Plumb a PDF for detailed information about each char, rectangle, line, et cete…

R语言使用dietaryindex包计算NHANES数据多种营养指数(2)

健康饮食指数 (HEI) 是评估一组食物是否符合美国人膳食指南 (DGA) 的指标。Dietindex包提供用户友好的简化方法&#xff0c;将饮食摄入数据标准化为基于指数的饮食模式&#xff0c;从而能够评估流行病学和临床研究中对这些模式的遵守情况&#xff0c;从而促进精准营养。 该软件…

Notepad++:格式化json字符串(带转义)

目录 一、效果呈现 二、去除json字符串转义 三、格式化json字符串 一、效果呈现 格式化前 带字符串转义&#xff0c;带unicode编码字符 格式化后 二、去除json字符串转义 方法&#xff1a;采用Notepad的普通替换 第一&#xff1a;\"替换为" 第二&#xff1a;\\…

科技下乡:数字乡村改变乡村生活方式

在科技飞速发展的时代&#xff0c;数字化、信息化浪潮正以前所未有的速度席卷全球。在这场科技革命中&#xff0c;乡村不再是滞后的代名词&#xff0c;而是成为了数字乡村建设的热土。科技下乡&#xff0c;让数字乡村成为了改变乡村生活方式的重要力量。 一、科技下乡&#xf…

什么是量子计算?

什么是量子计算&#xff1f; 量子计算机仍处于起步阶段&#xff0c;正在影响已经在经典计算机上运行的新一代模拟&#xff0c;现在使用 NVIDIA cuQuantum SDK 进行加速。 在史蒂夫乔布斯 (Steve Jobs) 推出可以放入口袋的计算机之前 27 年&#xff0c;物理学家保罗贝尼奥夫 (P…

什么是JPA,JPA的概念

什么是JPA JPA&#xff08;Java Persistence API&#xff0c;Java持久化API&#xff09;&#xff0c;定义了对象-关系映射&#xff08;ORM&#xff09;以及实体对象持久化的标准接口,它是一套标准,具体的实现要根据不同的厂商来提供,就跟JDBC类型 持久化单元 持久化单元是运行…

【A-013】基于SSH的共享单车管理系统/共享单车出租系统

【A-013】基于SSH的共享单车管理系统/共享单车出租系统 开发环境&#xff1a; Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库&#xff1a; MySQL 适用于&#xff1a; 课程设计&#xff0c;毕业设计&#xff0c;学习等等 系统介绍&#xff1a; 基于SSH开发的共享单车管理系统/…

基于JavaSpringmvc+myabtis+html的鲜花商城系统设计和实现

基于JavaSpringmvcmyabtishtml的鲜花商城系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末…

leecode 331 |验证二叉树的前序序列化 | gdb 调试找bug

计算的本质是数据的计算 数据的计算需要采用格式化的存储&#xff0c; 规则的数据结果&#xff0c;可以快速的按照指定要求存储数据 这里就不得不说二叉树了&#xff0c;二叉树应用场景真的很多 本题讲的是&#xff0c;验证二叉树的前序序列化 换言之&#xff0c;不采用建立树的…

Redis怎么测?这篇文章写的太全了

Redis是一个高性能、内存数据库和缓存系统&#xff0c;在开发和生产环境中被广泛应用。本文将介绍如何进行有效的Redis软件测试&#xff0c;以确保其稳定性、高性能和可靠性。 Redis作为一种非关系型数据库和缓存系统&#xff0c;被广泛用于支持高流量、低延迟的应用。为了保证…

算法学习——LeetCode力扣动态规划篇9(1035. 不相交的线、53. 最大子数组和、392. 判断子序列、115. 不同的子序列)

算法学习——LeetCode力扣动态规划篇9 1035. 不相交的线 1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 描述 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#x…

【分析教程】unity游戏修改so文件

基础知识 0x1.apk安装后在手机中的目录 apk安装后会在两个包下生成相关包&#xff1a;data/data/、data/app/。 这里拿网易云音乐的安装目录举例。Data/App目录下通常会有三个文件&#xff1a; lib文件夹&#xff08;包含so库文件&#xff09;、 ‚oat文件夹&#xff08;O…

计算机网络-RIP动态路由协议简介

一、概述 前面我们学习了动态路由协议按照工作机制及算法划分可以分为&#xff1a;距离矢量路由协议DV型和链路状态路由协议LS型。RIP就是典型的距离矢量路由协议&#xff0c;但是实际工作中用得已经比较少了。 距离矢量路由协议DV: RIP 链路状态路由协议LS: OSPF IS-IS 二、RI…

C++11:基于C++98的语法更新

一、简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了 C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞 进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并…

【机器学习】数据探索---python主要的探索函数

在上一篇博客【机器学习】数据探索(Data Exploration)—数据质量和数据特征分析中&#xff0c;我们深入探讨了数据预处理的重要性&#xff0c;并介绍了诸如插值、数据归一化和主成分分析等关键技术。这些方法有助于我们清理数据中的噪声、消除异常值&#xff0c;以及降低数据的…

设计模式-概述篇

1. 掌握设计模式的层次 第1层&#xff1a;刚开始学编程不久&#xff0c;听说过什么是设计模式第2层&#xff1a;有很长时间的编程经验&#xff0c;自己写了很多代码&#xff0c;其中用到了设计模式&#xff0c;但是自己却不知道第3层&#xff1a;学习过了设计模式&#xff0c;…