zhfeng 发表于 2009-12-12 23:43:25

M8的ADC转换后的结果为什么是除1024,而不是1023

手册中计算实际电压的公式为:
ADC = Vin*1024 / VREF,则实际电压Vin = ADC*VREF / 1024
为什么不是1023呢?

10位对应最大值为0x3ff=1023,该值对应的即是VREF的值
最小值时为0,该值对应的是0V的值

按此看的话,Vin=0+(Vmax-0)(Dx-0)/(1023-0)=VREF*Dx/ 1023
其中Vmax=VrefDx=ADC,采集到的数字量

avr-qq 发表于 2009-12-12 23:47:11

16 进制应该除以15 吗?

yiminglei 发表于 2009-12-13 00:43:41

一共1024份嘛。。。

aimm 发表于 2009-12-13 00:49:43

当然是 1024

laodangong 发表于 2009-12-13 07:41:11

当然是1023不要想当然。

ckvlhf 发表于 2009-12-13 08:56:45

呵呵,你当0不是数啊?

z_zt 发表于 2009-12-13 09:04:48

0~1023,共1024个值,楼主你想想C语言里数组的定义方法也是这样的:
unsigned char A;
A=0x11; --正确
A=0x22; --正确
A=0x12; --正确
A=0x23; --错误

zhfeng 发表于 2009-12-13 11:14:31

假设VREF=2.56V,如果是除以1024,那么当输入电压此时为2.56V时

计算得到的电压应该是Vin=1023*2.56/1024=2.5575V 与2.56V相比就会产生误差

如果是除以1023,则Vin刚好是2.56V ,因此,我认为还是1023

另外,附一般的AD转换器的标度变换公式,来自ADC0809 手册:

Vin/(Vfs-Vz)=Dx/(Dmax-Dmin)

Vin为输入电压,Vfs为满量程电压,Vz为零电压 ,Dx为所测得的数字量,Dmax为最大数字量,Dmin为最小数字量

在测控原理中看到的标度变换公式也和上面相同

voidx 发表于 2009-12-13 11:34:29

假设VREF=2.56V,如果是除以1024,那么当输入电压此时为2.56V时
---------------------------------------------------------------

ADC转换值最高是1023,换句话说,可准确测量最高输入电压是2.5575V,
2.56输入超标了,计算有误差是应该的。

rei1984 发表于 2009-12-13 11:44:52

学习了。觉得lz说的有道理!

特意查了ds:http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_513829.JPG
(原文件名:1.JPG)

上面写的Vin量程是0- Vref的 ,感觉ls说的不太对哦。这个问题,我同意lz的说法,应该是除以1023.

cowboy 发表于 2009-12-13 11:46:43

Vin = ADC*VREF / 1024 是去掉了小数部分,感觉可以用四舍五入,更精准一点。即 Vin = (ADC+0.5)*VREF / 1024 或 Vin = ADC*VREF / 1024 + Vref/2048。有些ADC在硬件上叠加了1/2LSB,不应AVR的有没有?

hebj 发表于 2009-12-13 12:06:18

手册的公式大概这么理解吧:
为了好说明,先做个假设,假设参考电压不是2.56V,而是1.024V,输入电压为Vin,转换后的数字为ADC
那么按手册的说法,就是:
Vin < 0.0010V时,ADC=0
0.0010 <= Vin < 0.0020V时,ADC=1
...
1.0220 <= Vin < 1.0230V时,ADC=1022
1.0230 <= Vin 时,ADC=1023

所以你可以认为1.024V为1024,但转换器不能表示,只能表示为1023,
就算是1.240V也是表示为1023.

csclz 发表于 2009-12-13 12:47:11

shark 发表于 2009-12-13 13:04:12

你要把量化值0当成一个区间来看,同理1,2,.... 1023 ,一共有1024个区间,所以要除以1024 . 量化有两种方式,参见下图:

http://cache.amobbs.com/bbs_upload782111/files_23/ourdev_513865.jpg
(原文件名:量化.jpg)

rei1984 发表于 2009-12-13 13:12:53

手册的公式大概这么理解吧:
为了好说明,先做个假设,假设参考电压不是2.56V,而是1.024V,输入电压为Vin,转换后的数字为ADC
那么按手册的说法,就是:
Vin < 0.0010V时,ADC=0
0.0010 <= Vin < 0.0020V时,ADC=1
...
1.0220 <= Vin < 1.0230V时,ADC=1022
1.0230 <= Vin 时,ADC=1023

所以你可以认为1.024V为1024,但转换器不能表示,只能表示为1023,
就算是1.240V也是表示为1023.

-----
明白了,谢谢

zhfeng 发表于 2009-12-14 15:19:55

谢谢各位,看来这是由量化误差引起的

litteworm 发表于 2010-1-24 00:20:26

留个 爪子

zy20061991 发表于 2011-6-23 14:18:46

爪子

lnso 发表于 2015-3-30 10:16:35

make一下

dela2000 发表于 2015-4-8 15:23:16

终于弄明白了,这个简单却不简约~
页: [1]
查看完整版本: M8的ADC转换后的结果为什么是除1024,而不是1023