I want to measure the open circuit voltage of a battery cell (differential reading, that is A0-A1). In order to do that, I am using an industrial PLC based in Arduino Mega and a cheap but accurate ADC (ADS1115). I need to get an accuracy of 100uV (which I should be able to get with ADS1115 by far). However, due to some unexpected noise/currents, my accuracy is only 0.01V (really bad). This means that, if I want to measure for example 1.3005V, I get one second 1.3005 volts, the next second I get 1.3030 and the next second 1.2980 and so on. I know that the real voltage value has not changed at all, as I am checking its value with a BTS system (big and expensive separated equipment). I cannot have so much change in so little time, specially changing from increase to decrease in value. I need the measurement to be completely stable along time. Averaging the value alone is not an option.
This is my set up. Note that I am using a breadboard to connect everything.
Some comments which can help to the diagnosis:
Could the problem be caused by the grounds? As I understand, with this set up I am having common grounds, and this could add current paths and create noise. I have read that it is recommended to isolate the analog ground (ADC) from the digital ground (PLC) by adding an isolator. Could this help? Anyways, I have read that an ADC has one digital ground but also an analog ground. However, in the ADC datasheet I find only one ground (the analog), which comes from the PLC.
Could the problem be related with common Vdd? I mean, the same power supply is used first by the PLC, and then, the PLC gives the Vdd to the ADC. In the past, there was even no external power supply, so the ADC was powered by the proper Arduino Mega by the USB cable. This generated some big variations in the ADC reading that improved after adding the power supply. Please, note that the USB cable is always connected and with traffic (for debugging use only).
I have read on this thread that it is a good practice to add an small capacitor to the ADC input to hold the signal. Could this help? I have not added one in my set up.
ADS1115 datasheet suggests to add an small cap (0.1 uF) to decouple Vdd. Do I still need to to this, even though that Vdd comes from the PLC?
Also ADS1115 datasheet suggests: Analog inputs with differential connections must have a capacitor placed differentially across the inputs. As I am doing a differential measure, could this improve the reading?
I have already tried to add a low pass filter to one and both ADC inputs, but the measurement variation got worse!
IMPORTANT UPDATE: As i briefly mentioned in the beginning (but I didn't put it in the drawing) I also have a Battery Test System (BTS) connected to the battery cell in order to charge/discharge it. This BTS operation is the following: it provides positive current (around 300 mA) during charge cycle, and then for the discharge cycle it provides -300 mA, then charging again, discharging, and the loop goes one like this. I say this right now because, when I tried to connect the (-) side of the battery (=A1) to the analog ground as some people have pointed out, it removed the noise. HOWEVER, during discharge cycles, a voltage drops appears and the battery loses a lot of its capacity (which is not feasible). As one person has suggested, maybe this is because the current is able to have a path and then it creates a voltage drop? Is there an easy way to avoid this current?. This is the set up with the BTS included: