我有一个 14 位ADC。但是,查看数据表(参见第 5 页的表 2),有效位数 (ENOB)始终小于 12 位。
为什么我的 DAC 只有 12 位精度,却声称是 14 位 ADC?如果它们毫无意义,那么有两个额外的位有什么意义?
我有一个 14 位ADC。但是,查看数据表(参见第 5 页的表 2),有效位数 (ENOB)始终小于 12 位。
为什么我的 DAC 只有 12 位精度,却声称是 14 位 ADC?如果它们毫无意义,那么有两个额外的位有什么意义?
你被骗了!
14 位是营销语言,硬件也给你,所以他们会说你没有什么可抱怨的。在数据表中的 ENOB 上方,它给出了 SINAD(信噪比和失真)数字。那是 72 dB,1 位对应于 6 dB 电平,因此 72 dB 确实是 12 位。最低的 2 位是噪声。
可以检索低于本底噪声的数据,但它需要非常好的相关性,这意味着它必须非常可预测。
假设一个人希望尽可能准确地测量一个稳定的电压,使用一个 ADC,每次测量都会返回一个 8 位的值。进一步假设指定了 ADC,因此对于 (N-0.5)/100 和 (N+0.5)/100 伏之间的电压,名义上将返回 N 的代码(例如,47 的代码名义上表示介于 0.465 和 0.475 之间的电压)伏)。如果输入一个精确为 0.47183 伏的稳态电压,我们希望 ADC 输出是什么?
如果 ADC 始终输出代表输入下降的上述定义范围的值(在本例中为 47),那么无论读取多少次读数,该值都将显示为 47。不可能的。
相反,假设 ADC 的构造是在将每个读数转换为整数之前,将一个从 -0.5 到 +0.5 线性分布的随机“抖动”值添加到每个读数中?在这种情况下,47.183 伏的电压将在大约 18.3% 的时间返回读数 48,在其他 81.7% 的时间返回读数 47。如果计算 10,000 个读数的平均值,则应该预期它约为 47.183。由于随机性,它可能会略高或略低,但应该非常接近。请注意,如果读取足够多的读数,则可以达到任意水平的预期精度,尽管每个额外的位都需要读数数量增加一倍以上。
精确添加一个线性分布抖动的 LSB 对 ADC 来说是一种非常好的行为。不幸的是,实现这样的行为并不容易。如果抖动不是线性分布的,或者如果它的幅度不是精确到 1 LSB,那么无论使用多少样本,从平均中获得的实际精度将受到严重限制。如果不是增加一个 LSB 的线性分布随机性,而是增加多个 LSB 的价值,那么实现给定的精度水平将需要比使用理想的 1-LSB 随机性所需的更多读数,但可以达到的准确度的最终限制通过获取任意数量的读数,对抖动源中的缺陷的敏感度将大大降低。
请注意,在某些应用中,最好使用不会抖动其结果的 ADC。在人们对观察 ADC 值的变化而不是对精确值本身更感兴趣的情况下,尤其如此。如果快速解决 +3 单位/样本和 +5 单位/样本的增加率之间的差异比知道稳态电压是精确是 13.2 单位还是 13.4 单位更重要,那么非抖动 ADC 可能比抖动一个。另一方面,如果想要比单个读数更精确地测量事物,使用抖动 ADC 可能会有所帮助。
额外的教训:你确实得到了 14 位的精度,但只有 12 位的精度。
一个额外的警告......有时你实际上想要随机性。
例如:
在加密(安全/真实性)应用程序中,需要纯“不可猜测”的随机性。使用转换器的 LSB(低于本底噪声)是一种快速生成纯随机数的方法。
当 ADC 硬件可用于其他用途(传感器等)时,这是一种快速简便的安全通信种子方式。您可以通过最大化输入放大器的增益(如果可用)(许多 MCU 提供此类功能)和浮动输入来增强效果。
ADC 随机性主要来源于两个物理原理:量化噪声和热噪声。
这些影响在宏观层面上有一个阈值。例如,远离位边界的数字不需要四舍五入,因此不会出现量化误差或随机性。在大多数情况下,热噪声不会影响转换中更重要的位。
通过扩展,您可以看到改变转换参数(采样时间、深度、速率、参考电压)将通过移动随机性阈值来影响结果的随机性变化(通过提高或降低阈值来增加它) )。通过改变环境/系统参数(温度、电源等)可以实现类似的效果。
也就是说,许多成功的商业硬件随机数生成器都依赖于这种技术,因为外部影响只会降低随机性——它们绝不会消除它(物理上不可能)。
您可以通过进行更多转换并附加结果来补偿随机性的减少。STM32 Nucleo 加密狗、FST-01(包括 NeuG 1.0)、LE Tech 的 Grang 系列器件和许多其他器件都使用了这种位扩展过程(连续转换的低位串联)。
Gran 设备通过每秒转换超过 4 亿次(每次转换 1 位)来生成位。如果您进行了足够多的转换,即使面对环境条件,您也可以保证高随机性。