0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

硬件那点事儿 来源:硬件那点事儿 作者:硬件那点事儿 2024-07-02 18:00 次阅读

Part 01

前言

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

b644362c-380b-11ef-82a0-92fbcf53809c.png

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位数字结果存储在寄存器中,完成模数转换过程。

b668ee5e-380b-11ef-82a0-92fbcf53809c.png

Part 03

12位ADC是4095 or4096?

为了便于理解,我们以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哦。

b677f5c0-380b-11ef-82a0-92fbcf53809c.png

b67fde8e-380b-11ef-82a0-92fbcf53809c.gif有问题欢迎在评论区留言交流哦!

b692cdc8-380b-11ef-82a0-92fbcf53809c.jpg

审核编辑 黄宇

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

    关注

    30

    文章

    5186

    浏览量

    118449
  • SAR
    SAR
    +关注

    关注

    3

    文章

    365

    浏览量

    45666
  • adc
    adc
    +关注

    关注

    97

    文章

    5732

    浏览量

    540780
  • 输入电压
    +关注

    关注

    1

    文章

    423

    浏览量

    16378
收藏 人收藏

    评论

    相关推荐

    深度解析三种不同方式ADC应用实例

    、采样精度。先来看看二进制的12可表示0-4095个数,也就是说转换器通过采集转换所得到的最大4095,如:“111111111111
    的头像 发表于 04-28 11:26 1.2w次阅读
    深度解析三种不同方式<b class='flag-5'>ADC</b>应用实例

    stm32AD采样回来的是应该除以4095还是4096

    stm32AD采样回来的是应该除以4095还是4096
    发表于 08-24 17:03

    初学电子 ADC模块应用的一些问题

    可以表示的范围。)所以,12,可以表示从0~4095,这就是先在感性上,认识了为什么12
    发表于 01-21 10:54

    转:ADC采样转化成电压详解

    可以表示的范围。)所以,12,可以表示从0~4095,这就是先在感性上,认识了为什么12
    发表于 07-15 16:56

    TMS320F2802电压采样4095但AD端电压为3.8

    在用TMS320F2802电压采样时,采样一直为4095,外部输入为零,但是DSP ADCIN口电压却为3.8V,不知道什么原因,请大侠告
    发表于 11-26 10:13

    输入DSP AD口的模拟电压Vin ,进入DSP转换成数字量的是: 4095*( Vin-ADCLO)/3 吗?

    `输入DSP AD口的模拟电压Vin ,进入DSP转换成数字量的是:4095*( Vin-A
    发表于 04-18 16:48

    关于12ADC转换数据不能达到4095的现象

    最开始调采用F003调试ADC功能时发现无论怎么整,AD最大只能到4088-4090左右。采用的是DMA传输模式,并询问了群里的人,他们说少一点是很正常的,可能是芯片差异,我也没在意。后来
    发表于 04-28 13:49

    利用单片机的ADC模块(或者独立的ADC芯片)得到接入ADC管脚上的实际电压

    为什么12ADC,是从0~4095.读到的怎么换算成实际的
    发表于 07-05 07:07

    单片机是如何采样ADC的?

    最近在调按键和电池,和ADC采集有很大关系。那么单片机是如何采样ADC,每个单片机的ADC位数都是不一样的,有8
    发表于 11-24 07:41

    怎么得到参考电压Vref

    调试ADC计算电压时,在网络上没有发现讲的很清楚的文章,分享下摸索出的相关知识。最重要的公式要记住ADC测量结果无非就是一个代表
    发表于 12-09 07:03

    KW36如何在Vref范围内降低adc输入电压

    我正在使用 kw36。我将 PTB1 配置为 ADC(通道 DAD1)的单端输入。并使用 12 分辨率和内部参考电压。当我将 3.3v 源
    发表于 03-28 07:07

    怎么得到参考电压Vref

    最重要的公式 要记住ADC测量结果无非就是一个代表电压量的,管脚上的模拟信号转换为12二进制数据(0xFFF),例如:如果参考
    发表于 06-27 10:28

    AD9248的VIN+A、VIN-A等对地的输入电压范围到底是多少?

    查看AD9248的手册,电气特性似乎并没有标注模拟输入电压范围,只写了电压跨度(个人猜测应该是说的差分输入的跨度)。AD9248的
    发表于 12-05 07:54

    MSP430单片机之ADC的详细资料说明

    4095,当VIN处于VR-和VR+之间时,按线性比例转换。这样,从MCU读出AD码,即可根据公式倒推回去计算
    发表于 03-21 13:43 2次下载
    MSP430单片机之<b class='flag-5'>ADC</b>的详细资料说明

    N76E003 ADC计算电压

    调试ADC计算电压时,在网络上没有发现讲的很清楚的文章,分享下摸索出的相关知识。最重要的公式要记住ADC测量结果无非就是一个代表
    发表于 11-26 11:36 5次下载
    N76E003 <b class='flag-5'>ADC</b><b class='flag-5'>计算</b><b class='flag-5'>电压</b><b class='flag-5'>值</b>