理解ADC积分非线性(INL)误差
了解积分非线性(INL)规范及其与模数转换器(ADC)误差的关系。
本文引用地址:https://www.eepw.com.cn/article/202409/462860.htm三个参数,即偏移误差、增益误差和INL,决定了ADC的精度。偏移和增益误差可以校准出来,这让我们把INL作为主要的误差因素。INL规范描述了实际传递函数的转变点与理想值的偏差。
什么是积分非线性(INL)?
理想的ADC具有均匀的阶梯式输入输出特性,这意味着每次转换都发生在距离前一个转换1 LSB(最低有效位)处。然而,对于真实世界的ADC,步骤并不一致。例如,考虑图1所示的传递曲线。
ADC的传输曲线示例。
图1。ADC的传输曲线示例。
步长与理想值的偏差由微分非线性(DNL)规范表征。然而,DNL误差不能完全描述传递函数与理想响应的偏差,因为我们获得的响应取决于正负DNL误差在不同代码中的传播方式。INL规范允许我们描述代码转换与其理想值的偏差。为了计算代码k的INL,我们可以使用以下方程式:
其中Ta(k)和Tidal(k)分别表示从代码k-1到k的实际和理想过渡;“理想步长”是ADC的LSB。对于上述示例,从代码1(001)到代码2(010)的实际转换发生在理想转换之上0.125 LSB处。因此,代码2的INL是INL(2)=+0.125 LSB。
从这里,我们可能会问,下一个转换(从代码2到3)是什么?注意到从代码1到2的转换发生在理想值以上0.125 LSB处,并考虑到代码2的宽度误差(或DNL)为+0.25 LSB,我们可以推断出从代码2到3的转换应该发生在理想值以上0.375 LSB处。因此,我们得到INL(3)=+0.375 LSB。如您所见,代码3的INL等于代码1和2的DNL之和:
将上述分析扩展到其他代码,很容易通过应用以下方程来验证第m个代码的INL:
INL代表DNL误差的累积效应。在计算DNL和INL值时,我们假设ADC的偏移和增益误差已经校准。结果,第一个代码(代码1)和最后一个代码的INL为零。对于代码0,未定义INL。
表示ADC INL信息
就像DNL一样,我们可以将INL信息表示为INL与代码值的关系图。对于上述示例,我们得到如图2所示的下图。
显示INL与代码值的示例图。
图2:显示INL与代码值的示例图。
INL通常也表示为所有代码的最小值和最大值。我们假设的ADC的INL在-0.71 LSB和+0.5 LSB之间。INL图不仅表示ADC的线性性能,还揭示了ADC内部架构的一些信息。例如,子范围ADC具有三角形INL图(图3(a)),而闪存ADC通常具有随机模式(图3)。
子范围ADC三角形INL图(a)和闪存ADC随机模式图(b)的示例。
图3。子范围ADC三角形INL图(a)和闪存ADC随机模式图(b)的示例。图片由M.Pelgrom提供
INL:ADC量化误差之外的误差
值得注意的是,INL除了指定ADC的量化误差外,还指定了一个误差。由于ADC将连续的模拟输入范围转换为几个离散的输出码,即使是理想的ADC也会在系统中固有地引入一些误差,称为量化误差。如果我们将斜率为1的斜坡输入应用于ADC,我们可以从输入中减去输出代码的模拟等效值,以找到量化误差。如图4所示。
显示量化误差的示例图。
图4。显示量化误差的示例图。
在图4中,绿色曲线显示了斜坡输入,蓝色台阶表示理想ADC产生的代码的模拟等效值。然而,图4中的下图显示了锯齿形的量化误差。让我们看看非线性如何影响误差项。如果我们将斜坡输入应用于图1中的非理想特征曲线,我们会得到以下误差波形(图5)。
显示误差波形的示例图。
图5。示例图显示了ADC输出代码和理想变换(a)和误差波形(b)的模拟等效值。
图5(a)中的紫色步骤显示了ADC输出代码的模拟等效值,蓝点描绘了均匀阶梯响应的理想过渡点。例如,考虑从代码1到代码2的转换。如果这种转换发生在理想点(点A),则代码1的最大负误差将为-0.5 LSB。由于INL(2)=+0.125 LSB,从代码1到代码2的实际转换发生在理想值以上+0.125 LSB处。由于这种延迟的转变,在转变点(点B),绿色曲线和ADC输出之间的差变得大于0.5LSB。通过检查该图,您可以确认B点的误差由下式给出:
请注意,虽然这种非理想效果将代码1的误差扩展到-0.625 LSB,但它将下一个代码(代码2)的误差上限降低到0.5 LSB-0.125 LSB=+0.375 LSB。您可以在D点看到由INL(3)=+0.375 LSB引起的误差波形的类似变化。
让我们检查代码6,看看负INL如何影响错误(INL(6)=-0.71 LSB)。在这种情况下,(点F)处的实际转变发生在理想值(点E)以下0.71 LSB处。由于ADC输出的增量早于预期值,因此会产生较大的正误差。如错误图所示,代码6的错误可能高达:
对于理想的ADC,量化过程会产生±0.5 LSB的误差。然而,对于实际的ADC,量化过程和INL都会导致系统的整体误差。换句话说,INL是超出量化误差的误差。
到目前为止,我们考虑的INL定义可能是本规范中最有用和最常见的定义。然而,应该指出的是,ADC制造商的教科书和技术文件中有时会提到一些其他定义。为了避免任何混淆,我们将在本文的其余部分了解INL的其他常见定义。
重新定义INL代码:不同但相同的定义
在我们继续其他定义之前,值得一提的是,人们可以用稍微不同的方式查看图1中使用的定义。与其将INL定义为代码转换与其理想值的偏差,不如将其定义为代码过渡与穿过第一个和最后一个代码转换的直线的偏差。如图6所示。
显示实际响应和理想响应之间代码偏差的图。
图6。显示实际响应和理想响应之间代码偏差的图。
在图6中,点A和B是第一个和最后一个过渡点。由于我们假设在INL计算之前偏移和增益误差为零,因此点A和B对应于理想和实际的传递函数。如您所见,穿过点A和B的线也穿过理想特性的所有其他过渡点(图中的蓝色曲线)。因此,实际过渡点与其相应理想过渡的偏差等于实际过渡点与穿过点A和B的直线的偏差。一些参考文献,如《高速模数转换》一书,使用这条直线来定义ADC INL。此外,请注意,此参考线与前几篇文章中介绍的ADC的线性模型(图中的绿线)不同。
定义INL——代码中心线定义
对于这种类型的定义,ADC传输特性是基于穿过ADC码中心的直线来定义的。图7显示了如何使用代码中心线定义INL。
使用代码中心线定义INL。
图7。使用代码中心线定义INL。图片由R.Plassche提供
在上述示例中,对角线是穿过理想ADC步长中点的线(在本系列文章中,我们将其称为ADC的线性模型)。如图所示,实际步长中点与直线的偏差被视为该代码的INL误差。
这个例子显示了这个定义的一个缺点。如您所见,代码1101的相邻转换偏离了理想值。然而,由于1101的测量码中心与理想值一致,因此该码的INL为零。根据图1中使用的定义,代码1101的INL将为非零。
作为旁注,上图取自鲁迪·范·德·普拉舍的书。鲁迪是世界著名的模拟设计师和许多电路和电路思想的发明者,如斩波器和稳定放大器,这些电路和思想在今天被广泛使用。
另一个基于代码中心的定义如图8所示。
显示线中心代码定义的示例图。
图8。显示代码中心线定义的示例图。图片由M.Demler提供
在这种情况下,用于计算INL误差的参考线是穿过实际传递函数第一步和最后一步中点的线。对于三位ADC,这是穿过代码001和110中点的线。实际步长中点与这条直线的偏差被认为是该代码的INL误差。
在这个特定的例子中,ADC传递函数具有交替的宽码和窄码,使得从第一个和最后一个码获得的参考线与所有码的中点相交。因此,所有代码的INL错误均为零。这再次突显了基于代码中心的定义的缺点,即在某些情况下无法描述传递函数的非线性。
本文中讨论的INL定义被归类为基于端点的定义,因为它们只使用第一个和最后一个代码来推导参考线。定义INL误差的另一种方法是最佳拟合方法。在这种情况下,使用穿过所有代码的直线拟合作为参考线。本系列的下一篇文章将详细研究最佳拟合方法。
评论