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.

ADS1261: Asymetric analog supply (AVDD = 4.5V, AVSS=-0.5V)

Part Number: ADS1261
Other Parts Discussed in Thread: LM8272

Hello, I am testing a design done with the ADS1261 for which the analog supply is not placed at +5V/0V nor at +/-2.5V but rather at +4.5V / -0.5V. From the datasheet, this seems to be within the requirements, but I am having issues getting correct readings, and so I would like to determine with confidence that this is not the source of my problem and that the chip works as intended with such a supply level.

Best regards,

François

  • Hi Francois,

    The ADS1261 can support asymmetric supplies, such as +4.5V / -0.5V, as long as AVDD - AVSS is ~5V.

    Can you share a schematic and register settings so I can take a look at how your device is configured? Also, what issues are you seeing? Can you describe them in detail? Any logic analyzer shots would be useful as well.

    -Bryan

  • Hello Bryan,

    Glad to hear this is not the issue. Here is a picture of the relevant schematic. The op-amp has been replaced with an LM8272 to be able to drive capacitive load. I am unable to supply logic analyzer pictures at this time, but since I have now fully implemented the CRC check, I know, the data I send, and the data I read are correct (by the way the crc function provided in the support material didn't compute the correct crc code for me). I also read all the registers after configuration to synchronise them with the program, so this is one more check that the values have been correctly written.

    I have played quite a bit with registers. Currently, I can get really close to the expected value using the internal reference (+/-2.5V) and no calibration however when I use AVDD/AVSS (+4.5V / -0.5V) although the value does change with voltage, the returned reading is incorrect (for instance 2.55V instead of 1.1V). I do change the reference value used in the conversion from counts to volts.

    I also seem to have a problem with calibration procedure. As I understand it, offset calibration happens automatically by sending SFOCAL command.  But when I do that with AVDD/AVSS as reference, the ofcal register then contains 0xFFFFE3 which is abnormally high.

    For the FSCAL, I first set MUXP and MUXN to an input connected to AVDD and AVSS respectively (in my case AIN7 and AIN8). Then I wait 100ms for the input to settle, and  then I run the GANCAL command. I get for instance a value of 0x3fefe9 in FSCAL regiser, which makes more sense than for OFCAL, but of course if the offset isn't correct this doesn't matter much.

    Thank you for your help and best regards,

    François

  • Hi Francois,

    Can you send me the raw ADC output codes (in hex) you are seeing when you use the internal VREF and the supplies? Take 20 or so measurements for each and send the results, noting the specific gain, filter settings, data rate, and supply voltages used. Perhaps there is an issue with the conversion process.

    For the offset calibration, note that the value in the OFCAL register is in binary 2's complement form since offset can be either positive or negative. So the value you are seeing is actually a very small negative number (approximately -8.6uV assuming VREF = 2.5V and gain = 1)

    -Bryan

  • The register configuration is as follow :

    DATA RATE : 20sps

    DELAY : 1.16ms

    FILTER : FIR

    BYPASS : ENABLED (PGA gain is 1 but with bypass)

    CHOP: NORMAL

      AVDD/AVSS; No calibration; AIN5 = 3.5V AVDD/AVSS; Calibration; AIN5 = 3.5V Internal vref; No calibration; AIN5=1.5V Internal vref; Calibration; AIN5=1.5V
    1 0x005a4426 0x007ffb76 0x004d5da2 0x003dd6ba
    2 0x005a4298 0x007ff9ca 0x004d5ef3 0x003dd7fd
    3 0x005a42db 0x007ffae4 0x004d5f7c 0x003dd477
    4 0x005a42d2 0x007ff9ca 0x004d6066 0x003dd82c
    5 0x005a4417 0xfffff4cc 0x004d5f84 0x003dd743
    6 0x005a453d 0xfffff3ff 0x004d5f78 0x003dd654
    7 0x005a43ea 0xfffff159 0x004d5d43 0x003dd583
    8 0x005a427c 0xfffff444 0x004d5db0 0x003dd84e
    9 0x005a4364 0xfffff31c 0x004d5fc5 0x003dd7a2
    10 0x005a4416 0xfffff3ce 0x004d5eaa 0x003dd71d
    11 0x005a43dc 0xfffff01b 0x004d5cf1 0x003dd359
    12 0x005a436b 0xfffff030 0x004d5da4 0x003dd7c2
    13 0x005a4255 0xffffef6d 0x004d5e45 0x003dd2c8
    14 0x005a43ba 0xffffedff 0x004d5ed3 0x003dd4f8
    15 0x005a43a3 0xffffedcb 0x004d60d1 0x003dd698
    16 0x005a43fb 0xffffed13 0x004d5ec4 0x003dd717
    17 0x005a43da 0xffffe0df 0x004d6386 0x003dd6d9
    18 0x005a42aa 0xffffe2aa 0x004d5fc0 0x003dd322
    19 0x005a42df 0xffffe004 0x004d5b62 0x003dd295
    20 0x005a4245 0xffffe13e 0x004d5ce3 0x003dd4a2
       
    ofcal default 0x00ffffe3 default 0x00ffff5c
    fscal default 0x003fefe7 default

    0x003332fe

    I am also attaching the schematic which I forgot on previous message.

    Finally, the code I use for conversion from hex code to volt value, a first function gets the code in tmp, pads ones on the left to make it a 32bit two's complement, and then converts it to a 32 bit integer  (tmp is uint32_t and int_val is a pointer to int32_t)

    if(tmp & 0x800000) tmp |= 0xff000000;
        *((uint32_t*) int_val) = tmp;

    then the parent function does the scale conversion.

    *val =  (vrefp - vrefn) * (int_val - (-0x800000)) / ((0x800000 - 1) - (-0x800000)) + vrefn;

    Best regards, François

  • Hi Francois,

    Those values look correct to me in general.

    For example, the first value in the first column (0x005A4426) converts to 3.52 V using a 5V reference (AVDD - AVSS = 5V). The first value in the third column (0x004d5da2) converts to 1.51 V.

    The default FSCAL value in the internal VREF case (0x003332fe) looks very low, yielding a correction factor of ~0.8. I would guess that the wrong full-scale value was provided to the inputs during this process. You can see this in the calibrated result (first entry, fourth column) where 0x003dd6ba corresponds to 1.21V using a 2.5V VREF, or ~80% of 1.5V. The good news is that the ADC is taking the incorrect FSCAL value and applying it to the output result correctly, so once you configure the full-scale voltage correctly, everything else should be good.

    You can also check out our Excel-base calculator tool for the ADS1261. This is what I used to perform the code conversions for this device: https://www.ti.com/lit/zip/sbac200

    -Bryan

  • Hi Bryan,

    Thank you for your help, you were correct in both cases, my conversion calculation was wrong, and I forgot to change the fullscale input in the internal 2.5V case. It works now with the AVDD/AVSS supply as expected. and I get results very close to my multimeter measurements, within a few tens of microvolts, which is within the accuracy of my multimeter.

    Best regards,

    François