找回密码
 立即注册
楼主: 神农鼎

12位ADC 计算公式是/4096还是/4095;10位ADC 计算公式是/1024还是/1023

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-9-1 18:51:35 | 显示全部楼层
Yim_*** 发表于 2024-8-31 20:05
我从一开始就简单粗暴的认为应该4096/1024
因为从0-4095/0-1023,就该是4096/1024
不然,0-1算一个数还是两 ...

原理说原理,情理说情理,你拿0到7的数值代表一个数值,7就是最大的数字了,对应的就是111,满量程了二进制没法更细了,到了4096或者4095,精度已经很高了无所谓了。

点评

您这么一回复,就显得我这个简单粗暴的理解很无知。 回味一下,我能这么理解,不应该是拜原理所赐嘛  详情 回复 发表于 2024-9-1 22:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:213
  • 最近打卡:2025-04-23 20:59:03
已绑定手机

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2024-9-1 22:12:42 | 显示全部楼层
liuzon*** 发表于 2024-9-1 18:51
原理说原理,情理说情理,你拿0到7的数值代表一个数值,7就是最大的数字了,对应的就是111,满量程了二进 ...

您这么一回复,就显得我这个简单粗暴的理解很无知。
回味一下,我能这么理解,不应该是拜原理所赐嘛
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:513
  • 最近打卡:2025-05-01 04:31:49

24

主题

515

回帖

986

积分

荣誉版主

积分
986
发表于 2024-9-2 06:49:20 | 显示全部楼层
使用4096计算速度快,精度也能满足要求。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:176
  • 最近打卡:2025-02-19 17:24:49

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-9-2 07:29:07 | 显示全部楼层
社区*** 发表于 2024-9-2 06:49
使用4096计算速度快,精度也能满足要求。

这个是个优点。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:121
  • 最近打卡:2025-05-01 19:17:52
已绑定手机

19

主题

208

回帖

492

积分

中级会员

积分
492
发表于 2024-9-2 12:42:09 | 显示全部楼层
神*** 发表于 2023-5-29 09:36
完美的 12位ADC, 10位ADC,肯定是用 4096, 1024来计算的  !
传统就是这样啊  !
如何解释让大家理解公式 ...

我用反推法说明:
1) 假设一个1位ADC,参考电压 Vref=5V;
    AD转换的时候: Vin>=2.5V 则Vad=1; Vin<2.5V 则Vad=0;

反过来推算:   Vin = Vad/除数 * Vref;

      1.1) 除数使用 2^1 -1=1 时:
              Vad=0, Vin=0V;
              Vad=1, Vin= 1/(2^1 -1) *5V= 5V;
      我们常理判断1位AD值反推输入电平: 低电平0V 或者 高电平5V;

      1.2)  除数使用 2^1 =2 时:
              Vad=0, Vin=0V;
              Vad=1, Vin= 1/(2^1) *5V= 2.5V;
       我们常理判断1位AD值反推输入电平: 低电平0V 或者 高电平2.5V;

下面继续, 将AD假设为2位的;

2) 假设一个2位ADC,参考电压 Vref=5V;
    AD转换的时候:   Vin=   [0-1.25V),  [1.25,2.5),  [2.5,3.75),  [3.75,5);
                            Vad=  0,                1,              2,              3;  
   
反过来推算:   Vin = Vad/除数 * Vref;

      2.1) 除数使用 2^2 -1=3 时:
              Vad= 0,   1,        2,         3;
              Vin = 0V, 1.67V,  3.33V,  5V;
      我们常理判断2位AD值反推输入电平依次是:  0V, 1.67V,  3.33V,  5V;

      2.2)  除数使用 2^2 =4 时:
             Vad= 0,    1,        2,         3;
              Vin = 0V, 1.25V,  2.5V,   3.75V;
      我们常理判断2位AD值反推输入电平依次是:  0V, 1.25V,  2.5V,  3.75V;

从上面计算可知,如果从AD值反推输入电压时,  除数取 (2^n-1) 得到电压值跟符合我们的心理判断!

所以如果是12位ADC,除数我偏向于 4095, 虽然结果是和 4096 差异可以忽略!

点评

我的理解是,如果采集电压大于VREF是出于溢出的状态,如果此时采集值是0x0FFF要除以0x1000,如果用浮点除法的话,那得数永远到不了1,我一般的做法是采集值+1 再除4096,起码溢出后能得到满幅的值  详情 回复 发表于 2024-9-2 18:51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:417
  • 最近打卡:2025-04-30 21:39:09
已绑定手机

34

主题

2096

回帖

2206

积分

荣誉版主

积分
2206
发表于 2024-9-2 18:51:13 | 显示全部楼层
机灵*** 发表于 2024-9-2 12:42
我用反推法说明:
1) 假设一个1位ADC,参考电压 Vref=5V;
    AD转换的时候: Vin>=2.5V 则Vad=1; Vin ...

我的理解是,如果采集电压大于VREF是出于溢出的状态,如果此时采集值是0x0FFF要除以0x1000,如果用浮点除法的话,那得数永远到不了1,我一般的做法是采集值+1 再除4096,起码溢出后能得到满幅的值
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-9-2 21:54:10 | 显示全部楼层
本帖最后由 杨为民 于 2024-9-2 21:56 编辑

(1)为什么要纸上谈兵,为什么造单片机ADC的厂家没有发言权?为什么用户没有发言权

(2)对于12位ADC转换公式中:
ADCn通道的输入电压  = 转换结果 / 4096  * ADC_VRef+

的除数应该是4095还是4096?这是一个伪问题!
(3)厂家和每个用户都可以做一个最简单的测试将ADCn通道的管脚直接连接到ADC_VRef+管脚上,然后编程序读出转换结果的值是多少。
(4)我的观点:无论这个转换值是多少,除数就是那个读数!
(5)如果读出来的读数是4095=0x0FFF,那么上面公式里的除数就是4095
这时不管哪个专家教授,不管在哪本书上,如果还要告诉我那个除数是4096,还要论证一番,我选择用脚指头相信它,但是我编写的程序中我会坚持用4095!
(6)在这个问题答案很明显,两个管脚连接在一起,那么:ADCn通道的输入电压  = ADC_VRef+(你信不信?),这时如果除数不等于这时的转换结果,那么那个转换公式还成立吗?(用脑子想)
(7)我笃定在那个测试中的12位的ADC的读数是4095,10位ADC的读数是1023,有谁愿意帮我测一测?然后将结果公布上来?
(8)40年前我参加研制天文测量仪器,编写测量程序时,有个权威就跟我争论,然后他拿出了美国原始厂家的手册(应该是TI的芯片)给我看。我就做了这个测试,然后他吃饭时就买了份肉给我
(9)几年前有人就某本STC单片机权威书中的ADC转换公式提出质疑,指出按公式做出来的5V电压表对5V标准电压的测试值永远是4.99几伏,然后有人又拿出一本美国芯片厂家手册来证明是除1024,我一看,手册还是来自当年我看到的那个厂家!


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:477
  • 最近打卡:2025-05-01 18:48:32
已绑定手机

6

主题

92

回帖

938

积分

高级会员

积分
938
发表于 2024-9-3 08:07:27 | 显示全部楼层
杨*** 发表于 2024-9-2 21:54
(1)为什么要纸上谈兵,为什么造单片机ADC的厂家没有发言权?为什么用户没有发言权?

(2)对于12位ADC转 ...

寄存器值最高是0x0FFF肯定是对的,因为再加一就进位了呀。难道2bit分辨率你是除以3?但除数就是4096,因为是分了这么多的段数。

点评

你懂逻辑吗?你懂仪器定标吗?造一台12位的仪器,将ADCREF+和ADC测量端口同时连接到国际标准电压5.000000000V上,按你的除4096,你计算出来的结果是ADCn=(4095/4096)*5.000000000V=4.99878V,你觉得正常吗?打嘴炮有  详情 回复 发表于 2024-9-3 08:42
你做实验,你有本事读出多少,除数就应该用多少!如果2BIT的ADC,你有本事读出4,那你就用4。我猜对于2BIT的ADC,能够读出的数是只会是0、1、2、3!  详情 回复 发表于 2024-9-3 08:31
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:477
  • 最近打卡:2025-05-01 18:48:32
已绑定手机

6

主题

92

回帖

938

积分

高级会员

积分
938
发表于 2024-9-3 08:09:08 | 显示全部楼层
就和3位半数字表不可能出2000是一样的,再高就该换挡了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-9-3 08:31:31 | 显示全部楼层
qizhi*** 发表于 2024-9-3 08:07
寄存器值最高是0x0FFF肯定是对的,因为再加一就进位了呀。难道2bit分辨率你是除以3?但除数就是4096,因 ...

你做实验,你有本事读出多少,除数就应该用多少!如果2BIT的ADC,你有本事读出4,那你就用4。我猜对于2BIT的ADC,能够读出的数是只会是0、1、2、3!
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 19:50 , Processed in 0.160012 second(s), 112 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表