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.

ADS1248 RDATA problem

Other Parts Discussed in Thread: ADS1248, ADS1120, ADS1148

Hi,

This is my schematic. I use 4 wire temperature measurement with 3.3V supply on ADS1248. Connection with ADS1248 is established successfully and I am able to read/write register etc. 

For the test purpose I connected 120ohm resistor and make 4 leads out of it. I am using RTD#1 together with 5k REFP0. On the actual schema I've switched P1 and N0 because it was a mistake to connect it this way.

I've set:

PGA = 32, VREF = onboard(2.048V), 5SPS, Burnout Off, Positive input A0, negative input A1, IDAC 250u

According to my calculation the input differential voltage(between AINP and AINN) should be Vin = IDAC*RTD = 250u*120OHM = 30mV. Modulator input is therefore 30mV*PGA = 30mV*32 = 0.96V. And my output should be then (0.96V/2.048)*2^24 = 7864320, and my MSB is then F0. However ADS1248 after sending RDATA command sends 3B as MSB and the value is constant. LSB is ofc changing a little. I've measured the onboard reference and it is 2.048V.

Thank you for your help.

  • Hi Predrag,

    welcome to our forum.

    From your description I can not really see why you measure wrong results. Your setup and schematic are okay in principle, but we can probably make some improvements to it.

    First of all we should change your setup to a true ratio-metric measurement. This means instead of using the internal reference as the reference source for the ADC you should select the external REFP0/REFN0 pins as the reference source for you ADC (REFSELT=00). That way inaccuracies and drift effects of the excitation current source (IDAC) cancel out, as the reference voltage will change accordingly.
    Please remember to leave the internal voltage reference activated (VREFCON=01), otherwise the IDAC will not work.
    They 5k reference resistor should also be a precision low drift resistor. Otherwise you will see some errors over temperature due to the drift of the resistor value.

    Depending on the temperature range you want to measure you could potentially increase the IDAC value and decrease the gain and reference resistor value. I attached a spreadsheet that you could use to play around with the values.

    You should also think about adding RC filters on the inputs and the reference pins. I am showing this in some more detail in the application section of the ADS1120 datasheet. You may want to have a look at it.
    I also recommend reading through the following application note: http://www.ti.com/lit/pdf/sbaa201

    A comment regarding the power supply bypassing caps and the cap on VREFOUT pin. Please make sure to put one of the 100nF caps as close as possible to the AVDD pin and the other one as close as possible to the DVDD pin.
    The other side of the VREFOUT cap should be routed to the VREFCOM pin and then to GND.

    I also recommend running a self-offset calibration before performing any measurements.

    Did you check if you configured the IDAC routing correctly? It should be routed to IOUT1 in the configuration register (IDIR1=1000).

    Did you place the device in SDATAC mode before reading the conversion result using the RDATA command?

    Regards,

    ADS1248 Calculator.xlsx
  • Hi Predrag,

    I just checked your numbers. I believe the output code you are seeing, MSB=3Bh, is correct for the setup you have implemented.

    The LSB size is (2*VREF / ((2^24 - 1) * Gain) ) = (4.096V / ((2^24 -1)*32) ) = 7.6nV/Code.
    For a 30mV input signal you should then see a code in the range of (0.30mV / 7.6nV/Code) = 3BFFFF.

    Regards,

  • Thank you for your prompt reply Joachim,

    I changed the PGA to 16 because my temperature range is from -30°C/400°C and I want to achieve 1°C resolution in that range. I selected external reference for modulator and connect it to REF0.

    Here is the thing. My opinion is that ADS is improperly configured. I used .xls which you attached in the post and for 120OHM input resistor I should have 30mV of input voltage with IDAC = 250u, and my voltmeter is showing me that value so I conclude that IDAC is 250u and the input voltage is what I expected it to be. 

    With 30mV, Vref = 1,25V and PGA=16 my output should be 3126E9 in HEX. I am getting 30D950 in HEX from ADS. 

    Before RDATA command is issued my register values are as follows:

    MUX0 = 0x01 ->BURNOUT=off, AINP = AIN0, AINN = AIN1

    VBIAS = 0x00 

    MUX1 = 0x20 ->CLKSTAT = internal, VREFCON = internal always on, REFSELT = REF0, MUXCAL = normal

    SYS0 = 0x40 ->PGA = 16, DOR = 5SPS

    OFC0 = 0x00

    OFC1 = 0x00

    OFC2 = 0x00

    FSC0 = 0xC0->FSC0/FSC1/FSC2 are PGA dependent and I don't know whether they are good or not

    FSC1 = 0x0B

    FSC2 = 0x40

    IDAC0 = 0x93->DRDY MODE = Data out, IMAG = 250u

    IDAC1 = 0xF8 ->I1DIR = Disconnected, I2DIR = IEXT1 /I tried switching I1DIR and I2DIR but there were no changes

    GPIOCFG = 0x00

    GPIODIR = 0x00

    GPIODATA = 0x00

    Here is how I routed it:

    Hi Predrag,

    I just checked your numbers. I believe the output code you are seeing, MSB=3Bh, is correct for the setup you have implemented.

    The LSB size is (2*VREF / (2^24 - 1) ) = (4.096V / (2^24 -1) = 122nV/Code.
    For a 0.96V input signal you should then see a code in the range of (0.96V / 122nV/Code) = 3BFFFF.

    Regards,


    .XLS states that the LSB size is 2*Vref/(PGA(2^24-1)). However, from your expression and giving numbers I get: 4.096/(2^24-1) = 244nV/Code.

  • Hi Predrag,

    I got your answer per email, but interestingly it does not show up here in the forum.

    A few comments:
    1) If you only need to measure up to 400°C then I would recommend to leave the additional 300R out and only leave the 4.7k as the reference resistor. This should still give you enough headroom. I am assuming you will use  a PT100 in the end?

    2) Do not overwrite the FSC values. Those values are factory trimmed and in most cases the gain accuracy is good enough.

    3) If you are only looking for 1°C of resolution then the 16bit version, ADS1148, might already be sufficient for your application.

    4) Could you run a self-offset calibration in the beginning? Use the internal short of the MUX for it.

    5) Did you measure the 120R and 4.7k (5k) resistors with a high precision meter to see what the real values are?
    The output code will be proportional to the reference resistor. If the reference resistor or the 120R has a different value than you think (maybe you used 1% tolerance resistors) then your output code will be off.

    Regards,

  • Hi Joachim,

    1) I am using PT100. Thanks, I will remove 300R from PCB.

    2)I did not overwrite any of the FSC values.

    3)I have already ADS1248 and it is soldered on the PCB

    4)Can you explain it a bit more how to do it? Is issuing the  SELFOCAL command enough?

    5)I will measure it precisely when I get to the lab tomorrow morning :)

    Best regards,

    P.

  • Hi Predrag,

    as far as I remember you only need to issue the SELFOCAL command. This will automatically short the inputs internally of the ADC and then perform 16 readings. Means the calibration will take 3.2sec. When /DRDY falls low, the OFC registers should be updated. You should double check the OFC values if they make sense. The uncalibrated offset should only be a few mV.

    Regards,

  • Hi Predrag,

    you have been absolutely right with your comment about my LSB calculation. I updated my post above to show the correct values.
    Also I had it calculated in terms of output referred LSBs. We usually calculate it input referred.
    I blame the jet lag :-).

    Please run the SELFOCAL command with the gain and data rate setting that you use for the measurement.

    Regards,

  • What is the proper way to wake up the ADS1248? I tried with issuing WAKEUP command after reading the data with RDATA but with no success. However, the datasheet states that the start pin should be pulled up to exit the sleep mode? 

    Thank you :)

  • Hi Predrag,

    The START pin must be asserted high for the ADS1248 to convert.  It must also be high to read and write registers.

    Best regards,

    Bob B

  • Hi Bob,

    Basically, I have 2 ADS1248 and on each of them 2 RTD's so I want to change the MUX0 register. Currently I am pulsing the START pin low->high-> low and wait for DRDY to go LOW for an interrupt and then read the register. Should I pulse the START high again, write to the MUX0, put START low and then RDATA?

    Thank you :)

  • Hi Predrag,

    You can't just pulse Start when writing the registers.  Start must stay high throughout the communication. The best way is to pull Start high, write the register, then bring start back low when cycling through the mux. The conversion will restart after the mux register write. The device will go to sleep as soon as the conversion is complete. This is signaled with DRDY transitioning from high to low. At this point the data can be read with the RDATA command while the Start pin is low.

    Best regards,

    Bob B