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.

ADS1232 unwanted internal offset

Other Parts Discussed in Thread: ADS1232

Hello

I'm having problems with the ADS1232 calibration offset.
I read the value in a 24 Bit variable and step into an Int32 variable.
As there is a variation on the last 9 bits (I do not know if this would be an ideal condition) I'm doing a mask removing the last 9 bits.
[Gain 64] [10SPS]

Mask Used (0xFFFFFC00) 14 Bits

Variation of the value without load
0x0007F107
0x0007F0E3
0x0007F0FF
0x0007F103
0x0007F000 (Value with mask)

Variation of value with load
0x00146903
0x00146937
0x001468EF
0x001468D1
0x00146800 (Value with Mask)

I would like to reduce this variation, but the main problem is that sometimes the values change a lot with load or even without load. I decided to implement the reading routine with calibration after the 26th clock, and also to do a specific calibration-only routine to run manually, but sometimes the value is corrected and sometimes it is not corrected.

Can anybody help me?

  • Hi Erisson,

    Welcome to the E2E forum! I will assume this is a load cell application. Are you using the same voltage for the ADS1232 reference as the excitation of the load cell? What voltages are you using?

    If you take a look at the ADS1232 datasheet on page 5 you will see noise tables for various configurations. In particular take a look at the noise-free bits column. Notice that the noise of the ADC at 10sps and a gain of 64 would be in the range of 4.8 to 5.5 depending on the supply voltage. As your noise appears to be nearly double, I would first take a look at reducing the noise prior to the ADS1232. This could be from wiring or from not using adequate input filtering.

    Can you share your schematic and board layout? Can you also share the load cell parameters (such as sensitivity, capacity, etc.)?

    Best regards,
    Bob B
  • Hi Bob,

    Thanks for helping me.

    Schematic:
    easyeda.com/.../ads1232

    Load cell:
    www.hbm.cz/.../b1996.pdf
  • Hi Erisson,

    Now I understand some of why the noise is higher. You have a voltage divider on the reference and are using 2.5V instead of 5V. The load cell sensitivity is 2mV/V and with 5V excitation the output maximum will be 10mV. At this range I would suggest using gain of 128 instead of 64 as this will provide the best input referred noise. I would also suggest removing the voltage divider on the reference and use 5V directly. The end result will be the same as what you are doing currently with less noise and drift. The voltage divider will have drift issues and will add thermal noise. Also because you are limiting current to the reference there may also be issues with sampling as you have no capacitor at the reference inputs for a charge reservoir. So remove R1 and short (or 0 Ohm resistor R2).

    I would also short R3 or make closer to 1 to 2 Ohms. 100 Ohms will restrict the ADS1232 from needed current, especially on power-up.

    C12 and C14 should be 1/10 or less the value of C13. It is possible to see a filter imbalance on the common-mode filters creating a difference voltage so you want to make the differential filter to be dominant. With C13 at 100nF, keep C12 and C14 to 10nF or less.

    I would make these changes and check the noise again. If you apply a short to the analog inputs and mid-AVDD supply, you should see similar numbers as shown in the noise table of the datasheet. Once you have proven the circuit, then you can remove the short and apply the load cell. You should see similar noise numbers. If you do not then you are picking up external noise that needs to be eliminated.

    Make the changes I suggested and report back the conversion values you are seeing.

    Best regards,
    Bob B
  • Hello Bob,

    Thanks for the recommendations. I removed the R1 and put the R2 0hm. I removed the R3 and put a 10 Ohms resistor. I also switched capacitors C12 and C14 to 10nF. In the firmware I changed the gain to 128. Apparently the offset error that appeared from time to time disappeared, without being necessary to enter the calibration routine, however I need to do more tests. As for the error in reading the last 8 bits still remains the same.

    As for the firmware, is there any specific technique for acquiring and handling the read values? I am currently reading through interrupt through a timer configured for 5us. I check if DRDY is at level 0, to start the process, save the values in rotary buffer and every 1ms I calculate the average of the buffer.
  • Hi Erisson,

    I would suggest still doing the calibration at the time of power up of the ADS1232. This will remove any ADS1232 internal offset that is inherent to the device and not a part of the system.

    If you are still seeing a lot of noise, then I would suggest doing the external short test that I recommended previously. You can build a voltage divider of equal values (2 - 10K Ohm resistors for example) from AVDD to AGND. At the junction of the resistors connect both AINP and AINN of the ADS1232 so that there is a short within the correct common-mode of the ADC input. Check to see if the noise decreases to around 4 bits. If it does, then you will need to remove noise entering the board which is often a result of noise pickup on the wiring. Using shielded wiring that is properly terminated is recommended. If the external short does not improve the noise, then you have noise pickup due to issues with your board that may require layout changes. If you are using a prototyping solution that has loop wiring and poor grounding, this is often the cause of the noise pickup. To get the best noise performance you really need a PCB with no digital signals in the analog portion and a solid ground plane under the ADS1232 and analog components.

    For capturing the results, I often connect the DOUT/DRDY pin to both the SPI peripheral MISO and a GPIO that can trigger an interrupt on the high to low transition of the DOUT/DRDY signal. In this case there is no need to send 25 SCLKs to drive the DOUT/DRDY pin high to poll for a low state. Using this method:
    1. Enable the interrupt for a high to low transition on the GPIO.
    2. Wait for the interrupt to trigger, then disable the GPIO interrupt.
    3. Read the 3 bytes of conversion data.
    4. Clear the interrupt flag and go to 1.

    When using the polling method, either by continually polling the state of the pin or by the use of a timer, you need to make sure that the DOUT/DRDY pin is high before you start the polling process otherwise you may capture the same data over and over again if the last bit of the conversion data is 0.

    Best regards,
    Bob B
  • Thanks Bob, I will develop a new layout.