找回密码
 立即注册
查看: 5201|回复: 34

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

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-5-28 23:12:08 | 显示全部楼层 |阅读模式
8H/8G/8A8K64D432G的ADC超级完美 !
用经典教科书的公式,12位ADC计算公式:
ADCn通道的输入电压  = 转换结果 / 4096  * ADC_VRef+
10位ADC计算公式
ADCn通道的输入电压  = 转换结果 / 1024  * ADC_VRef+
ADC_VRef+ 可以是  2.4V ~ ADC_VCC/MCU_VCC
不要用人为修正的公式,那是有瑕疵的ADC才使用的

======================================
有朋友质疑上面的计算公式 4096应该改成4095:


12位ADC 计算公式是/4096,还是/4095;

10位ADC 计算公式是/1024,还是/1023


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2024-05-15 15:38:53

0

主题

3

回帖

56

积分

注册会员

积分
56
发表于 2023-5-28 23:30:46 | 显示全部楼层
所谓的根据AD值求电压就是:通道电压=AD值*斜率。斜率=参考电压的最大值/寄存器最大值。
因此:通道电压=AD值*参考电压的最大值/寄存器最大值。
如不正确请指正。

点评

您的整体思路是正确的,ADC的转换其实就是一个一次函数y=kx+b的关系 STC的12位ADC的线性度应该算是很不错的,对应到y=kx+b,b为0,k为一个恒定值 k=ADC的参考电压值/ADC的最大量化份数 ADC的参考电压值=VREFP - VREF  详情 回复 发表于 2023-5-29 10:16
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-5-29 09:36:12 | 显示全部楼层
完美的 12位ADC, 10位ADC,肯定是用 4096, 1024来计算的  !
传统就是这样啊  !
如何解释让大家理解公式用 4095/1023是错误的,

或者是哪家的ADC不完美,故意修改计算公式的

我请技术大哥
写了几百个字来让大家轻松理解
4095/1023这种想法是错的
===我是解释不清了,我大哥花了1天时间写了个由浅入深的解释

截图202408171524311051.jpg

====================================

8H/8G/8A8K64D4/32G的ADC超级完美 !
用经典教科书的公式,12位ADC计算公式:
ADCn通道的输入电压  = 转换结果 / 4096  * ADC_VRef+
10位ADC计算公式
ADCn通道的输入电压  = 转换结果 / 1024  * ADC_VRef+
ADC_VRef+ 可以是  2.4V ~ ADC_VCC/MCU_VCC
不要用人为修正的公式,那是有瑕疵的ADC才使用的



ADC 轉換特性曲線是甚麼
截图202408171527189381.jpg

截图202408171528009135.jpg

截图202408171529169510.jpg

截图202408171530085665.jpg

截图202408171530505315.jpg

截图202408171531416320.jpg

为啥我知到的对的知识多?

因为我有技术大哥认真写文档给我解释
我啥我越来越不懂了 ?
因为我的技术大哥都是长篇大论引经据典的解释
===我没时间认真学习,就看不懂了,
        也真没时间认真看,也只能承认他们是对的 !
        谁让他们本身就是权威呢


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2023-5-29 10:16:27 | 显示全部楼层
xuxi*** 发表于 2023-5-28 23:30
所谓的根据AD值求电压就是:通道电压=AD值*斜率。斜率=参考电压的最大值/寄存器最大值。
因此:通道电压=AD ...

您的整体思路是正确的,ADC的转换其实就是一个一次函数y=kx+b的关系
8H8K64U, 32G12K128 系列的12位ADC的线性度应该算是很不错的,
对应到y=kx+b,b为0,k为一个恒定值,k=ADC的参考电压值/ADC的最大量化份数
ADC的参考电压值=VREFP - VREFN,其中VREFP=GND=0,VREFP为参考电压的最大值
12位ADC的的最大量化份数为4096,即将ADC的参考电压值平均分成4096份

所以您的理解“寄存器最大值”不太准确,应该是“寄存器最大值+1”
楼主的“12位ADC的ADCn通道的输入电压  = 转换结果 / 4096  * ADC_VRef+”是正解

点评

对的,ADC的转换其实就是一个一次函数y=kx+b的关系,b就是0点误差(正或负均可能),STC8系列、STC32系列的ADC的0点误差基本就是0,线性也非常高,评估ADC线性必须使用更精确的DAC输出电压来评估。 对于逼近型(SAR  详情 回复 发表于 2023-5-29 11:31
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:50
  • 最近打卡:2025-04-30 22:59:03

73

主题

5882

回帖

1万

积分

超级版主

积分
12073
发表于 2023-5-29 11:31:08 | 显示全部楼层
zh*** 发表于 2023-5-29 10:16
您的整体思路是正确的,ADC的转换其实就是一个一次函数y=kx+b的关系
STC的12位ADC的线性度应该算是很不错 ...
对的,ADC的转换其实就是一个一次函数y=kx+b的关系,b就是0点误差(正或负均可能),
STC8系列、STC32系列的ADC的0点误差基本就是0,线性也非常高,评估ADC线性必须使用更精确的DAC输出电压来评估。

对于逼近型(SAR)ADC,增益为1时,N位ADC的转换结果 = 2^N * Vin/Vref,最大值是2^N -1。
或者,输入电压 Vin = code * Vref/2^N,code最大值为2^N -1。
  8位ADC就是 ADC code =   256*Vin/Vref,code最大值是255, Vin = code *Vref/256。
10位ADC就是 ADC code = 1024*Vin/Vref,code最大值是1023,Vin = code *Vref/1024。
12位ADC就是 ADC code = 4096*Vin/Vref,code最大值是4095,Vin = code *Vref/2048。

SAR ADC的过程有点像天平,比如12位ADC,对应天平砝码是1、2、4、8……2048克。
采样电压之后,
第一步,用最大的砝码(电压)2048去比较,
      若输入电压大于比较电压则最高位为1,这个砝码(电压)留在秤盘上。
      若输入电压小于比较电压则最高位为0,这个砝码(电压)从秤盘拿走。
第二步,用次大的砝码(电压)1024去比较,
      若输入电压大于比较电压则次高位为1,这个砝码(电压)留在秤盘上。
      若输入电压小于比较电压则次高位为0,这个砝码(电压)从秤盘拿走。
不断重复上述过程,最后得到结果,最大值就是将所有砝码加起来,4095。

以前的SAR ADC架构是输入采样电路、R-2R做的DAC、比较器、数据锁存器(数据接DAC的输入),ADC的过程跟上述描述的一样。
现代的SAR ADC一般都是开关电容式的,在集成电路中,做十几个精确比例的电容比较容易,并且受稳定影响比较小。

下面为常见几种ADC的对比:

SAR ADC的速度中等(一般几百KHz到10MHz之间比较多),分辨率中等,高速和高分辨率成本会非常高,很少见到14bit或以上的SAR ADC。
高速ADC一般是FLASH ADC,分辨率一般不超过10位的,常见8位的,里面有256个比较器,一个时钟就得到一个结果,常见速度可达200MHz。
双积分、三重积分ADC、计数式ADC速度慢,但是能做高分辨率,高线性,高的工频抑制能力。
Sigma Delta ADC跟双积分类似,有更高的分辨率、更高的线性。
至于VFC,即电压-频率转换,可以将电压转成频率,我认为不属于ADC的范畴。

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2023-5-29 11:32:18 | 显示全部楼层
STC8H8K64U-45MHz-LQFP64/LQFP48/32, TSSOP20
开天斧, 内置高精准 12位 ADC  测试 数据,
下图,测试 16384个点,  外部实测,达到真12位ADC的水平



STC8H8K64U-45MHz-LQFP64/LQFP48/32, TSSOP20
开天斧, 内置高精准 12位 ADC  测试 数据,
下图,测试 4096个点,  外部实测,达到真12位ADC的水平


延伸阅读:
【新提醒】STC8H8K64U 高精准12位ADC 测试数据图表 - ADC/比较器,DMA支持的12位ADC - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:363
  • 最近打卡:2025-04-30 00:05:02

6

主题

319

回帖

2200

积分

金牌会员

积分
2200
发表于 2024-8-17 15:21:15 | 显示全部楼层
本帖最后由 网老四 于 2024-8-17 18:16 编辑

我觉得这问题应该应该类似数组下标和数组个数之间的关系.声明4096个成员的数组,实际成员下标是0-4095
12位的ADC来说,理论上0V输入到满幅输入的采样值范围是0-4095,把这看成直线段,那么这个直线上等距分为4096个点和4095小段.
那么每一段的电压值应该=基准电压/4095
那么实际采样到的ADC值对应的电压值应该=ADC值*(基准电压/4095)

如果12位ADC定义满度值为0-4046,那么实际量程范围内划分0-4097个点,4096个线段,
那么每一段的电压值应该=基准电压/4096
那么实际采样到的ADC值对应的电压值应该=ADC值*(基准电压/4096)


回复 支持 反对

使用道具 举报 送花

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

15

主题

265

回帖

1387

积分

金牌会员

积分
1387
发表于 2024-8-31 18:58:07 | 显示全部楼层
网*** 发表于 2024-8-17 15:21
我觉得这问题应该应该类似数组下标和数组个数之间的关系.声明4096个成员的数组,实际成员下标是0-4095
12位 ...

例如用三位数表示一个满量程,111是7,假如代表100,那么要用8来代表就会有很高的误差。但是到了1024和4096,这样的数精度已经很高了。用哪个都行。
回复 支持 反对

使用道具 举报 送花

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

36

主题

560

回帖

1885

积分

荣誉版主

积分
1885
发表于 2024-8-31 20:05:26 | 显示全部楼层
我从一开始就简单粗暴的认为应该4096/1024
因为从0-4095/0-1023,就该是4096/1024
不然,0-1算一个数还是两个数?
好像既简单又很粗暴
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:372
  • 最近打卡:2025-05-01 10:53:48

12

主题

125

回帖

1685

积分

金牌会员

积分
1685
发表于 2024-8-31 21:08:42 | 显示全部楼层
网*** 发表于 2024-8-17 15:21
我觉得这问题应该应该类似数组下标和数组个数之间的关系.声明4096个成员的数组,实际成员下标是0-4095
12位 ...

虽然用路灯理论可以解释4095是0-4096的中间有4095个有效段,但你不要忘了0也是有效段,虽然0是起始点也是最低点也带表了一个有效段,所以4096的说法是对的
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-1 19:44 , Processed in 0.329771 second(s), 123 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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