liuzonggong 发表于 2024-9-1 18:51:35

Yim_Hom 发表于 2024-8-31 20:05
我从一开始就简单粗暴的认为应该4096/1024
因为从0-4095/0-1023,就该是4096/1024
不然,0-1算一个数还是两 ...

原理说原理,情理说情理,你拿0到7的数值代表一个数值,7就是最大的数字了,对应的就是111,满量程了二进制没法更细了,到了4096或者4095,精度已经很高了无所谓了。

Yim_Hom 发表于 2024-9-1 22:12:42

liuzonggong 发表于 2024-9-1 18:51
原理说原理,情理说情理,你拿0到7的数值代表一个数值,7就是最大的数字了,对应的就是111,满量程了二进 ...

您这么一回复,就显得我这个简单粗暴的理解很无知。
回味一下,我能这么理解,不应该是拜原理所赐嘛{:4_249:}

社区闲人 发表于 2024-9-2 06:49:20

使用4096计算速度快,精度也能满足要求。

liuzonggong 发表于 2024-9-2 07:29:07

社区闲人 发表于 2024-9-2 06:49
使用4096计算速度快,精度也能满足要求。

这个是个优点。

机灵小老鼠 发表于 2024-9-2 12:42:09

神农鼎 发表于 2023-5-29 09:36
完美的 12位ADC, 10位ADC,肯定是用 4096, 1024来计算的!
传统就是这样啊!
如何解释让大家理解公式 ...

我用反推法说明:
1) 假设一个1位ADC,参考电压 Vref=5V;
    AD转换的时候: Vin>=2.5V 则Vad=1; Vin<2.5V 则Vad=0;

反过来推算:   Vin = Vad/除数 * Vref;

      1.1) 除数使用 2^1 -1=1 时:
            Vad=0, Vin=0V;
            Vad=1, Vin= 1/(2^1 -1) *5V= 5V;
      我们常理判断1位AD值反推输入电平: 低电平0V 或者 高电平5V;

      1.2)除数使用 2^1 =2 时:
            Vad=0, Vin=0V;
            Vad=1, Vin= 1/(2^1) *5V= 2.5V;
       我们常理判断1位AD值反推输入电平: 低电平0V 或者 高电平2.5V;

下面继续, 将AD假设为2位的;

2) 假设一个2位ADC,参考电压 Vref=5V;
    AD转换的时候:   Vin=   [0-1.25V),[1.25,2.5),[2.5,3.75),[3.75,5);
                            Vad=0,                1,            2,            3;
   
反过来推算:   Vin = Vad/除数 * Vref;

      2.1) 除数使用 2^2 -1=3 时:
            Vad= 0,   1,      2,         3;
            Vin = 0V, 1.67V,3.33V,5V;
      我们常理判断2位AD值反推输入电平依次是:0V, 1.67V,3.33V,5V;

      2.2)除数使用 2^2 =4 时:
             Vad= 0,    1,      2,         3;
            Vin = 0V, 1.25V,2.5V,   3.75V;
      我们常理判断2位AD值反推输入电平依次是:0V, 1.25V,2.5V,3.75V;

从上面计算可知,如果从AD值反推输入电压时,除数取 (2^n-1) 得到电压值跟符合我们的心理判断!

所以如果是12位ADC,除数我偏向于 4095, 虽然结果是和 4096 差异可以忽略!

晓飛飛 发表于 2024-9-2 18:51:13

机灵小老鼠 发表于 2024-9-2 12:42
我用反推法说明:
1) 假设一个1位ADC,参考电压 Vref=5V;
    AD转换的时候: Vin>=2.5V 则Vad=1; Vin ...

我的理解是,如果采集电压大于VREF是出于溢出的状态,如果此时采集值是0x0FFF要除以0x1000,如果用浮点除法的话,那得数永远到不了1,我一般的做法是采集值+1 再除4096,起码溢出后能得到满幅的值

杨为民 发表于 2024-9-2 21:54:10

本帖最后由 杨为民 于 2024-9-2 21:56 编辑

(1)为什么要纸上谈兵,为什么造单片机ADC的厂家没有发言权?为什么用户没有发言权?

(2)对于12位ADC转换公式中:
ADCn通道的输入电压= 转换结果 / 4096* ADC_VRef+

的除数应该是4095还是4096?这是一个伪问题!
(3)厂家和每个用户都可以做一个最简单的测试:将ADCn通道的管脚直接连接到ADC_VRef+管脚上,然后编程序读出转换结果的值是多少。
(4)我的观点:无论这个转换值是多少,除数就是那个读数!
(5)如果读出来的读数是4095=0x0FFF,那么上面公式里的除数就是4095!
这时不管哪个专家教授,不管在哪本书上,如果还要告诉我那个除数是4096,还要论证一番,我选择用脚指头相信它,但是我编写的程序中我会坚持用4095!
(6)在这个问题答案很明显,两个管脚连接在一起,那么:ADCn通道的输入电压= ADC_VRef+(你信不信?),这时如果除数不等于这时的转换结果,那么那个转换公式还成立吗?(用脑子想)
(7)我笃定在那个测试中的12位的ADC的读数是4095,10位ADC的读数是1023,有谁愿意帮我测一测?然后将结果公布上来?
(8)40年前我参加研制天文测量仪器,编写测量程序时,有个权威就跟我争论,然后他拿出了美国原始厂家的手册(应该是TI的芯片)给我看。我就做了这个测试,然后他吃饭时就买了份肉给我。
(9)几年前有人就某本STC单片机权威书中的ADC转换公式提出质疑,指出按公式做出来的5V电压表对5V标准电压的测试值永远是4.99几伏,然后有人又拿出一本美国芯片厂家手册来证明是除1024,我一看,手册还是来自当年我看到的那个厂家!


qizhiguang 发表于 2024-9-3 08:07:27

杨为民 发表于 2024-9-2 21:54
(1)为什么要纸上谈兵,为什么造单片机ADC的厂家没有发言权?为什么用户没有发言权?

(2)对于12位ADC转 ...

寄存器值最高是0x0FFF肯定是对的,因为再加一就进位了呀。难道2bit分辨率你是除以3?但除数就是4096,因为是分了这么多的段数。

qizhiguang 发表于 2024-9-3 08:09:08

就和3位半数字表不可能出2000是一样的,再高就该换挡了

杨为民 发表于 2024-9-3 08:31:31

qizhiguang 发表于 2024-9-3 08:07
寄存器值最高是0x0FFF肯定是对的,因为再加一就进位了呀。难道2bit分辨率你是除以3?但除数就是4096,因 ...

你做实验,你有本事读出多少,除数就应该用多少!如果2BIT的ADC,你有本事读出4,那你就用4。我猜对于2BIT的ADC,能够读出的数是只会是0、1、2、3!
页: 1 [2] 3 4
查看完整版本: 12位ADC 计算公式是/4096还是/4095;10位ADC 计算公式是/1024还是/1023