ADS1115 differential reading problem

Hi, I want to use ADS1115 to read voltage from two automotive oxygen sensors fitted to my pottery kiln; it's part of a kiln monitoring project using an Arduino Due, so voltage in is 3.3v. In current firings, I use a dedicated voltmeter with the sensors to record voltages ranging from 0 to 1v, and hovering around 0.8 to 0.9 volts. I pretty much ignore positive-negative aspect, since absolute value is matters for my purposes. I thought the ADS1115 would be perfect, since it has two differential reading circuits, one using A0 and A1, the other A2 and A3. My problem is apparent leakage between those circuits as in this scenario: With a voltage of 0.6 across A0-A1 (either from sensors or power supply), ADS1115 board usually reports correct voltage (often 0 for first reading, so maybe that's a timing problem.) Also, board sometimes reports .6v on A2-A3, though without any pattern I could see. A voltage across A2-A3 gives similar results with circuit roles reversed – i.e. mostly correct A2-A3 readings and occasional false readings of the same value from A0-A1. This problem appears even when nothing is connected to the second circuit. Other details: - ADS1115 VDD connects to Due 3.3v - ADS1115 GND connects to Due GND - ADS1115 SDA connects to Due SDA - ADS1115 SCL connects to Due SCL - Arduino IDE 1.8.12 - Arduino Due Board Model R3; - problem with both Adafruit ADS1115 and imported Chinese boards

As a noob, I've somehow fried several of these ADS1115 boards in getting to this point in my project (I think by overloading input, but not sure) but now use a new board which reliably behaves as described. I have read it's possible also to read my voltages through the Due's analog pins but would really like to know why my current solution isn't working. Thanks for any insights! Jeff Jeff Lawrence

Post a complete wiring diagram of your setup!

Remember that even though you can configure the ADS1115 to have two differential inputs all pins must stay within the limits (GND to Vdd). So if you supply the chip by 3.3V you must not provide 2.5V to AIN0 and 5V to AIN1. The differential voltage is 2.5V (which is withing the allowed range) but the 5V (relative to GND) are outside the specs.

You need to define the voltage of the sensor leads within the correct voltage range, otherwise they may wander around and stray outside the correct range and read falsely. The easiest way is to connect one sensor lead to a 1:1 resistive divider between the ADC rails, holding it at midrail. A couple of 10k resistors ought to do it.

CMOS chip inputs have ultra-high input resistances and do not constrain the voltage until it has strayed about 0.3V outside the proper range and the static-protection diodes start to operate.

It doesn't matter that the chip is differential, it can only work right if the inputs are all in the correct range.

THanks for the comments, pylon and MarkT!

pylon, I've been reading these sensors for years with a VOM and I know they never generate more than 1 volt, so I don't think the voltage limits are my problem.

MarkT, I don't understand, and it's too bad, because it sounds like you may have a solution for me. When you say 'defining the voltage of the sensor leads,' do you mean something like forcing a pin high or low with a resistor between board voltage or GND? Searching for a definition of ADC rails leads me to the tentative definition: the highest and lowest allowable input voltage levels. Correct? Since my input voltage ranges from 0v either down to -1.0v or up to 1.0v, I guess midrail means 0v? When you recommend a voltage divider, I'm baffled, since my input voltage is well within the ADC board's acceptable range. Likewise with your comments about voltage constraints - if absolute input voltage never exceeds 1 volt, why would the CMOS chip ever need to constrain it? Sorry about basic questions - I appreciate your brain cycles. Jeff

As I understand it you have a sensor with two wires, and you connect each wire to one input of the ADC, and configure the ADC to take a differential reading from those two inputs?

That's not going to work as the inputs are both floating together, so may easily float outside the input voltage range of the ADC.

Both inputs must be within the valid range, and that means that one wire of the sensor has to be forced to be a suitable voltage, such as mid-rail. For a low-impedance sensor you can force the average of the two wires to be at mid-rail, giving more differential range.

For a high impedance sensor you can't force both wires as that will change the voltage difference between them, but you can force one of them.

Hi, I believe I've determined that my problem lies in a noisy sensor - tried a newer unit of different make and its "zero" reading is a very acceptable .005mV, as compared to the older sensor that was showing 100-200mV for zero. I'm still baffled by my inability to stabilize the reading by connecting one of the sensor leads to GND, but have decided that's a mystery best left to the future for solution. Pylon and MarkT - thanks for your assistance. It's much appreciated. Jeff