观电路-ADC与系统(2)
Full scale error 满量程误差
满量程误差指的是当ADC读取的最大值和理想最大值的差距,比如说12bits(参考为4.095V)的ADC转换了一个4095 LSB的值时候,理想的话此时的输入电压应该就是4.095V,但是由于ADC的输入offset的存在,和Gain error的存在,就产生了full scale error,说到底还是理想直线和实际直线的偏差。Gain error和offset error参考观电路-csa与系统。
DNL微分非线形
若是我们将ADC的每个LSB跳变电压点画出来在连上线我们会发现,这个线并不是绝对直的直线,就算我们校准其offset以及校准其Gain error,将其往理想直线上挪,我们也会发现其跳变电压点和理想跳变电压点的偏差,DNL定义了理想跳变点与实际跳变点的最大差值。
比如说,当输入电压往上加1LSB,但是ADC没有任何反应,当输入电压加到1.5LSB时候ADC的输出Code才发生变化,这时候我们可以说DNL为+0.5LSB,同理,当输入电压往上加到0.5LSB其输出Code就发生改变我们可以说他的DNL为-0.5LSB,一个好记的方法就是多出来电压才变的是+LSB,欠电压就变的是-LSB。
INL积分非线形
Integral non-linearity积分非线形就是DNL的合集,它所代表的是理想和实际的最大垂直差值,比如说当在001到100的这个output code range里时DNL都是负值,当我输入一电压使其达到011,这时我的ADC实际输出code是高于理想输出code的,在ADC的整个范围内去寻找理想曲线和实际曲线的区别,找到垂直误差最大的点就是ADC的INL最大值使用LSB来表示。若是实际输出Code高于理想输出Code此时INL为+的,若是实际输出Code低于理想输出Code则INL为-的。
图1:INL曲线
有点像你给酒缸里面灌水,理想状况下可能是一勺子水液位升1cm,但实际上酒缸的桶不太规则,在开始时候酒缸的DNL为负的,但到了酒缸最中间的位置他的DNL为正的。最终我们根据给酒缸灌水液位上升曲线和一勺1cm液位上升曲线找出他的INL,实际上和酒缸的外形有关系。
图2:酒缸
那么非线形如何影响我们的实际系统呢?
比如说你的采样精度要达到1/10000,你使用的是16bit的ADC他的INL为10LSB,也就是说在校准掉Gain error和offset error后理想采样LSB和实际采样LSB差10LSB,也就代表理想和实际可能最大会差10LSB,所以就算你选了16bit的ADC你的INL差,你的最终输出结果精度也是到不了1/10000的。主要和你的设计精度有关。
图3:ADX122 INL积分非线性
在这里看到ADX122的INL的最大值是12LSB,但是它的分辨率有20bit所以他的最大的Code是1048576,直接将这个Code除12得87381,还是远远高于1/10000的精度,注意:这里忽略了其他参数。
Sample Rate 采样率
一般ADC的采样率用SPS表示,SPS 全拼是 sample per second 每秒采样。那我们如何去看ADC的SPS是多少?
在芯片手册的第一页我们一般能看到芯片的SPS是多少,以ADX122举例如图4所示
图4:ADX122的SPS
那我们又怎么去测量ADX122的SPS呢?通过读取ADX122的寄存器我们可以看到ADX122的SPS是多档位可以配置的。
图5:ADX122 SPS的档位
当我们配置不同的data rate 时候他的SPS是不同的,其他ADC也有类似的选项。当我们设置好ADX122的时候我们触发ADX122的DRDY信号就好,等数据准备好DRDY会变低,不同的芯片可能不同。这里仅参考ADX122的手册。
图6:ADX122 DRDY引脚描述
所以我们只需要触发DRDY的翻转间隔我们就知道当前的SPS为多少,因为DRDY在ADX122里是与DOUT共用,所以在读取间隔时候需要注意⚠️。
图7:蓝色的为DRDY的间隔
图7约间隔3mS一次,根据手册可以得出结论大概是316SPS。
参考文档
Microchip—understanding adc parameter
Analogysemi—ADX122 datashet