This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

ADS1158 unexpected offset in auto scan mode

Other Parts Discussed in Thread: ADS1158

Hi,

we use an ADS1158 to read 16 single ended inputs. VREF = 2,5V, VREFN, AINCOM, AVSS and thermal pad connected to GND. All inputs AIN0 to AIN16 are protected with an 4.7k series resistor. To read all 16 inputs we use Automatic-Scan mode. Unfortunately the values read are not correct. Instead of 100mV we read 125mV, 0mV reads as 32mV. As I digged into this issue I configured the ADS1158 into Fixed-Channel mode, using AIN0 to AIN14 as positive inputs and AIN15 as negative input connected to GND,  In Fixed-Channel mode all readings are correct. It seams that in Automatic-Scan mode the ADS1158 sources a very small current on its inputs and this current generates the unwanted offset on the 4.7k resistor. Sensor biasing is disabled, I double checked this.

A log in Fixed Mode - expected values for channel 0 == 0mV, channel 1 == 100mV and channel 2 == 120mV 

read_reg result reg=0x09 value=0x9b
read_reg result reg=0x00 value=0x02
write_reg set reg=0x07 value=0x00
write_reg set reg=0x00 value=0x22
write_reg set reg=0x01 value=0x70
write_reg set reg=0x03 value=0x00
write_reg set reg=0x04 value=0x00
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
new = 0 ovf = 0 supply = 0 chan = 29 value = 0x1e06 7686 mV = 0724.98


channel: 0 == A1
write_reg set reg=0x08 value=0x80
read_reg result reg=0x08 value=0x80
write_reg set reg=0x02 value=0x0f
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x0002 2 mV = 0000.19
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x0002 2 mV = 0000.19


channel: 1 == A2
write_reg set reg=0x08 value=0x01
read_reg result reg=0x08 value=0x01
write_reg set reg=0x02 value=0x1f
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x043b 1083 mV = 0102.15
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x043b 1083 mV = 0102.15


channel: 2 == A3
write_reg set reg=0x08 value=0x82
read_reg result reg=0x08 value=0x82
write_reg set reg=0x02 value=0x2f
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x051c 1308 mV = 0123.38
start_convert
new = 1 ovf = 0 supply = 0 chan = 31 value = 0x051c 1308 mV = 0123.38


register dump:
read_reg result reg=0x00 value=0x22
read_reg result reg=0x01 value=0x70
read_reg result reg=0x02 value=0x2f
read_reg result reg=0x03 value=0x00
read_reg result reg=0x04 value=0x00
read_reg result reg=0x05 value=0x00
read_reg result reg=0x06 value=0x00
read_reg result reg=0x07 value=0x00
read_reg result reg=0x08 value=0x82
read_reg result reg=0x09 value=0x9b

The read values are OK (within tolerance).

The same in Auto Scan mode: 

read_reg result reg=0x09 value=0x9b

Using Autoscan Mode!
read_reg result reg=0x00 value=0x02
write_reg set reg=0x07 value=0x00
write_reg set reg=0x00 value=0x02
write_reg set reg=0x01 value=0x70
write_reg set reg=0x03 value=0x00
write_reg set reg=0x04 value=0x00
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
new = 0 ovf = 0 supply = 0 chan = 10 value = 0x06fa 1786 mV = 0145.35


channel: 0 == A1
write_reg set reg=0x08 value=0x80
read_reg result reg=0x08 value=0x80
write_reg set reg=0x04 value=0x01
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
start_convert
new = 1 ovf = 0 supply = 0 chan = 8 value = 0x0191 401 mV = 0032.63
start_convert
new = 1 ovf = 0 supply = 0 chan = 8 value = 0x0191 401 mV = 0032.63


channel: 1 == A2
write_reg set reg=0x08 value=0x01
read_reg result reg=0x08 value=0x01
write_reg set reg=0x04 value=0x02
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
start_convert
new = 1 ovf = 0 supply = 0 chan = 9 value = 0x060b 1547 mV = 0125.90
start_convert
new = 1 ovf = 0 supply = 0 chan = 9 value = 0x060b 1547 mV = 0125.90


channel: 2 == A3
write_reg set reg=0x08 value=0x82
read_reg result reg=0x08 value=0x82
write_reg set reg=0x04 value=0x04
write_reg set reg=0x05 value=0x00
write_reg set reg=0x06 value=0x00
start_convert
new = 1 ovf = 0 supply = 0 chan = 10 value = 0x06fa 1786 mV = 0145.35
start_convert
new = 1 ovf = 0 supply = 0 chan = 10 value = 0x06fa 1786 mV = 0145.35


register dump:
read_reg result reg=0x00 value=0x02
read_reg result reg=0x01 value=0x70
read_reg result reg=0x02 value=0x00
read_reg result reg=0x03 value=0x00
read_reg result reg=0x04 value=0x04
read_reg result reg=0x05 value=0x00
read_reg result reg=0x06 value=0x00
read_reg result reg=0x07 value=0x00
read_reg result reg=0x08 value=0x82
read_reg result reg=0x09 value=0x9b

---

Here we see a reading of 32.63mV for AIN0 - connected to GND via 4.7k and 125.9mV for AIN1 connected to an 100mV source via 4.7k and AIN2 with 145.35mV connected to an 120mV source via 4.7k. I double checked the setup, The logs includes the register dump, I can't find an error.

Hardware is identical, only configuration changed from Auto-Scan to Fixed Mode.

Question why I get the unwanted offset in Auto-Scan mode?

Thanks, in advance.

Walter

  • Hi Walter,

    Welcome to the TI E2E Forums! If you'd be able to share a schematic it would be helpful.

    Keep in mind that there is a slight difference between your fixed-channel mode and auto-scan mode measurements...

    - In Fixed-channel mode, AIN15 is used as the negative input.
    - In Auto-scan mode, AINCOM is used as the negative input.

    Therefore, it's possible that the AIN15 and AINCOM pins are at different voltage potentials. Maybe your circuitry connected to these pins is slightly different, or perhaps the input bias currents on these pins are different.

    It's also interesting to note that once you've accounted for the initial offset (as measured for the 0 mV input), the other measurements have a consistent gain error:

    - In Fixed-channel mode, the gain error is about 0.88 V/V (i.e. dividing by 0.88 provides a more accurate result).
    - In Auto-scan mode, the gain error is about 0.93 V/V.

    This difference would lead me to believe that the bias current may not be the only difference between these measurements.

     

    A few other questions I have related to this issue:

    - Are you buffering your input signal, either before or after the ADS1158 MUX?

    - Have you measured the voltage drop across the 4.7k Ohm resistors to verify that this is indeed a bias or leakage current causing the offset?

    - Do you have any other input protection circuitry (diodes, for example) that could be providing another leakage current path?

    As a side note:
    Your voltage conversions for the fixed-channel mode are also a bit different from the auto-scan mode conversions (it seems like you use a different scaling factor of 94 uV/code, instead of 81 uV/code). Your voltage conversions for the auto-scan mode use the correct factor of 81 uV/code!

    Best Regards,
    Chris

  • Chris,

    minutes after creating this thread I emailed circuit diagram to 'pa_deltasigma_apps@ti.com'.  If you did not received the schematics, please let me knew.

    AINCOMM is connected to GND, AIN15 connects via an 4.7k resistor to GND.

    Should I divide the result by 0.88 in Fixed Mode and 0.93 in Auto-Scan Mode?

    We do not use any buffering, input signal provides enough current.

    I measured the voltage drop on the 4.7k resistor, only in auto-scan mode I see approx. 15mV, positive side at ADS1158. In Fixed Mode I do not see any voltage drop on the 4.7k resistor.

    You are right I use to different scaling values, in fixed mode I use: 0x6788 to get the expected results.

    Regards

    Walter

  • Hi Walter,

    I did get your schematic, thanks!

    I think the difference in offset is related to the difference in circuitry connected to pins AIN15 and AINCOM.
    -A1N15 connects to the 4.7kOhm series resistor and an external ESD diode.
    -AINCOM connects directly to ground.

    You’ll likely have different input bias currents on these pins (due to the external ESD protection on AIN15) and different offset voltages (due to the difference in impedance to ground). Therefore, you’ll see slightly different results when switching between AIN15 and AINCOM for the negative ADC input signal.

    Regarding your question: “Should I divide the result by 0.88 in Fixed Mode and 0.93 in Auto-Scan Mode?”
    Yes - Since the measurements are referenced to different potentials in fixed-channel mode and auto-scan mode, I would use different calibration values for the offset and gain errors in these modes. NOTE: The ADS1158 does not have a built-in calibration function block, so you would need to manually calculate the calibrated results in your MCU. Just make sure to subtract the offset before correcting for the gain error.

    If you want the results to be more closely matched between fixed-channel mode and auto-scan mode, you might consider connecting AINCOM directly to AIN15 (instead of GND). Then the input bias currents and impedance to ground (as seen from these pins) would be much more closely matched. Alternatively, buffering the input signal (between the MUXOUT and ADCIN pins) could help reduce the offset because your currently connecting directly up to the modulator inputs, which have relatively low-input impedance. A high input-impedance buffer would reduce the input bias current and result in a much smaller offset.

    Best Regards,
    Chris