计算12位ADC输入电压Vin=AD值*Vref/4095:式中到底是4095还是4096呢?

描述

Part 01

前言

最近在看ADC电压采样的相关资料,目前用的比较多的就是逐次逼近寄存器型ADC,又叫做SAR ADC,我们用ADC的目的就是把模拟信号转换成相应的二进制编码,之后再通过软件把相应的二进制编码转换成十进制AD值,最后通过相应的转换公式把十进制AD值转换成电压值。对应的转换公式有些资料中认为12位ADC的Vin=AD值*Vref/4095,有些资料中认为认为12位ADC的Vin=AD值*Vref/4096,各大论坛里各位硬件专家也是争论的十分激烈,可谓是公说公有理,婆说婆有理,那么到底哪个是对的呢?

SAR

Part 02

SAR ADC工作原理说明

先温习一下SAR ADC的工作原理吧,

1.采样和保持

首先,输入的模拟电压(VIN)通过采样/保持电路保持稳定,以便进行转换。初始化:N位寄存器(SAR寄存器)被初始化为中间值,即最高有效位(MSB)设置为1,其余位为0。例如,对于8位寄存器,初始值为10000000。

2.DAC转换

数模转换器(DAC)将寄存器中的值转换为对应的模拟电压(VDAC)。初始时,VDAC为基准电压(VREF)的一半,即VREF/2。

3.比较

比较器比较VIN和VDAC。如果VIN大于VDAC,比较器输出高电平(逻辑1),寄存器中的MSB保持为1;如果VIN小于VDAC,比较器输出低电平(逻辑0),寄存器中的MSB清零。

4.逐位逼近

SAR控制逻辑将寄存器移到下一位,并将该位设置为高电平。DAC再次将更新后的寄存器值转换为新的VDAC。比较器再次比较VIN和VDAC,并更新寄存器中的当前位。这一过程重复进行,每次都移到下一位,直到所有位(从MSB到LSB)都经过比较和更新。

5.完成转换

当所有位都经过比较和更新后,寄存器中的值即为对应的数字输出,代表输入模拟电压的数字量化值。最终的N位数字结果存储在寄存器中,完成模数转换过程。

SAR

Part 03

12位ADC是4095 or 4096?

为了便于理解,我们以3位ADC,Fs为参考电压为例,下图是不同的输入电压对应的二进制编码值,参考电压是Fs,3位ADC实际上是分了8段模拟输入电压范围进行编码,每一段对应的模拟输入电压为Fs/2^3=Fs/8V,那么:

0(0~Fs/16V):000

Fs/8(/16V~3*Fs/16V):001

...

Fs*7/8(13*Fs/16V~Fs*V):111

这样就能得到传递函数:Vin=AD值*Fs/2^3=AD值*Fs/8。

这个时候肯定有人会有疑问,如果输入电压Vin等于参考电压Fs,此时对应的AD值是7,那上面的等式不就不成立了? 这里有个误区在于我们认为的满量程就是参考电压Fs,比如我们的ADC参考电压是5V,那么我们想当然认为5V就是满量程电压,但是基于下面的输入电压-编码图可知,111对应的是Fs*7/8,并非是Fs,也就是ADC的满量程定义为Fs-1LSB。所以虽然参考电压是Fs,但是ADC的ADC的满量程为Fs-1LSB,这样当输入电压等于Fs-1LSB时就已经达到了满量程,对应的编码就是111。

所以对于12位ADC,Vin=AD值*Vref/4096,12位ADC的二进制编码值对应是10进制AD值范围就是0~2^12 -1,也就是0~4095,但是我们在通过AD值计算输入电压时是4096哦。

SAR

SAR有问题欢迎在评论区留言交流哦!

SAR

审核编辑 黄宇

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分