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.

How come all the measurement of my ADS1258 off by -0.02 volts?

Other Parts Discussed in Thread: ADS1258, OPA227, OPA2378

I am using a ADS1258 to measure a voltage of a 3-axis accelerometer and a 3-axis gyroscope. The voltage measured by a multimeter, along with the ADC output are as follows:

Channel 1: Measured = 1.616V       ADC Output = 1.593V        Difference = -0.023V

Channel 2: Measured = 1.585V       ADC Output = 1.558V        Difference = -0.027V

Channel 3: Measured = 1.933V       ADC Output = 1.906V        Difference = -0.027V

Channel 4: Measured = 1.216V       ADC Output = 1.195V        Difference = -0.021V

Channel 5: Measured = 1.207V       ADC Output = 1.221V        Difference = -0.014V

Channel 6: Measured = 1.216V       ADC Output = 1.186V        Difference = -0.030V

Channel 7: Measured = 1.243V       ADC Output = 1.223V        Difference = -0.020V

Channel 8: Measured = 1.244V       ADC Output = 1.224V        Difference = -0.020V

VCC:            Measured= 4.891v       ADC Output = 4.890V        Difference = -0.001V

VREF:          Measured= 3.300v       ADC Output = 3.310V        Difference = -0.010V

All the channels are single-ended with the common (AINCOM) connected to the ground.

As you can see, the voltage output of ADC is consistently less than the measured voltage by 0.02-0.03 volts. The following is the procedure I used to get those values

Suppose the ADC outputs: 0x8F2C606D

1. Mask the first byte by 0x1F to get the channel number: 0x8F & 0x1F = 0x0F (Single-Ended Channel 8)

2. Divide the remaining 3 bytes by 7864320 (0x780000): 0x2C606D / 0x780000 = 0.3698055

3. Divide the result from Step 2 by a GAIN factor, which is 1.000093:  0.3698/1.000093 = 0.3697709

4. Multiply the result by reference voltage: 0.3697709 x 3.3098895 = 1.2239009

Is the above calculation correct? Is there anything I miss that may cause the offset?

 

  • Anthony, 

     

    Can I see a schematic of your system. I am specifically interested to see what your input drive circuitry looks like and/or anything you may have between MUXOUT and ADCIN. 

    In your column "Measured" - Are these values measured directly at the ADC input or before your input drive circuitry? 

    If you do not want to post your schematic to the forum, email it to me directly at a-calabria@ti.com

    Your equations look correct. I assume that you have a filter between MUXOUT and ADCIN and your GAIN factor comes from resistor matching there. Am I correct? If so, measure the voltage directly at the ADCIN pin to compare to your ADC Output code.

    Regards,

    Tony Calabria

     

     

  • Anthony,

    What multimeter are you using to measure back your inputs? Typically for 24-bit converters, we need an Agilent 3458A. It's accuracy and linearity are extremely good and you need to know if the measurement is accurate in comparison to your ADC reading.

    Joseph Wu

  • Tony,

    Thank you for your prompt reply.

    Since my design is still in early prototyping stage, I am using the ADS1258EVM board. I am using my own microcontroller (Luminary Micro LM3S9B92) to control the ADC. That's why I wonder if I have done something wrong in my calculation or I have missed something.

    The accelerator and gyro are connected directly to the ADC (with some resistor and cap to ground for filtering). The following link is the schematic of the accelerometer/gyro combo board.

    http://www.sparkfun.com/datasheets/Sensors/IMU/6DOF-Razor-v11.pdf

    Due to some reported problem of the HP filter I removed C1, C2, C19. R8, R5 and R16. Refer to the above schematic, I connect the board to the ADC in the following way:

    AXOUT---->AIN0

    AYOUT---->AIN1

    AZOUT---->AIN2

    XOUT-1X---->AIN3

    YOUT-1X---->AIN4

    ZOUT-1X---->AIN5

    VREF1---->AIN6

    VREF2---->AIN7

    The ADC is configured to use external reference. REFP is connected to the Vcc of the accelerometer/gyro board driven by a TPS79633 voltage regulator. REFN is tied to ground.

    The values of the "measured" column are taken directly from the ADC inputs (i.e. the header pins of the EVM board). Since I use internal multiplexer connection (BYPAS = 0) MUXOUT and ADCIN are not used.



     

     

     

  • Joseph Wu said:

    Anthony,

    What multimeter are you using to measure back your inputs? Typically for 24-bit converters, we need an Agilent 3458A. It's accuracy and linearity are extremely good and you need to know if the measurement is accurate in comparison to your ADC reading.

    Joseph Wu

     

    I just used the handheld multimeter to take the measurement. In the place I work the best multimeter is Agilent 34401A, which is still not as good as 3458A.

    Even so I still believe that offset  as large as -0.02 volts occurred consistently across all measurements cannot be attributed solely to the inaccuracy of the instrument. I have another 24-bit ADC EVM in hand (Linear LTC2449) that gives me measurement values very close to those I got with my multimeter.

     

  • In general, the 34401A should be good enough for the resolution you need.

    I just have a couple of hints though:

    I would remove the gyro board and measure some sort of DC voltage source. It should be low noise if possible. If you are using a precision reference, you could construct a resistor divider and measure that. By removing the gyro, you can check the ADC by itself and see if you have some sort of offset or gain error problem.

    You should also read back the reference voltage to ensure that the value is not noisy and varies over time. Based on your comments, it looks like you do this, but you should definitely check for any noise that may disrupt the reading.

    Once you check that, re-attach the gyro board and check for any kind of oscillation or spikes in the signal that might be interfering with the ADC and meter readbacks to explain why they may be different.

    I would note that the differential input impedance of the ADS1258 is only 65kohms and that the values of R6, R7, and R15 look a bit large without any input buffering (even if you have them removed for the time being).

    Joseph Wu

  • Thank you for your suggestion, I think I have overlooked the fact that the input resistance of the ADC is not small enough to be negligible. Could you suggest a high-precision input buffer amp that is suitable for my application? The ADC is configured to sample at the lowest data rate possible (I got ~120Hz per channel by measuring the frequency of DRDY signal).

     

     

  • Anthony,

    I know that the development group has often used OPA227s as a buffer for the ADC. These would either drive the mux inputs directly or be placed between MUXOUT and ADCIN. The important considerations are offset (which can often be calibrated out) and the noise.

    Joseph Wu

  • Joseph,

    I have requested some OPA227 samples, while I am waiting for them I use some op-amp in my hand (LT1366) as buffer and get some very good results.

    Another question I have is that I now have a bigger offset value derived from the internal reading. If calculated using the method in descried in the start of the thread, I got something like 0.0012 volts. Do I need to subtract this values from all my measurement to get the correct results?

  • Anthony, 

    What configuration do you have the op amp in? Is it just a simple buffer configuration with a gain of one or is it something else? 

    You will need to subtract the offset error from the op amp and the offset error of the A/D converter from your result. If you have the ADS1258 chop feature enabled, then the offset from the ADC is minimal (1uV typical, 10uV max). 

    The LT1366 specified offset error is 150uV typical and 475uV max. Measure the input voltage following the op amp (right before the A/D) and compare that to your output code. The measured voltage after the buffer op amp and before the ADC should correspond with the output voltage calculated from the output code. If you have chop enabled you will only have to subtract a few uV for the ADC offset voltage. 

    If your op amp is in a buffer configuration with a gain of one, measure the input and output voltage of the op amp to compare and see what the offset voltage of your op amp is. 

    Regards,

    Tony Calabria

  • Tony,

      The op-amp is connected as a voltage follower, with a 0.1u capacitor at the output to maintain stability.

      Do you mean I have to measure the offset of the op-amp manually and hard-coded my program to subtract that value to all my measurements? Can I just use the OFFSET internal reading of ADS1258?

      I am going to replace the LT1366 with OPA2378 I have just received to see if there are any improvement in offset voltage and noise.

  • Anthony,

    Do you have any series resistance with the 0.1uF capacitor? I don't think either the LT1366 or the OPA2378 can drive more than 1000pF and stay stable.

    The OFFSET reading shorts the differential output  of the on-board multiplexer. So if you have the op amps after the mux, then you can us the OFFSET function to keep track of your offset. However, if your op-amps are driving the inputs to the multiplexer, then you have to measure the op amp offsets and keep track of them.

    Joseph Wu

  • Joseph,

       Thank you for pointing this out, I have misread the datasheet. LT1366 doesn't require a output capacitor for compensation.

      I have one more question:

      I am using this ADC in single-ended mode. Do I still have to use 2 op-amp buffers, one for each polarity (i.e. between MUXOUTP and ADCINP, as well as MUXOUTN and ADCINN)? Or Can I just use one buffer between MUXOUTP and ADCINP and tie MUXOUTN and ADCINN to the ground?

    Anthony

  • Anthony,

    I would say that if you are referencing the signal to ground (and you have a fairly clean ground), that you won't need the buffer for MUXOUTN.

    That certainly saves one source of offset.

    Joseph Wu