欢迎光临散文网 会员登陆 & 注册

关于ADC表达精度问题的浅显思考

2023-08-04 13:02 作者:章鱼萝卜猫  | 我要投稿

只是一个电路小白对ADC的一些浅显思考,如果有不对的地方,请各位大佬评论区指正一下。

此次讨论不考虑【偏置误差、增益误差、微分非线性误差、积分非线性误差】,认为这些误差都不存在,ADC是理想情况,只考虑原理。

一、输出的值究竟代表多少

刚开始使用STM32的ADC的时候,对编程该除以多少产生了疑问

假如我们使用一个3位的ADC,一共有2%5E3%20%3D8个值(0-7),一共分成了7份,所以计算输出的时候应该除以7,所以最后的结果应该是(误):

V_%7Bout%7D%3D%5Cfrac%7BV_%7Bref%7D*ADC%7D%7B7%7D%20%20

当ADC输出为7,参考电压为STM32的供电电压3.3V时,也就是(误):

3.3%3D%5Cfrac%7B3.3*7%7D%7B7%7D%20%20,输出为3.3V

当时认为这理所应当,非常合理,ADC也做到了满量程输出,所以编程(伪代码)就是这样:

当时还沾沾自喜,看别人的程序都是除以4096,还说他们居然这么简单的问题都想不清楚,殊不知,真正年轻的人是自己。

二,纠正除数

慢慢的自己看ADC的手册,发现,手册里面写的和自己的理解完全不是一回事,

PCF8591,恩智浦的一款8-bit A/D and D/A converter的数据手册

看PCF8591的数据手册可以发现,他是8位的ADC,他的LSB就是除以2^8,也就是256,并没有减1的操作,那问题就来了,按这个算法,还是上面的3位ADC的例子(方便说明问题)。输出值就变成了:

V_%7Bout%7D%3D%5Cfrac%7BV_%7Bref%7D*ADC%7D%7B2%5E3%7D%20%20%EF%BC%8C2.8875%3D%5Cfrac%7B3.3*7%7D%7B8%7D%20%20

这样就在ADC满输出的情况下(111,也就是7),居然不是参考电压了,这肯定不对啊【还是我自己年轻了】。

XPT2046,12位分辨率125KHz转换速率逐步逼近型 A/D转换器数据手册

可以在XPT2046的数据手册上清晰的看到,最大的输出值对应的就是FS-1LSB,确实是达不到参考电压的【原来小丑竟是我自己】,这同样也在

这个视频下的这个老哥的评论得到印证

不过这个老哥的FS是指输出,不是上面数据手册里的Full_Scale(上面数据手册的FS等于Vref),或者说这个老哥是说输出的全量程。

总之,现在正确的编程(伪代码)应该是:

本来事情到这里就应该告一段落了,但是看了上面的视频,又有了新的问题。

三、关于量化误差的问题

视频里面讲了并联比较型ADC(Flash ADC)的工作原理,提到是用电阻分压来比较电压的大小

所以这个3位的ADC的量化表应该是下面的表格:

由前面知道,8V的参考电压,3位的ADC(LSB=1V),满量程(111,也就是7)输出:

V_%7Bout%7D%3D%5Cfrac%7BV_%7Bref%7D*ADC%7D%7B2%5E3%20%7D%20%20%EF%BC%8C7%3D%5Cfrac%7B8*7%7D%7B8%7D%20%20

得到的结果是7V,但是从上图给出的原理图看,量化误差要不是6-7V,要不是7-8V,而我们希望的量化误差是在一个LSB之内【前后各半个LSB】也就是:

(%5Cfrac%7BV_%7Bref%7D*ADC%7D%7B2%5E3%20%7D-0.5LSB)%5Cleq%20V_%7Bout%7D%5Cleq(%5Cfrac%7BV_%7Bref%7D*ADC%7D%7B2%5E3%20%7D%2B0.5LSB)

也就是:

(7-0.5LSB)%5Cleq%20V_%7Bout%7D%5Cleq(7%2B0.5LSB)%0A

6.5%5Cleq%20V_%7Bout%7D%5Cleq7.5

我们希望当ADC给出7V的结果时,输入的真实电压在6.5-7.5V之间,而且各个数据手册也确实是这样输出的:

而上图这个电路显然没办法满足上述要求,所以真实的电路会不会是这样呢:

这样就可以做到:

这次就符合了数据手册,但是我没有设计过adc芯片,也没有查询到相关资料证明adc里面就是这么设计的,有没有懂这方面知识的大佬指点一二?谢谢~~

关于ADC表达精度问题的浅显思考的评论 (共 条)

分享到微博请遵守国家法律