关于ADC表达精度问题的浅显思考
只是一个电路小白对ADC的一些浅显思考,如果有不对的地方,请各位大佬评论区指正一下。
此次讨论不考虑【偏置误差、增益误差、微分非线性误差、积分非线性误差】,认为这些误差都不存在,ADC是理想情况,只考虑原理。
一、输出的值究竟代表多少
刚开始使用STM32的ADC的时候,对编程该除以多少产生了疑问

假如我们使用一个3位的ADC,一共有个值(0-7),一共分成了7份,所以计算输出的时候应该除以7,所以最后的结果应该是(误):
当ADC输出为7,参考电压为STM32的供电电压3.3V时,也就是(误):
,输出为3.3V
当时认为这理所应当,非常合理,ADC也做到了满量程输出,所以编程(伪代码)就是这样:
当时还沾沾自喜,看别人的程序都是除以4096,还说他们居然这么简单的问题都想不清楚,殊不知,真正年轻的人是自己。
二,纠正除数
慢慢的自己看ADC的手册,发现,手册里面写的和自己的理解完全不是一回事,

看PCF8591的数据手册可以发现,他是8位的ADC,他的LSB就是除以2^8,也就是256,并没有减1的操作,那问题就来了,按这个算法,还是上面的3位ADC的例子(方便说明问题)。输出值就变成了:
这样就在ADC满输出的情况下(111,也就是7),居然不是参考电压了,这肯定不对啊【还是我自己年轻了】。

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

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

不过这个老哥的FS是指输出,不是上面数据手册里的Full_Scale(上面数据手册的FS等于Vref),或者说这个老哥是说输出的全量程。
总之,现在正确的编程(伪代码)应该是:
本来事情到这里就应该告一段落了,但是看了上面的视频,又有了新的问题。
三、关于量化误差的问题
视频里面讲了并联比较型ADC(Flash ADC)的工作原理,提到是用电阻分压来比较电压的大小

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

由前面知道,8V的参考电压,3位的ADC(LSB=1V),满量程(111,也就是7)输出:
得到的结果是7V,但是从上图给出的原理图看,量化误差要不是6-7V,要不是7-8V,而我们希望的量化误差是在一个LSB之内【前后各半个LSB】也就是:
也就是:
我们希望当ADC给出7V的结果时,输入的真实电压在6.5-7.5V之间,而且各个数据手册也确实是这样输出的:


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

这样就可以做到:

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