线性参数说明
定义数据转换器线性精度主要有两个参数:积分(INL)和差分(DNL)非线性。INL 是输出传输函数和理想直线之间的偏差;DNL 是转换器输出步长相对于理想步长的误差。

 

可以采用两种方法之一对 INL 进行定义:(1) 端点 INL 或(2) 最佳拟合 INL。端点 INL 是采用 DAC 传输函数端点测得的实际值计算转换器的线性度;最佳拟合 INL 则是计算传输函数的斜率获得 INL 的峰值。

 

图 1a. 端点积分非线性误差

 

图 1b. 最佳拟合积分非线性误差

 

图 1a 和图 1b 以图形的形式显示了两种测试方法与给定传输函数之间的关系。注意,两种情况中,DAC 传输函数曲线的数值和形状都一样。还要注意,图 1a 的端点线性度有较大的正 INL,而没有负误差。

 

采用图 1b 所示的最佳拟合方法,将部分正误差转移到直线的负侧,以降低报告的最大 INL。注意,线性度误差总量和直线计算结果相同。

 

DNL 定义理解起来要难一些,确定最低有效位(LSB)的权值会影响 DNL。DAC 中需要考虑 DNL 没有小于 -1 LSB 的编码。小于这一电平的 DNL 误差表明器件是非单调的。当输出不随输入码增大而减小时,或者输出不随输入码减小而增大时,DAC 是单调的。图 2 解释了正、负 DNL 误差,澄清了单调的概念。

 

测量线性度所采用的方法需要考虑待评估 DAC 的体系结构。优先选择将电流模式 DAC 输出转换为电压,因为这样可以使用电压表而不是电流表。普通的万用表在测量电压时分辨率要高于电流测量。电流源的配置决定了需要测量多少位编码才能对器件性能进行精确的评估。

 

图 2. DNL 误差实例
 

有很多方法可以将电流(I)转换为电压(V),主要取决于几种因素。首先考虑使用万用表进行测量,能够得到的最高分辨率决定了精确测量的最小 LSB 权重。推荐 LSB 权重与仪表分辨率的比是 100 比 1;仪表应能够测量 LSB 的 1/100。

 

待测 DAC 的输出额定容限也影响了如何进行 I 至 V 的转换。电流模式 DAC 输出容限是指器件在输出上能够承受多大的电压而不会对性能有影响。增大负载电阻会提高电压摆幅和 LSB 的大小,但是容限限制了最大负载。

 

替代简单的电阻转换的方法是使用虚拟地配置的运算放大器,如图 3 所示。由于 DAC 输出电压保持为零,这种配置的优势是能够提高 LSB 的大小,明显高于容限限制。然而,放大器容限和线性度以及热梯度会影响测量。同样的,需要两个匹配放大器来测量差分输出器件。

 

图 3. 虚拟地的 I 至 V 转换
 

测量线性度时需要考虑的另一因素是待评估 DAC 的分辨率。器件分辨率越高,LSB 越小。考虑 MAX5891 (16 位)、MAX5890 (14 位)、MAX5889 (12 位)器件。每一器件的满量程输出为 20mA。使用 50Ω负载时,相应的 LSB 大小为 15.25µV、61.04µV 和 244.2µV。LSB 越小,万用表需要的精度和分辨率就越高。

 

考虑到 DAC 的分辨率,还应该确定需要多少位编码才能精确地测量器件性能。16 位器件有 65,536 个可能的输入编码,12 位器件有 4,096 个。由于不可能人工测量所有这些编码,因此,常用的方法是测量编码子集。少量的编码减少了采集数据所需要的时间,并且能够提供非常精确的结果。掌握器件的体系结构有助于选择某一器件的最佳编码。

 

测量电流输出器件的线性度时,温度效应比较明显。输出负载电阻的功耗导致发热,从而改变了电阻值(除非采用的电阻具有 0ppm 温度系数)。解决这一问题的方法是转换输入编码,有效地对负载功耗进行平均。

 

这里采用的方法非常适合自动测量,因为它能够减小所有编码的延迟时间。测量每一编码及其补码,例如 0x4800,然后是 0xB7FF。通过测量每一编码及其补码,负载平均功率保持固定,这是因为采用了从零到满量程递增的方式来测量最高有效位(MSB)输入。由于在量程中部测量 LSB,该方法不太适合,因为功率的变化相当小。

 

测量说明
以下是 Maxim 开发的几种器件所采用的线性度测量方法。MAX5873、MAX5875、MAX5885、MAX5888、MAX5891、MAX5895 和 MAX5898 都采用了该方法进行测量。在最初设计评估和产品测试时进行了实验室测量。虽然下面实例针对 MAX5891,该方法也可以用于其他器件。

 

MAX5891 采用了 5-4-3-4 分段结构。分段是指将一个 16 位器件有效地分成四个单独的 DAC,一个 5 位、一个 4 位、一个 3 位和第二个 4 位器件。5 个 MSB 含有 31 个(25 - 1)等权重电流源,对于 5 位分辨率,每个输入编码采用一个等权重电流源。下一个 4 位使用 15 个源,再下一个 3 位使用 7 个。4 个 LSB 是二进制权重电流源,每个低位比特等于前一比特值的一半。

 

电流源的总数 57 (31 + 15 + 7 + 4)加上满幅值和零值,确定了测量 MAX5891 线性度所需的最少编码数。59 次测量支持重新构建完整的 DAC 输出传输函数。一旦确定了传输函数,即可计算线性度。该方法虽然缩短了测试时间,但降低了测量精度。表 1 列出了推荐的 MAX5891 编码组。

 

表 1. 5-4-3-4 体系结构 16 位编码组

 

MAX5890 和其他 Maxim 14 位器件使用 5-4-3-2 分段体系结构,14 位体系结构的编码组如表 2 所示。MAX5889 和其他 Maxim 12 位器件使用 5-4-3 体系结构,12 位体系结构的编码组如表 3 所示。

 

表 2. 5-4-3-2 体系结构的 14 位编码组
 

 

表 3. 5-4-3 体系结构的 12 位编码组

 


集测量点的问题。适合这类测量的万用表是 Agilent™ 3458,分辨率高达 8.5 位。该表连接在 MAX5891 的 OUTP 和 OUTN 端之间,输出端以 50Ω负载接地。当 DAC 设置为 20mA 满量程电流时,万用表输入得到的电压摆幅是±1V。

 

万用表量程设置为固定的 1.2V,使用最大分辨率,得到 10nV 最小测量结果。切换表的量程会增大测量值的增益误差;因此,使用单电压量程可以避免其他的误差源。由于需要锁存数字输入,MAX5891 还需要时钟信号。一旦连接好了万用表、时钟源、电源和数字输入控制,就可以采集线性度测量点。

 

采集所有测量点后,需要画出重建后的 DAC 输出传输函数。由于对每一电流源都进行了测量,很容易产生对应于所有编码的传输函数。例如,考虑器件的 4 个 LSB。我们测量编码 0x8000、0x8001、0x8002、0x8004 和 0x8008。对于编码 0x8000,LSB 计算的基准是 DAC 量程中部。LSB 权重是在 0x8001 测得的电压值减去在 0x8000 测得的电压值。

 

在 0x8001 和 0x8780 之间测量的所有编码采用相同的公式。0x0800 到 0xF800 的其他点是 MSB 电流源,以编码 0x0000 为基准进行计算。考虑编码 0x4F31 作为各种电流相加的例子。

 

首先,我们需要确定哪一测量点什么时候相加能够等于实例编码。0x4800 是小于目标编码的最大 MSB。从 0x4F31 中减去 0x4800 后的余数为 0x0331。编码 0x0300 是可以减掉的次最大编码(0x8300 - 0x8000),随后是 0x0030 (0x8030 - 0x8000),最后是 0x0001 (0x8001 - 0x8000)。

 

因此,可以采用下面的等式来表示编码 0x4F31 的电压值:

 

[V(0x4800) - V(0x0000)] + [V(0x8300) - V(0x8000)] + [V(0x8030) - V(0x8000)] + [V(0x8001) - V(0x8000)](公式 1)

 

使用相似的等式,可以计算任意给定输入编码的电压值。利用 MATLAB®或 Excel®软件等工具可以很容易地计算所有编码的电压,重建全部的 DAC 传输。

 

一旦建立了传输函数,就可以计算线性度。第一步是根据传输函数的端点计算 LSB 的电压值(端点法)。

 

VLSB = [V(0xFFFF) - V(0x0000)]/[2N - 1](公式 2)

 

其中


N 是器件分辨率(16、14 或者 12 位)


V(0x0000)是测得的 DAC 零标输出电压。


V(0xFFFF)是测得的 DAC 满幅输出电压。

 

采用下面的等式来计算任意给定编码的 INL:

 

INLCODE(LSB) = [VCODE - (CODE × VLSB)]/VLSB(公式 3)

 

其中


CODE 是要计算的数字编码。


VLSB 是公式 2 中计算的电压值。


VCODE 是计算的 DAC 输出电压值。

 

下面的等式用于计算任意给定编码的 DNL:

 

DNLCODE(LSBs) = [VCODE - VVCODE-1 - VLSB]/VLSB(公式 4)

 

其中


CODE 是要计算的数字编码。


VCODE 是针对 CODE 计算的 DAC 输出电压值。


VCODE-1 是针对 CODE - 1 计算的 DAC 输出电压值。


VLSB 是公式 2 中计算的电压值。

 

以下举例说明利用 MATLAB 脚本计算 MAX5889、MAX5890 和 MAX5891 的线性度。每次计算都得到最小和最大 DNL 和 INL 误差编码和误差值。实例还为所有编码画出了传输函数,得到 INL 和 DNL。要求用户输入前面表格中所列出编码的电压测量值。必须按照所列顺序输入数值。 

 

计算 16 位线性度的 MATLAB 脚本

 

 

16 位脚本产生的曲线
实例 1

 

 

实例 2

 

 

实例 3