12位ADC 计算公式是/4096还是/4095;10位ADC 计算公式是/1024还是/1023
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
所谓的根据AD值求电压就是:通道电压=AD值*斜率。斜率=参考电压的最大值/寄存器最大值。
因此:通道电压=AD值*参考电压的最大值/寄存器最大值。
如不正确请指正。 完美的 12位ADC, 10位ADC,肯定是用 4096, 1024来计算的!
传统就是这样啊!
如何解释让大家理解公式用 4095/1023是错误的,
或者是哪家的ADC不完美,故意修改计算公式的!
我请技术大哥写了几百个字来让大家轻松理解
4095/1023这种想法是错的
===我是解释不清了,我大哥花了1天时间写了个由浅入深的解释
====================================
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 轉換特性曲線是甚麼
为啥我知到的对的知识多?
因为我有技术大哥认真写文档给我解释
我啥我越来越不懂了 ?
因为我的技术大哥都是长篇大论引经据典的解释
===我没时间认真学习,就看不懂了,
也真没时间认真看,也只能承认他们是对的 !
谁让他们本身就是权威呢
xuxinhd 发表于 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+”是正解
zhp 发表于 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的范畴。
STC8H8K64U-45MHz-LQFP64/LQFP48/32, TSSOP20
开天斧, 内置高精准 12位 ADC测试 数据,
下图,测试 16384个点,外部实测,达到真12位ADC的水平
https://www.stcaimcu.com/data/attachment/forum/202211/16/091533bs3lxe9smwtusxhz.jpg
STC8H8K64U-45MHz-LQFP64/LQFP48/32, TSSOP20
开天斧, 内置高精准 12位 ADC测试 数据,
下图,测试 4096个点,外部实测,达到真12位ADC的水平
https://www.stcaimcu.com/data/attachment/forum/202211/16/091627xhv48dd8kss2vy8k.jpg
延伸阅读:
【新提醒】STC8H8K64U 高精准12位ADC 测试数据图表 - ADC/比较器,DMA支持的12位ADC - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区 (stcaimcu.com)
本帖最后由 网老四 于 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)
网老四 发表于 2024-8-17 15:21
我觉得这问题应该应该类似数组下标和数组个数之间的关系.声明4096个成员的数组,实际成员下标是0-4095
12位 ...
例如用三位数表示一个满量程,111是7,假如代表100,那么要用8来代表就会有很高的误差。但是到了1024和4096,这样的数精度已经很高了。用哪个都行。 我从一开始就简单粗暴的认为应该4096/1024
因为从0-4095/0-1023,就该是4096/1024
不然,0-1算一个数还是两个数?
好像既简单又很粗暴{:4_249:} 网老四 发表于 2024-8-17 15:21
我觉得这问题应该应该类似数组下标和数组个数之间的关系.声明4096个成员的数组,实际成员下标是0-4095
12位 ...
虽然用路灯理论可以解释4095是0-4096的中间有4095个有效段,但你不要忘了0也是有效段,虽然0是起始点也是最低点也带表了一个有效段,所以4096的说法是对的