armos 发表于 2022-5-1 02:45:23

ADS1115的转换结果老是跳动,是什么原因?

本帖最后由 armos 于 2022-5-1 09:18 编辑

我用Adafruit_ADS1X15这个arduino转换出来的ADC结果一直在跳动,是设置有哪需要注意的地方吗?电路我测了电压很稳。
电压我用万用表测量结果在17.8mV左右,电压测量结果跳动很小,变化幅度在0.1mV左右,但是测量结果从48到144都有。
测试程序我是用了 arduino的一个库,程序如下。
#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;/* Use this for the 16-bit version */
//Adafruit_ADS1015 ads;   /* Use this for the 12-bit version */

void setup(void)
{
Serial.begin(115200);
Serial.println("Hello!");

Serial.println("Getting single-ended readings from AIN0..3");
Serial.println("ADC Range: +/- 6.144V (1 bit = 3mV/ADS1015, 0.1875mV/ADS1115)");

if (!ads.begin(0x49)) {
    Serial.println("Failed to initialize ADS.");
    while (1);
}
pinMode(A3,OUTPUT);
digitalWrite(A3,HIGH);
}

void loop(void)
{
int16_t adc0, adc1, adc2, adc3;
float volts0, volts1, volts2, volts3;

adc3 = ads.readADC_SingleEnded(3);
volts3 = ads.computeVolts(adc3);
Serial.println("-----------------------------------------------------------");
Serial.print("AIN3: "); Serial.print(adc3); Serial.print(""); Serial.print(volts3); Serial.println("V");

delay(1000);
}

rei1984 发表于 2022-5-1 07:26:15

跳几个字。现象说清楚哦

zpywz 发表于 2022-5-1 07:40:15

rei1984 发表于 2022-5-1 07:26
跳几个字。现象说清楚哦
(引用自2楼)

搭车请教一下,跳几个字是什么意思。是不是理解为,测量结果从1.1变化到1.5 就是跳4个字?

zchong 发表于 2022-5-1 07:43:11

怎么个跳动法?比如AD值的最后1bit,一直是0、1变化?那已经是好的一笔了。{:lol:}

armos 发表于 2022-5-1 09:06:32

rei1984 发表于 2022-5-1 07:26
跳几个字。现象说清楚哦
(引用自2楼)

跳动很大,电压测量结果跳动在10mV左右,有几十LSB,我用万用表测量电压了,很稳定。

armos 发表于 2022-5-1 09:07:07

zpywz 发表于 2022-5-1 07:40
搭车请教一下,跳几个字是什么意思。是不是理解为,测量结果从1.1变化到1.5 就是跳4个字? ...
(引用自3楼)

跳动很大,电压测量结果跳动在10mV左右,有几十LSB,我用万用表测量电压了,很稳定。

armos 发表于 2022-5-1 09:10:23

zchong 发表于 2022-5-1 07:43
怎么个跳动法?比如AD值的最后1bit,一直是0、1变化?那已经是好的一笔了。 ...
(引用自4楼)

跳动很大,电压测量结果跳动在10mV左右,有几十LSB,我用万用表测量电压了,很稳定。

lizengmao 发表于 2022-5-1 09:24:07

要不要试着改善ADC的供电?

dboyzju 发表于 2022-5-1 11:01:06

armos 发表于 2022-5-1 09:10
跳动很大,电压测量结果跳动在10mV左右,有几十LSB,我用万用表测量电压了,很稳定。 ...
(引用自7楼)

还是用示波器观察吧

armos 发表于 2022-5-1 11:01:59

lizengmao 发表于 2022-5-1 09:24
要不要试着改善ADC的供电?
(引用自8楼)

现在用的是USB的供电,我用台式电源试一下。

lizengmao 发表于 2022-5-1 11:29:01

armos 发表于 2022-5-1 11:01
现在用的是USB的供电,我用台式电源试一下。
(引用自10楼)

你还不明白,我是指改善ADC IC的供电,不是你整个系统的供电,因为有可能是ADC IC供电纹波太大或被干扰导致ADC值不可靠。

qwe2231695 发表于 2022-5-1 16:23:06

本帖最后由 qwe2231695 于 2022-5-1 16:24 编辑

USB的供电应该不行 ,试试锂电池供电,串口打出来试试。串口只接 gnd txd 2根线

多年前玩过,是1-2mv
https://www.amobbs.com/thread-5499831-1-1.html

honami520 发表于 2022-5-1 19:08:30

万用表是给你算了有效值的。你那个跳动是单次转换的跳动吧。如果你也多次采集算有效值,估计也不会跳动了

armos 发表于 2022-5-1 19:42:36

lizengmao 发表于 2022-5-1 11:29
你还不明白,我是指改善ADC IC的供电,不是你整个系统的供电,因为有可能是ADC IC供电纹波太大或被干扰导 ...
(引用自11楼)

我试了一下用电池供电,转换结果还是有接近10mV的跳动,用万用测量结果在145.4mV,长时间不动。
转换结果如下,最后ADC3是转换结果,130多mV到150多mV都有。
ADS1115我是以前网上买的模块拆下来的,是碰到假的了吗?有说这个芯片温度不能太高,我风枪开的380

0: 10.75,   1: 10.75,   2: 3.25,   3: 135.00
0: 10.75,   1: 10.75,   2: 3.13,   3: 158.63
0: 10.75,   1: 10.75,   2: 3.25,   3: 146.00
0: 10.75,   1: 10.75,   2: 3.38,   3: 147.13
0: 10.75,   1: 10.75,   2: 3.25,   3: 144.50
0: 10.75,   1: 10.75,   2: 3.25,   3: 132.13
0: 10.75,   1: 10.75,   2: 3.25,   3: 159.50
0: 10.75,   1: 10.75,   2: 3.13,   3: 149.50
0: 10.75,   1: 10.75,   2: 3.25,   3: 146.63
0: 10.75,   1: 10.75,   2: 3.13,   3: 144.38
0: 10.75,   1: 10.75,   2: 3.13,   3: 133.75

armos 发表于 2022-5-1 19:42:56

honami520 发表于 2022-5-1 19:08
万用表是给你算了有效值的。你那个跳动是单次转换的跳动吧。如果你也多次采集算有效值,估计也不会跳动了 ...
(引用自13楼)

我试了一下用电池供电,转换结果还是有接近10mV的跳动,用万用测量结果在145.4mV,长时间不动。
转换结果如下,最后ADC3是转换结果,130多mV到150多mV都有。
ADS1115我是以前网上买的模块拆下来的,是碰到假的了吗?有说这个芯片温度不能太高,我风枪开的380

0: 10.75,   1: 10.75,   2: 3.25,   3: 135.00
0: 10.75,   1: 10.75,   2: 3.13,   3: 158.63
0: 10.75,   1: 10.75,   2: 3.25,   3: 146.00
0: 10.75,   1: 10.75,   2: 3.38,   3: 147.13
0: 10.75,   1: 10.75,   2: 3.25,   3: 144.50
0: 10.75,   1: 10.75,   2: 3.25,   3: 132.13
0: 10.75,   1: 10.75,   2: 3.25,   3: 159.50
0: 10.75,   1: 10.75,   2: 3.13,   3: 149.50
0: 10.75,   1: 10.75,   2: 3.25,   3: 146.63
0: 10.75,   1: 10.75,   2: 3.13,   3: 144.38
0: 10.75,   1: 10.75,   2: 3.13,   3: 133.75

lizengmao 发表于 2022-5-1 21:07:38

armos 发表于 2022-5-1 19:42
我试了一下用电池供电,转换结果还是有接近10mV的跳动,用万用测量结果在145.4mV,长时间不动。
转换结果 ...
(引用自14楼)

给你建议把ADC改为单独供电,你到底有没有做?没有做回复干嘛呢?让大家猜又不去验证。
你到底有没有给ADC单独供电?以确定不是电源引入的干扰?
所谓的改为使用电池供电是指用电池给整个系统供电还说给ADC供电?
为何你贴出的代码串口打印的东西与你实际贴出的结果相差甚远?
我看到结果2是接近3.3V,是否表示这是电源电压?如果是,为什么电源有波动?
你原理图有没有错误?有没有在ADC输入脚预留对地0.1uF~1uF的电容?
PCB layout是否有ADC引入额外噪音的问题?
大家都很忙,如果你多次描述仍无法把问题说清楚,需要别人一点点的问才能得到更多资讯,估计没人会理你。就这样。

armos 发表于 2022-5-1 22:37:26

lizengmao 发表于 2022-5-1 21:07
给你建议把ADC改为单独供电,你到底有没有做?没有做回复干嘛呢?让大家猜又不去验证。
你到底有没有给AD ...
(引用自16楼)

不好意思,下午就在做这个实验。
情况是这样的,我用一个运放作为放大器放大一个微弱的光电流,如下图所示,当RA比较小的时候(510ohm)左右,ADS1115测出来的电压就比较稳定,当电压在20mV左右时,跳动在0.5mV以下。
当RA比较大(510Kohm)时,ADS1115测出来的电压就不稳定,同样测量20mV左右的电压时,跳动在10mV以上。

上面两个测试使用了电池供电和USB供电,都是同样的现象。

我认为可能是ADS1115输入电阻偏小,导致ADC吸收了一部分电流,但是后面我在ADC输入前面用运放加了一级电压跟随器后现象仍然重复。

运放型号为TLV8541,电压跳动幅度和运放上面的电阻有关,和供电电源无关。


lizengmao 发表于 2022-5-2 11:49:40

1:请用一个固定的电压而不是OP输出接到ADS1115,看结果如何?用以判断ADS1115是否正常,请在ADS1115输入端务必加入R C滤波。
2:这种光电检测我没有用过,不予置评。但按自己经验,但就放大器而言,反相放大器需要两个电阻,图中仅有一个,请问如何计算放大倍数?是否会因为倍数太大而导致输出不稳定?OP输入失调电压是否足够小?
3:通常我做光电检测只有环境光检测,用以改变TFT的背光。但是只需要直接接到ADC而不需要经OP。我所使用的是电流输出型光电二极管,需要接入合适负载电阻然后用ADC采集。不清楚你选用的型号目的规格。
4:你最初的问题是ADS1115的问题,但现在看起来或许是ADS1115输入信号就已经有问题了。

以上希望对你有帮助。
就这样。

armos 发表于 2022-5-3 00:11:32

lizengmao 发表于 2022-5-2 11:49
1:请用一个固定的电压而不是OP输出接到ADS1115,看结果如何?用以判断ADS1115是否正常,请在ADS1115输入端 ...
(引用自18楼)

实验结果出来了,是ADC的原因,可能是因为输入阻抗导致,我换了ADS1232就好了,同样的电路,输出的电压幅度在20mV左右时跳动幅度在0.5mV以下。
回答你的问题:
1。输入固定电压,我用电池和电阻分压的结果输入ADS1115,输出结果很稳定。
2。输出电压用电流*电阻就行,用multisim可以仿真得出结果。
3。运放的型号是TLV8541,选用了输入偏置电流较小的型号,小于1nA,输入失调电压最大3.1mV
4。选用运放的目的是增加了一个CD4051模拟开关,可以切换不同的电阻,增加档位,以便于得到一个合适的电压。

akey3000 发表于 2022-5-3 03:24:18

armos 发表于 2022-5-3 00:11
实验结果出来了,是ADC的原因,可能是因为输入阻抗导致,我换了ADS1232就好了,同样的电路,输出的电压幅 ...
(引用自19楼)

也不见得是adc的原因,可能adc外围电路没设计好

rootxie 发表于 2022-5-3 08:28:22

模拟小信号的务必添加一级专用LDO供电,让你无比舒坦
电池如果是系统输入电压,轨道纹波也是波动很大的

armos 发表于 2022-5-3 09:36:52

akey3000 发表于 2022-5-3 03:24
也不见得是adc的原因,可能adc外围电路没设计好
(引用自20楼)

电路是一样的,供电我直接用了电池,这样的情况下,ADS1115还是波动挺大
看了一下,ADS1115输入阻抗在20Mohm左右,ADS1232为500Mohm

armos 发表于 2022-5-3 09:37:11

rootxie 发表于 2022-5-3 08:28
模拟小信号的务必添加一级专用LDO供电,让你无比舒坦
电池如果是系统输入电压,轨道纹波也是波动很大的 ...
(引用自21楼)

电路是一样的,供电我直接用了电池,这样的情况下,ADS1115还是波动挺大
看了一下,ADS1115输入阻抗在20Mohm左右,ADS1232为500Mohm

lizengmao 发表于 2022-5-4 08:52:09

armos 发表于 2022-5-3 00:11
实验结果出来了,是ADC的原因,可能是因为输入阻抗导致,我换了ADS1232就好了,同样的电路,输出的电压幅 ...
(引用自19楼)

1。输入固定电压,我用电池和电阻分压的结果输入ADS1115,输出结果很稳定。
---从这个结果看,ADC ADS1115并没有问题,有问题的可能是前面的OP的线路."我换了ADS1232就好了"并不代表ADS1115有问题.
2。输出电压用电流*电阻就行,用multisim可以仿真得出结果。
---使用过大的电阻,将有可能使在光电二极管输出较大电流时OP输出饱和.需按光电二极管和OP的规格书计算.及有可能引入空间的干扰信号导致OP输出不稳定.
3。运放的型号是TLV8541,选用了输入偏置电流较小的型号,小于1nA,输入失调电压最大3.1mV
---输入失调电压3.1mV,如何保证批次的一致性?如何保证温度稳定性?
4。选用运放的目的是增加了一个CD4051模拟开关,可以切换不同的电阻,增加档位,以便于得到一个合适的电压。
---CD4051导通有内阻并会串接在回路中,不恰当的设计将会使得OP的输出电压与设计的不一致.
此外:
我不确定你所使用的的光电二极管型号规格及需要检测的LUX范围,如果只是0~1000Lux,我个人认为不需要这样改变OP的放大倍数.选择合适的负载电阻作为I-V转换即可.
在我的理解中,当使用On9658(3mm封装)作为光电传感器,5V供电时,使用1k的电阻作为负载即可得到0~1000Lux的感应范围.已经足够使用.此时5Lux输出58mV,1000Lux输出4.060V.
页: [1]
查看完整版本: ADS1115的转换结果老是跳动,是什么原因?