找回密码
 立即注册
查看: 252|回复: 58

关于12位ADC 计算公式是除4096还是除4095的问题讨论

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:76
  • 最近打卡:2026-04-30 21:57:39

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-18 18:59:35 | 显示全部楼层 |阅读模式
1)这是12023年的帖子。
12位ADC 计算公式是/4096还是/4095;10位ADC 计算公式是/1024还是/1023
https://www.stcaimcu.com/thread-2438-1-1.html
(出处: 国芯人工智能技术交流网站)

在帖子中对于ADC转换公式“ADCn通道的输入电压  = 转换结果 / 4096  * ADC_VRef+”,各个大V和网友也纷纷给出了自己的看法。

2)我也在17楼给出了我的观点:
除数应该4095还是4096这是一个伪问题!
厂家和每个用户都可以做一个最简单的测试ADCn通道的管脚直接连接到ADC_VRef+管脚上,然后编程序读出转换结果的值是多少。
我的观点:无论这个转换值是多少,除数就是那个读数!
如果读出来的读数是4095=0x0FFF,那么上面公式里的除数就是4095
3)近三年过去了,有网友又顶起了这个帖子,认为“4096是点.4095是段,电压是分段,不是分点...所以4095是在段内更精确.
我的回复是:
不是精确,而是正确。二者的差别是:数学和逻辑上的正确是指在任意的精度下都是正确的。工程意义上的精确是指在一定的精度是正确的,超过了这个精度就是不正确的了!
4)我查了最新的芯片手册,结果还是4096
新_ADC_变换公式.jpg
5)按照同一个芯片手册ADC转换结果是:
新_ADC_变换结果.jpg
读取ADC结果的最大值为0xFFF=4095,不可能读出4096=0x1000
6那么请有条件的网友亲自动手在实验板上做以下3个实验,请没有条件的网友亲自动脑子在大脑里做以下3个实验
第一个实验:将“ADC被转换通道的输入脚”用短接线连接到“ADC外部参考源”上进行测试,这时“ADC被转换通道的输入电压Vin”肯定等于“ADC外部参考源电压”(请不要问为什么等)。这时按照公式22.3.2的计算:  12ADC转换结果 = 4096
请问动手的和动脑的网友,你们的“12ADC转换结果”是4096吗?
第二个实验:将“ADC被转换通道的输入脚”用短接线连接到“ADC外部参考源”上进行测试这时“ADC被转换通道的输入电压Vin”肯定等于“ADC外部参考源电压”(请不要问为什么等)。这时按照公式22.3.3的推导:  用初中代数移项法得到 1 = 12ADC转换结果 / 4096
请问动手的和动脑的网友,你们的“12ADC转换结果”是4096吗?
第三个实验:将“ADC被转换通道的输入脚”用短接线连接到“MCU工作电压Vcc管脚”上进行测试,这时“ADC被转换通道的输入电压Vin”肯定等于“MCU工作电压Vcc”(请不要问为什么等)。这时按照公式22.3.4的计算:  用初中代数消去法得到 1 = 4096 / 12ADC转换结果
请问动手的和动脑的网友,你们的“12ADC转换结果”是4096吗?

7其实有网友在该贴的36楼已经给出了STC的正确公式,正确方法和正确思路,他在2025年说:
一直是用STC官方的公式:Ux = Vref * Nx / Nref
Vref = 1190mV
(读取芯片信息可以查看这个值的)
Nref = Get_ADCResult(15);
Nx  =
测量的通道的值
都不用管它是4095,1023,还是4096,1024

8)对于STC官方的正确公式:Ux = Vref * Nx / Nref
可以扩展到任意情况都是正确的,只要Vref 解释为ADC外部参考源电压”Nref 解释为ADC外部参考源电压12ADC转换结果”即可。  
也就是Nref = Get_ADCResult(ADC外部参考源电压通道)相当于将“ADC被转换通道的输入脚”用短接线连接到“ADC外部参考源”上进行测量的测量值。
9)建议在芯片手册中:
首先介绍一下正确的“Ux = Vref * Nx / Nref”ADC转换公式的原理。
其次厂家对于如果上面3个实验的结果“12ADC转换结果”如果都是4095,那就理直气壮第在22.3.222.3.322.3.4公式在写4095毕竟科学实验是检验公式是否正确的唯一标准,而手册也是供用户在实际实验中使用的。
10)当然还是会有人奇怪芯片手册为什么与权威教科书上的不同,建议在芯片手册的附录加一个条目,内容可以参考下面DeepSeek给出的回答
提问
12位的ADC转换公式是什么,其中的除数应该是4095还是4096
思考
嗯,用户问的是12ADC的转换公式,具体是关于除数应该是4095还是4096。这是一个比较具体的电子工程或嵌入式开发问题。12ADC的最大数字输出是2^12 - 1 = 4095,而满量程输入对应的数字量通常是4095但转换公式中分母的选择取决于参考电压和期望的映射关系
我记得标准公式是:Vin = (ADC_Code / 4095) * Vref,这样当ADC_Code=4095时,Vin=Vref。如果用4096,那么最大码值4095对应的电压会是(4095/4096)*Vref,略小于Vref这通常不是期望的满量程映射。但有些情况下,比如为了计算方便或者考虑偏移误差,可能会用4096。需要从原理上对为什么用4096进行解释。
用户深层需求可能是想确认在实际编程或电路设计中该用哪个值,避免计算错误。应该给出明确答案,并解释原因另外,可以提一下不同应用场景的惯例,比如大多数ADC数据手册使用4095,而有些软件滤波或平均计算中可能用4096来简化移位运算。但核心答案应该是4095
考虑到用户问的是公式,需要清晰给出公式并说明除数的物理意义。回复要准确、简洁,避免歧义。
回答:对于12ADC,标准转换公式的除数应该是4095,而不是4096
具体公式如下:
正确_ADC_变换公式.jpg
1.为什么是4095
- 12ADC的数字输出范围是 0 4095”(共4096个离散值)。
- 当输入电压等于参考电压时,ADC输出应为 4095”(满量程),而不是4096(因为4096无法用12位二进制表示)。
- 为了保证满量程时输入电压等于参考电压,分母必须用4095,即:
   正确_ADC_变换结果.jpg
2. 何时会用到4096
少数场合(如某些DSP计算或避免浮点运算)会使用4096来近似,但这是“有误差的”
- 4096时,满量程输出为:
正确_ADC_变换结果2.jpg
存在约0.024%增益误差。
- 有在明确允许这种微小误差或后续有校正时,才可能采用4096
3. 总结
- 理论正确、工程常用:分母 = 4095
- 特殊近似用法:分母 = 4096(需明确知道误差影响)
建议始终使用4095,除非你使用的ADC数据手册或算法明确要求用4096

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-18 23:02:57 | 显示全部楼层
可能用4095会多一点
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2026-05-01 00:01:26
已绑定手机

0

主题

45

回帖

459

积分

中级会员

积分
459
发表于 2026-4-19 00:37:19 | 显示全部楼层
就是两点成一条直线,总不能说是两条直线吧,三点才成两条直,所以12位只有4095个LSB
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:60
  • 最近打卡:2026-05-01 05:53:11
已绑定手机

3

主题

94

回帖

505

积分

高级会员

积分
505
发表于 2026-4-19 06:43:26 | 显示全部楼层
感觉这个问题在小学二年级就纠结过:10米长的道路每隔两米种1棵树,一共要种几棵树。

点评

一语道破真谛!所以送花给你! (1)假如我们每一米种一颗树,共种12位4096颗树。 (2)假如我们从最左边一棵树从0开始给这些树编号,共编了0、1、2、... 4094、4095共计4096个号。 (3)假如我们从最左边一棵树开  详情 回复 发表于 2026-4-19 20:24
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2026-05-01 00:01:26
已绑定手机

0

主题

45

回帖

459

积分

中级会员

积分
459
发表于 2026-4-19 16:15:17 | 显示全部楼层
如果把地围起来那你只能种5棵因为只有5段,你总不能种要6棵吧,因为那两棵在边边上溢出了。边上是属于别人和你共有的。

点评

“边上是属于别人和你共有的”,请继续你的思路,把每颗树种在每一段的中间,然后给出距离与树的编号关系的公式,我重新送你20朵小红花  详情 回复 发表于 2026-4-19 20:32
应该点赞送花,只是稍稍粗心了点,所以扣了点分:区分5段地必须种6颗树,编号为0、1、2、3、4、5共计6个号码  详情 回复 发表于 2026-4-19 20:28
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2026-05-01 00:01:26
已绑定手机

0

主题

45

回帖

459

积分

中级会员

积分
459
发表于 2026-4-19 16:18:29 | 显示全部楼层
也就是说以点为中心挖个坑,有半个坑是别人的地……

点评

给出距离与树的编号关系的公式,我重新送你20朵小红花  详情 回复 发表于 2026-4-19 20:34
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:76
  • 最近打卡:2026-04-30 21:57:39

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-19 20:24:45 | 显示全部楼层
wul*** 发表于 2026-4-19 06:43
感觉这个问题在小学二年级就纠结过:10米长的道路每隔两米种1棵树,一共要种几棵树。 ...

一语道破真谛!所以送花给你!


(1)假如我们每一米种一颗树,共种12位4096颗树
(2)假如我们从最左边一棵树从0开始给这些树编号,共编了0、1、2、... 4094、4095共计4096个号
(3)假如我们从最左边一棵树开始计算距离与编号的关系,那么公式应该是:  距离=4095 X 编号 呢?
还是公式应该是:  距离=4096 X 编号 呢?
(4)假如现在你穿越回小学二年级,老师问你在公式里是应该乘4095还是乘4096?你会回答是乘多少?
(5)其实这个问题等价的是:12位AD,在0(地线)到5V(参考电压)之间总共种4096颗树树的编号是从0到4095共计4096个编号,那么ADC电压变换公式应该是: 被测电压 = 5V * 树的编号 / 4095,
原因很简单:种在5V电压那里的那颗树的编号是“4095”二不是“4096”!


点评

昨晚我在梦里穿越回到小学二年级,看到我在7楼黑板上的答题: (1)假如我们每一米种一颗树,共种12位4096颗树。 (2)假如我们从最左边一棵树从0开始给这些树编号,共编了0、1、2、... 4094、4095共计4096个号。  详情 回复 发表于 2026-4-20 07:20
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:76
  • 最近打卡:2026-04-30 21:57:39

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-19 20:28:31 | 显示全部楼层
yangs*** 发表于 2026-4-19 16:15
如果把地围起来那你只能种5棵因为只有5段,你总不能种要6棵吧,因为那两棵在边边上溢出了。边上是属于别人 ...

应该点赞送花,只是稍稍粗心了点,所以扣了点分:区分5段地必须种6颗树,编号为0、1、2、3、4、5共计6个号码
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:76
  • 最近打卡:2026-04-30 21:57:39

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-19 20:32:38 | 显示全部楼层
yangs*** 发表于 2026-4-19 16:15
如果把地围起来那你只能种5棵因为只有5段,你总不能种要6棵吧,因为那两棵在边边上溢出了。边上是属于别人 ...

“边上是属于别人和你共有的”,请继续你的思路,把每颗树种在每一段的中间,然后给出距离与树的编号关系的公式,我重新送你20朵小红花
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:76
  • 最近打卡:2026-04-30 21:57:39

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-19 20:34:39 | 显示全部楼层
yangs*** 发表于 2026-4-19 16:18
也就是说以点为中心挖个坑,有半个坑是别人的地……

给出距离与树的编号关系的公式,我重新送你20朵小红花
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-5-1 10:30 , Processed in 0.140298 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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