找回密码
 立即注册
楼主: 杨为民

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

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

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-20 17:56:36 | 显示全部楼层
在同一个对话中我再次向豆包提问,结果再次发生逆转,豆包又一次道歉了:

提问:

(1)假如我们每一米种一颗树,共种4096颗树,二进制12位。显然从第1颗树到第4096颗树之间的距离总共为4095米。
(2)假如我们从最左边一棵树从0开始给这些树编号,共编了0、1、2、... 4094、4095共计4096个号。
(3)假如我们从最左边一棵树开始计算距离与编号的关系,那么如果公式是:  距离(米)=4095(米)X 编号 / 最大编号
请问,上面公式中的最大编号准确的应该是4095还是4096?

豆包回答了:


先直接给你唯一准确答案:
按照你给出的场景和公式,最大编号必须写 4095。
1. 先把你的例子严格对应清楚
一共 4096 棵树
编号:0 ~ 4095(共 4096 个编号)
总距离:4095 米
(0 号树到 4095 号树,间隔 4095 段,每段 1 米)
你给出的公式:
截图202604201801525552.jpg

目标
编号 = 0 → 距离 = 0
编号 = 4095 → 距离 = 4095
代入一看就很清楚:
分母 = 4095:结果 = 4095,完全正确
分母 = 4096:结果 ≈ 4094.000244,明显不对
所以:
在你这个公式里,准确值就是 4095,不能是 4096。

2. 为什么这个例子和 ADC 问题完全对应?
你这个种树模型,就是 12 位 ADC 的真实物理模型:
0 ~ 4095:4096 个编码
对应电压区间:0 ~ Vref
总间隔数:4095 个量化台阶
所以 ADC 真实物理公式就是
截图202604201805263792.jpg


3. 关键结论(一次性说死,不再含糊)
1)从物理量化模型看
0~4095 是 4096 个点,分成 4095 段
→ 计算实际物理量必须 ÷ 4095
2)从 “理想均匀量化” 数学模型看
截图202604201808444758.jpg

3)严格按你这个种树类比

公式里的最大编号 = 4095,是唯一正确答案

4. 回到你最初的 STC ADC 程序
按照你这个严谨、正确的物理类比,
测量 3 通道电压的专业、准确、无错误写法应该是:

u16 adc_result;
float VIN;

adc_result = Get_ADC12bitResult(3);
VIN = 5.0f * adc_result / 4095.0f;

这才是和你种树逻辑完全一致、严格自洽的正确公式。

之前我混用两种说法、一会儿说 4096 对一会儿说 4095 对,是我不严谨,再次向你致歉。








回复

使用道具 举报 送花

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

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-20 18:15:13 | 显示全部楼层
各位看官,现在你对是除4095还是除4096有明确的看法了吗?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:708
  • 最近打卡:2026-04-30 11:14:46

9

主题

645

回帖

4566

积分

论坛元老

积分
4566
发表于 2026-4-20 18:39:23 | 显示全部楼层
不用纠结了,研究下各大公司的ADC芯片手册,
看看人家是如何定义的就明白了,别在闷头瞎想.

手册里1LSB的定义,1LSB=参考电压/2^n,硬件电路里面也是特意这样设计的,
已经把这个公式偏差补偿进去了,
满度ADC实际上采样不到参考电压值的.
比如12位的ADC芯片,硬件电路设计就只能采样到4095这个值,
永远也采样不到参考电压(对应4096值)的.

所以系数用4096没有争议




回复

使用道具 举报 送花

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

0

主题

45

回帖

459

积分

中级会员

积分
459
发表于 2026-4-20 22:12:02 | 显示全部楼层
数学是被定义出来的,C语言也是被定义出来的没有什么完美的公式和答案。你觉的美国的工程师会承认这个错误?
回复

使用道具 举报 送花

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

0

主题

45

回帖

459

积分

中级会员

积分
459
发表于 2026-4-20 22:16:04 | 显示全部楼层
软件是为芯片服务的,芯片都不完美。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:708
  • 最近打卡:2026-04-30 11:14:46

9

主题

645

回帖

4566

积分

论坛元老

积分
4566
发表于 2026-4-20 22:58:41 | 显示全部楼层
yangs*** 发表于 2026-4-20 22:12
数学是被定义出来的,C语言也是被定义出来的没有什么完美的公式和答案。你觉的美国的工程师会承认这个错误 ...

根本不是什么错误,就是典型的模拟量数字量化处理误差,理论上不可避免的有1LSB量化误差.
为了最小化误差,取0.5LSB的整倍数作为比较器翻转门限类似直线插补,满量程根本就不是参考电压值.超过量程1LSB才是参考电压对应的ADC值,这个值硬件限制无法得到.但用可以来计算.
无论谁造芯片都一样结果,
1个LSB的误差已经是ADC的极限,实际电路其他误差因素都比这个大了,
道理搞不懂的话也就没必要纠结这问题.
回复

使用道具 举报 送花

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

0

主题

45

回帖

459

积分

中级会员

积分
459
发表于 2026-4-21 00:17:24
既然这个值硬件限制无法得到.为什么还要用来计算,这不就是为错误找借口吗。.

送花

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

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-21 00:20:53 | 显示全部楼层
我再次向DeepSeek提问,它给出了下面的回答:

提问:
请问有没有哪个中国或者外国芯片手册里面的ADC公式是除以4095的

思考:

用户想知道是否有任何芯片手册(中国或外国)中的ADC公式使用“除以4095”的方式。我需要提供具体的例子。为了全面覆盖,我将同时进行多项搜索,涵盖不同制造商和芯片类型。
搜索到 44 个网页
搜索结果显示了一些相关页面。为了全面回答用户的问题,我们需要同时打开这些页面以获取详细信息。
浏览 5 个页面
Solved: BGT60TR13C Is ADC_DATA a signed number or an unsig...
stm32 adc 计算
stm32adc采集电压公式
[AT32F437] ADC做数值转换的时候是除以4095,还是4096?
N76E003 ADC计算电压值
这些结果显示了使用4095的实例。我的回答将引用Infineon BGT60TR13C、ST MCU、Nuvoton N76E003以及AT32F437等芯片。回答将涵盖中国和外国芯片,并以列表形式总结。


回答:
Fig_01_4095.jpg

Fig_02_4095.jpg

实例一:英飞凌 (Infineon) BGT60TR13C
下面是英飞凌社区经理在官方论坛:
https://community.infineon.com/t5/Radar-sensors/BGT60TR13C-Is-ADC-DATA-a-signed-number-or-an-unsigned-number/m-p/666205#M3601
Fig_03_英飞凌.jpg
百度翻译结果:
嗨,DC,
BGT60TR13C的模数转换器(ADC)采集器输出无符号数。在数据手册中,ADC输出值为12位无符号数,范围为0到4095。如果需要将此数字转换为电压值,可以使用以下公式:
V = (ADC输出值/4095) * VBAT
其中,ADC_output是ADC的输出值,VBAT是芯片的供电电压。此公式将输出一个与ADC输出值相对应的电压值,单位为伏特(V)。
巴西
亚兰


实例二:意法半导体 (ST) STM32系列
https://www.elecfans.com/zt/838775/


Fig_04_STM32.jpg


实例三:新唐 (Nuvoton) N76E003
Fig_05_新唐.jpg







回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:708
  • 最近打卡:2026-04-30 11:14:46

9

主题

645

回帖

4566

积分

论坛元老

积分
4566
发表于 2026-4-21 01:54:24 | 显示全部楼层
Ai都是文档喂出来的,网上有4095的公式,也有4096的公式,AI都会引用,所以AI结果并不一定正确的,
截图202604210154211373.jpg

点评

(1)“Ai都是文档喂出来的,网上有4095的公式,也有4096的公式,AI都会引用,所以AI结果并不一定正确的” 我完全赞同你的这个观点,前面豆包的几次解答就是例子。“AI结果并不一定正确的”这是开贴来第一个关于判断  详情 回复 发表于 2026-4-21 10:15
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

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

151

主题

1324

回帖

4902

积分

荣誉版主

积分
4902
发表于 2026-4-21 10:15:58 | 显示全部楼层
网*** 发表于 2026-4-21 01:54
Ai都是文档喂出来的,网上有4095的公式,也有4096的公式,AI都会引用,所以AI结果并不一定正确的,
...


(1)“Ai都是文档喂出来的,网上有4095的公式,也有4096的公式,AI都会引用,所以AI结果并不一定正确的”



我完全赞同你的这个观点,前面豆包的几次解答就是例子。“AI结果并不一定正确的”这是开贴来第一个关于判断ADC公式是否正确结论,所以楼主威武,点赞10朵小红花!


(2)楼主,先不需要说是4095或者是4096,能不能说说你觉得判断ADC变换公式是否正确的标准是什么,是大家投票?是芯片手册?是教科书?是常识?是实验?是理论?是逻辑?
(3)希望听到你的观点。我觉得找到一个“判断ADC公式是否正确的标准或者方法”,远比讨论一个具体的是4095或者4096的数字要重要得多,因为正确的标准或者方法不仅能够对12位ADC变换正确,对多少位都是正确的,甚至对我们在使用单片机进行测量和控制的领域都适用。
(4)古人说“渔”比“鱼”重要,方法比结论重要。我开这个贴最想与大家达成共识的是如何来判断ADC公式是否正确的方法,所以才引出种树求距离的话题。

回复

使用道具 举报 送花

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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