新手,请教单片机ADC采样电池电压

如图,ADC送单片机AD口,电池电压范围是3V----4.2V,那么单片机采集到数值是多少呢?是不是就是1.5V--2.1V?在程序中应该怎么利用?单片机电压是5V,单片机ADC是10位的。比如我写了个AD子函数,这个AD子函数里return一个value数值,然后另一个子函数调用这个value值,判断value这个数值大小,这个数值送2位数码管显示,那么这个数值应该怎么处理?有人教我这样,AD_return=value*99/1024,是这样子吗?还是这样AD_return=value*5/1024?

1、霍尔传感器首先经过霍尔传感器将电压电流信号,转化成小的电流信号。

2、一般一介RC滤波,滤除由霍尔传感器等的杂波干扰。

3、经霍尔传感器采集的信号往往是小电流信号,需要经过放大后变成电压信号输入到单片机。

4、经过放大后的芯片需要经过AD芯片,如AD7656等,将模拟量转换成数字量,输入DSP。

5、经AD转换芯片转换的数字量输入单片机进行处理,完成ADC采样。

6、有时候ADC采样过来的信号,需要经过比较处理变化成0/1保护信号,此时就需要经过整流、比较等过程。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-16
问题比较含混不清,以下仅就单片机ADC转换方面的入门问题闲说几句,帮到你更好帮不到你就没办法了。
对应单片机ADC端口输入的模拟电压,在单片机采样后就变成了数字量,对于10位ADC而言,模拟电压应对的数字量数据是date=1024*(Vin/Vcc),这个算法对应的是以单片机的电源电压Vcc为基准参照电压的计算,例如:对应1.5V采样值,其数据计算后为date=0x0133或十进制的307;如果需要输出真实的十进制电压数据,就要变换一下计算公式,此时:Vin=((date*Vcc)/1024)*2(降压倍数);对应1.5V的采样值,程序采样后的数据date=307,带入变换后的公式计算的结果即为实际电压值3V,编程时各个转换数据用的变量应该设置为16位以上的变量或浮点变量,并且采用浮点运算,可以得到比较精确的数据。本回答被网友采纳
第2个回答  2014-10-21
你前面的回答都是对的。
返回值是一个数字量,需要转变成十进制
所以应该是AD_return=value*5/1024
5是你的参考电压。追问

谢谢,还有我要判断AD_return的大小,如图的电阻分压,ADC的电压范围是1.5V--2.1V。那么AD_return范围是多少?

追答

AD_return=value*5/1024之后就是你的输入信号的电压范围了

还有什么其他范围吗、

追问

明白了,那我现在要做百分比显示,比如采样电压1.5V的时候,电量为0%。。。采样电压为2.1V的时候,电量为99%,这个我应该怎么处理,我这样处理过,可是不对,AD_value=value*99/1024 ,可是这样出来的不对,应该怎么写?

追答

这个不属于你提问的内容了,加分或者另外换一个提问吧。

第3个回答  2017-09-14
STC单片机的AD引脚,可以输入的模拟电压最大可以是5V的,转换后的结果是10位的。你可以直接把电源的电压加到AD引脚上的进行采样的,为什么要用电阻分压呢?这种,加了电阻,会降低电池的实际电压的。
另外,既然用电阻分压了,那两种计算都 不对的。而只有直接测量时
AD_return=value*5/1023,这才是对的。
第4个回答  2017-07-25
R38 与 R39 串联分压, ADC读取的是R39两端的电压,也即是1/2电池的电压。所以单片机在计算的时候需要把采样的电压乘以2,才是实际的电压值。之所以分压,是因为单片机采样的最大电压有限制,不会超过供电电压。所有才需要分压。这里是不考虑电阻的公差情况下的值,如果考虑公差还需要进行校准。
相似回答