ADC measurement unstable relative to VDD reference?

NRF5 SDK v17.0.1

Custom board

Hi,

I'm trying to take ADC measurements for a device which is powered by battery. The ADC input is fixed and should stay relatively constant with respect to the battery level. I'm currently using the internal 0.6 V reference to first measure the battery level, with a gain factor of 1/5 since the battery is 3 V. After acquiring the battery level, AIN4 is measured using VDD/4 as reference, with a gain of 1/4. I'm expecting the ADC measurement to be constant, yet I'm having cases where the value will begin to change with no apparent change in VDD. Additionally, I've observed drastic changes in the ADC measurement after reseating the battery and/or AIN4 input.

The measurements are done using 16x oversample with burst mode enabled, though I've tried disabling those to no avail. Calibration is normally performed on power-on, as well as in response to a 1.5°C change in temperature. Upon completing the ADC measurements, SAADC is aborted, uninitialized, and errata 241 is handled; then the ADC is reinitialized upon next wake up.

What can I do to get more accurate ADC measurements and avoid large jumps upon reseating the battery and/or AIN4 input?

Here are some examples illustrating the issue.

The strange part is that on some other devices I'm testing, everything appears to be extremely accurate.

  • Hi,

    Are the plots based on raw samples from the SAADC? Can you provide the samples, both with and without oversampling enabled?

    Can you post your code? 

    I'm not sure exactly what you mean by "reseating the battery and/or AIN4 input". Can you post a picture of your setup and describe the exact process?

    Best regards,
    Jørgen

  • Yes those are the raw samples from the SAADC, 10-bit values ranging from 0-1023.

    The setup is a custom board which takes a CR2 3V battery, and the AIN4 input interfaces to the board via a PCI-E style connector. The board will not power up until the PCI-E connection is made. By "reseating" I mean essentially causing the unit to power cycle/cold boot, either:
    1. Remove battery, then put battery back in; or
    2. Remove AIN4 PCI-E input, then put AIN4 PCI-E input back in

    I contacted the hardware designer, and was informed that this may be an issue with the board and/or AIN4 input itself. See image below. The AIN4 input consists of several resistors which may have been unnoticeably damaged in some way and become extremely sensitive to environment. (For reference ~540-550 is the expected value for AIN4)

    I will continue monitoring and try isolating the issue to rule out hardware problems before pursuing further support and providing a pseudo-code sample. I've swapped the AIN4 PCI-E input between the above unit and an acceptable unit to see if it can be reproduced over the weekend.

    Thank you

Related