• Resolved

ADS1256: ADS1256 accuracy problem

Prodigy 85 points

Replies: 10

Views: 110

Part Number: ADS1256

Hi,

I am having a problem getting the proper accuracy with the ADS1256 on the custom board designed. ADC is reading a value of around 180mv, though i find a much less value on the board and i am unable to minimize the voltage on the channel input. I can share the schematics and board Gerber files for a review.

I had attached the readings for reference.ADS1256_Readings.xlsx

  • Hi Kongara,

    Can you please share your schematic and ADC configuration settings? You do not need to send the Gerber files at this time.

    Have you tried running the offset and gain calibration to see if the accuracy improves? It looks like the error is pretty consistent for all of the measurements taken with a single input voltage e.g. VIN = 0V. And the average error tends to decrease at the input signal increases, so you should be able to calibrate out the error.

    -Bryan

  • In reply to Bryan Lizon86:

    Hi Bryan,

    Self calibration and system calibration are giving negative values. I will perform the test again and will provide the readout.

    Please do provide a mail ID to share the schematics.

    Thank you.

  • In reply to Bryan Lizon86:

    Hi Bryan,

    Configuration

    • ADC AINCOM and -VREF is connected to ground
    • All channels are single ended.
    • Set to 60 SPS.
    • One shot conversion.

    Following is the ADS1256 Init() sequence, i am performing

    void ADS1256_Init(void)
    {
    
    	NVIC_DisableIRQ(EXTI0_IRQn);
    	ADS1256_PWR_ON;
    	HAL_Delay(15);
    	ADS1256_ResetCommand();
    	HAL_Delay(50);
    	ADS1256_ReadRegisters(ADS1256_STATUS, 5);
    //	ADS1256_SetInputBufferSetting(SET);
    //	ADS1256_SetAutoCalSetting(SET);
    	ADS1256_ReadRegisters(ADS1256_STATUS, 1);
    	NVIC_EnableIRQ(EXTI0_IRQn);
    //	ADS1256_CalibrateSelf();
    //	ADS1256_CalibrateSystem_Offset();
    	ADS1256_CalibrateSystem_Gain();
    	ADS1256_SetDataRate(ADS1256_SPS_60);
    	/* Enter the SYNC state */
    	ADS1256_Sync();
    //	ADS1256_Standby();
    //	/* Wait until the ADC signals it is finished */
    	while(RESET == ADS1256_DRDY_Flag)
    	{}
    	ADS1256_DRDY_Flag = RESET;
    
    	sprintf(Debug.Buffer,"Gain: %08lX\r\n",ADS1256_GetGainCalSetting());
    	LogPrint(Debug.Buffer);
    }

     Calibration readout are in the attachment.4812.ADS1256_Readings.xlsx

  • In reply to kongara sridhar1:

    Hi Kongara,

    How are you performing the calibration? It was not clear to me what data you sent in the Excel document. For the SELFCAL you should not have to short Ch 2 to ground as it says in the document. The ADC automatically shorts the inputs together internally for the offset calibration, and applies a full-scale signal from the reference voltage you apply for the gain calibration. And I wasn't clear what the table of values represented e.g. "Reset -1", "Reset -2", etc.

    When you perform the SYSOCAL / SYSGCAL, are you shorting the external inputs and applying a full-scale signal, respectively? Otherwise the values you get will not be accurate, and will lead to bad results.

    Do you have the buffer enabled for these measurements?

    You can click on my name and select "Request friendship". This will allow you to send me the schematic offline via a private message so it will not be visible to anyone else.

    -Bryan

  • In reply to Bryan Lizon86:

    Hi Bryan,

    As suggested, i had performed SELFCAL, with 100mV as input between Channel 1 and Ground, with input buffer OFF.

    It is observed that the Offset and Gain values are not consistent during the multiple reset cycles.

    I am unable to send private messages as your name is not being recognized in New message pop-up.

    Readings are in the attachment.ADS1256_SELFCAL_Readings.xlsx

  • In reply to kongara sridhar1:

    Hi Kongara,

    I believe I had to accept your friend request before you can send me messages, which I just did. So please send me the schematic offline at your earliest convenience.

    Can you send the configuration settings you are using? Which is to say the example hex/binary values you are writing to the registers to configure the device?

    It appears that something is wrong here as the FSC register values you are reporting (FFFFFFh) are basically at 0, when they should be around 400000h.

    Also, what are you showing in the table you sent? Each column of data shows a different offset and gain value, then a list of values below. These values seem to start higher then drift to a relatively steady-state - what is this data supposed to be showing? I would expect the values to be very similar once calibration is completed, so this information does not make sense.

    -Bryan

  • In reply to Bryan Lizon86:

    Hi Bryan,

    Inconsistency in the readings is due to the operating frequency of the SPI interface. It is set to 3 MBits/s, i had changed it to 1.5 MBits/s. Now i am able to read the registers properly.

    Following is the ADC configuration i am using.

    [ADS1256] Register 0 STATUS: 0x31
    [ADS1256] Register 1 MUX: 0x18
    [ADS1256] Register 2 ADCON: 0x20
    [ADS1256] Register 3 DRATE: 0xF0
    [ADS1256] Register 4 IO: 0xE1
    [ADS1256] Register 5 OFC0: 0xD3
    [ADS1256] Register 6 OFC1: 0xB6
    [ADS1256] Register 7 OFC2: 0xFD
    [ADS1256] Register 8 FSC0: 0x5F
    [ADS1256] Register 9 FSC1: 0x49
    [ADS1256] Register 10 FSC2: 0x40

    With the above configuration i had taken the full scale readings but the offset is still there. I will try to SELFCAL the ADC and post the readings.

  • In reply to kongara sridhar1:

    Hi Kongara,

    Thanks for letting me know about the SPI speed. The SCLK must be at least less than CLK / 4. So if you are using a 7.68MHz CLK, then your SCLK must be a maximum of 1.92 MHz. Using a faster SCLK will certainly cause timing issues and lead to bad data.

    Let me know what you discover about performing the SELFCAL.

    -Bryan

  • In reply to Bryan Lizon86:

    Also, a few comments about the schematic (I only reviewed page 3):

    • Looks like you have VREFN tied to -2.5V. If that is the case, the ADC will not function properly with a true negative voltage. VREFN should be grounded
    • SYNC/PWDN appears to be pulled up to AVDD, where it should be pulled up to DVDD
    • We don't necessarily recommend ferrites on the supply pins, as the ADC could require large amounts of instantaneous current that could be choked by the ferrites, causing the supplies to droop. This is not always an issue, but something to keep in mind
    • You can directly ground the GPIO pins, you don't need to use a pull-down resistor. Just ensure that all of these pins are configured as inputs. This is especially true for the D0/CLKOUT pin, which must be updated in both the IO and ADCON registers.
    • You should likely add some filtering on the output of the VREF circuit / input to VREFP, VREFN. This is shown in the ADS1256 datasheet in Figure 25

  • In reply to Bryan Lizon86:

    Hi Bryan,

    I am performing SELFCAL after selecting the MUX as per the channel required and i had done some filtering in the firmware to skip the sample out of range. With this, i had achieved a good accuracy as the requirement. Our Hardware team is working on finding the root cause for the offset observed with out calibration.

    Schematic observations

    1.  -VREF is connected to GND, by shorting the C51. U16 is not mounted.
    2. We will add filter as suggested at +VREF.
    3. SYNC /PDWN pin will be pulled up to DVDD.
    4. Ferrite beads will be removed at DVDD and AVDD.

    Readings after calibration and filtering are attached.2047.ADS1256_SELFCAL_readings.xlsx