[AT32F437] ADC做数值转换的时候是除以4095,还是4096?

[复制链接]
1272|10
阳光爆裂 发表于 2025-9-17 18:50 | 显示全部楼层 |阅读模式
今天看AT32F437的Sample库时,突然发现ADC采样除以份数的问题。对于12位ADC,理论上ADC外设应该将0-Vref电压之间分成4096份,并将结果保存到数据寄存器。但当我们获取实际值的要做逆运算。这时对于采样值,我们应该除以多少呢?
我看官方的代码是除以的4095,应该也好理解,因为数据寄存器的取值是 0-4095嘛!
多多少少有点疑惑了?

LyricalDawn 发表于 2025-9-18 23:41 | 显示全部楼层
4096啊,一般都是4096就算你4095也没事,损失的精度很少!
LcwSwust 发表于 2025-9-18 10:52 | 显示全部楼层
考虑一下假如ADC只有1位的情况。
 楼主| 阳光爆裂 发表于 2025-9-19 10:55 | 显示全部楼层
LyricalDawn 发表于 2025-9-18 23:41
4096啊,一般都是4096就算你4095也没事,损失的精度很少!

我觉得也是 4096.
分成了4096份嘛
 楼主| 阳光爆裂 发表于 2025-9-19 10:55 | 显示全部楼层
LcwSwust 发表于 2025-9-18 10:52
考虑一下假如ADC只有1位的情况。

但是官方的示例代码确实是 4095。
这个要如何解释呢?
LcwSwust 发表于 2025-9-19 11:06 | 显示全部楼层
本帖最后由 LcwSwust 于 2025-9-19 11:24 编辑
阳光爆裂 发表于 2025-9-19 10:55
但是官方的示例代码确实是 4095。
这个要如何解释呢?

其实都可以,总之根据实际情况而定。
比如1位的ADC,参考电压是2V,
当电压在0V~1V时,ADC值为0,
当电压在1V~2V时,ADC值为1,
那么你可以认为ADC为1代表1V,但有些人可能认为你这ADC怎么没达到满量程?
那行,咱也可以认为1代表2V。

个人认为4096更好,因为除以4096可以用右移12位代替,更省CPU时间。
 楼主| 阳光爆裂 发表于 2025-9-19 15:05 | 显示全部楼层
LcwSwust 发表于 2025-9-19 11:06
其实都可以,总之根据实际情况而定。
比如1位的ADC,参考电压是2V,
当电压在0V~1V时,ADC值为0,

4096可以使用右移代替。
这个理由 实在太棒了
抒情黎明 发表于 2025-9-27 10:17 | 显示全部楼层
LcwSwust 发表于 2025-9-19 11:06
其实都可以,总之根据实际情况而定。
比如1位的ADC,参考电压是2V,
当电压在0V~1V时,ADC值为0,

大佬啊!
讲得透彻了!直接指导实践应用了
观星者宁静 发表于 2025-9-29 20:17 | 显示全部楼层
肯定是4096.
不过,确实如果4096的话,采样数据不可能满值
观星者宁静 发表于 2025-9-30 11:19 | 显示全部楼层
还真没有想过这个问题,一直使用 4096
咖啡色牛奶 发表于 2025-9-30 11:28 | 显示全部楼层
观星者宁静 发表于 2025-9-29 20:17
肯定是4096.
不过,确实如果4096的话,采样数据不可能满值

理论上来说,本来就不是满值。或者说这种逐次逼近式的ADC本来也采集不到满值。正确使用ADC时 到了4095的时候,实际的电压就是在4095/4096*Vref 到 Vref之间。

以前还是挺纠结的,,后来看开了。。。就得按照4096来除
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

41

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部