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!