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.

ADS131M08: ADS131M08 calibration HELP!!

Part Number: ADS131M08
Other Parts Discussed in Thread: ADS125H02, ADS124S08, ADS1235

Hello, good afternoon. I'm here seeking help to solve some issues I'm having while using the ads131m08 to read load cells. I'm setting up the ads131m08 to sense 5 load cells.

My configuration is as follows: CLOCK 8.192MHz, OSR = 1024, 4kSPS, FSR = ±1.2V / 32 = 37.5mV. I configured a local value for each channel (where I encountered problem [1]). The load cells are 4-wire, 2mV/V, powered with 15V, and they are in good condition.

Currently, I'm only using 2 cells for testing, channels 3 and 4 of the ads. The cells are powered in parallel from the same 15V source. When calibrating the zero point, the cell in channel 4 settles around 0.3 to 0.5kg. However, the cell in channel 3 varies between 1 and 20kg after calibration. Sometimes it fluctuates by 10kg, and other times it jumps to 20kg above and then drops back.

I calibrated the scale and the offset (ocal registers). In the datasheet, it mentions gain calibration for each channel using the registers CHn_GCAL_MSB and CHn_GCAL_LSB, which is where I encountered problem [2].

Let me explain each problem/doubt:

Problem [1]: From what I understand, the ocal value is used to set the ADC at value 0, which in this case would be the value 8388607, but the obtained value is different by a few hundred. Here's a snippet of my code:

def escribir_valor_offset_ocal(self, ch, valor_a_tomar_por_offset: int):
    # Calculamos la diferencia con el punto medio 8388607

   valor_ocal = 8388607 - valor_a_tomar_por_offset
   print(f"valor por offset: {valor_a_tomar_por_offset}")
   if valor_a_tomar_por_offset == 0
        valor_ocal=0
        print("valor ocal: ",valor_ocal)
   # Convertimos a complemento a dos si es necesario
   if valor_ocal < 0:
        valor_ocal_complemento_a_dos = (1 << 24) + valor_ocal
        valor_ocal_complemento_a_dos &= 0xFFFFFF
   elif valor_ocal>0:
   valor_ocal_complemento_a_dos = valor_ocal
   valor_ocal_complemento_a_dos &= 0xFFFFFF 
   else:
       print("estoy reseteando:")
       valor_ocal_complemento_a_dos = 0

 #continue...

Problem [2]: I assumed there might be a gain error, so I thought of calibrating it, but I'm not sure what value to use. Is there a calculation involved, or is it trial and error?

Problem [3]: Is there any guide available for calibrating the ads?

Problem [4]: When I power the load cells with a source that shares the ground with my ads circuit, the cells lock into a value. But if I connect an external source to the load cell circuit, they work "correctly." I read about a ground loop, but I'm not entirely clear on it.

I'll attach a simple diagram of my circuit for reference.

  • Hi ,

    1. What's your input when you did the offset calibration?

    2. Please see details for the calibration in the section Calibration Registers and also the section of Calibration in the M08 datasheet, and also some details in the previous post on the forum:

      https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1290072/ads131m08-ads131m08-offset-and-calibration

    3. If you don't know how to obtain the gain and offset values, please watch this TI Precision Lab video lesson: https://training.ti.com/ti-precision-labs-adcs-ac-dc-specifications-offset-error-gain-error-cmrr-psrr-snr-and-thd?context=1139747-1140267-1128375-1139102-1128657 and the following lesson talking about other errors here: https://training.ti.com/ti-precision-labs-adcs-understanding-and-calibrating-offset-and-gain-adc-systems?context=1139747-1140267-1128375-1139104-1134080 

    4. I'm not sure how you connected your load cells and what the error value you got, but a radiometric is recommended for your application. See more details in the following app note:  A Basic Guide to Bridge Measurements

    Regards,

    Dale

  • Good afternoon, thank you for responding so quickly. Question 1: Looking through forums and following the information I was given, I interpret that to load the ADC offset, I have to put it in short mode using the MUX register and load that value directly into the OCAL register, as that value is in two's complement format and does not need to be modified. Referencing the 'ADS131M08: ADS131M08 Offset and calibration: When you short the input and read the code from the ADC, the code is already in two's complement format.' I need to move to the value 8388608. What value should I store in OCAL? Currently, I'm storing the raw value of [8388608 - value_adc_in_short_mode], and it's not shifting exactly to the value 8388608. I'm not sure what I'm interpreting incorrectly.

    I'm working with channels 3 and 4. My load cell is 1000kg. Channel 3 has an error of 0 to 2kg in tare, varying within this range. Channel 4, on the other hand, normally varies 10kg and has peaks of 30kg. I'll attach the graph when it was tared.

    Channel 3: The variation in millivolts (mV) is: 0.08132658898830414 mV The mean of the samples is: 66910.40 The variation between the highest and lowest peaks (excluding the first sample) is: 36384.90

    Channel 4: The variation in millivolts (mV) is: 7.475606761872768 mV The mean of the samples is: 651249.83 The variation between the highest and lowest peaks (excluding the first sample) is: 3344529.85

  • Hello, I'm updating a concern I have. I need to know how to calibrate the gain of each channel. The sensor in channel 4 gives me very high ADS values compared to the sensor in channel 3, even though both are calibrated in the exact same way. Channel 3 has minimal error, and when I tried other load cells in the same channel, the issue persisted.

    I don't have instruments for calibration other than taking samples and performing calculations. Nonetheless, I would need to generate an automatic calibration for my various devices since the load cells and ADS channels will be different.


    channel 3:

    Average = 64601,96

    ocal = 49478 - The measurement was taken using the register mux = 01 and was saved in raw data


    channel 4:
    Average = 504861.71

    ocal = 35092 -The measurement was taken using the register mux = 01 and was saved in raw data

  • Hi CELESTE GONZALEZ CANTERO,

    **We will be on holiday for the next few days here in the US, so please expect some delay in our responses until next week**

    One thing to note is that the OCAL procedure you describe where you set the MUX bits = 01b to short the ADC inputs together will only calibrate the ADC offset. In other words, it will not calibrate your system offset. So if there are additional offsets in your system, these will not be accounted for in the OCAL procedure, but they will show up in the final measurements.

    Dale previously pointed you to our bridge design guide - have you reviewed this document?

    I'm not sure how you connected your load cells and what the error value you got, but a radiometric is recommended for your application. See more details in the following app note:  A Basic Guide to Bridge Measurements

    Section 5.5 talks about how to calibrate a resistive-bridge sensor using a weigh scale as an example. This is the general procedure you would follow to calibrate your system

    Also, how are you accommodating the absolute voltage on the load cell output? You said the load cells are powered with 15V, is that a 15V unipolar supply? Or some sort of bipolar / asymmetric supply? A 15V unipolar supply will generate a common-mode output voltage of 7.5V when the load cell is balanced i.e. when there is no load applied. A 7.5V voltage is way too large for this ADC to support, and can damage the device. I cannot see the sensor part of your circuit so it is not clear to me how these voltages are being divided down into the input range of the ADC.

    Finally, one more comment: as Dale mentioned, the ADS131M08 has a binary two's complement coding scheme (see section 8.5.1.9 in the datasheet). Therefore, if you see an ADC code that is the decimal equivalent code of 8388608, this is basically the maximum ADC code available i.e. a full-scale voltage.  Your OCAL codes should be closer to 0 in decimal, but they could be positive or negative. It seemed like there was some misunderstanding about this concept

    -Bryan

  • Good morning, I'm reaching out again, and I apologize for the persistence. Thank you for the guide you provided; it greatly helped me understand what's happening. However, I'm still unsure how to solve my main issue, which is as follows:

    For the same weight, the raw ADC value sensed for channel 4 of the ADS is significantly different from channel 3. Channel 3 has a calculated slope M of 0.0008777566022325078 (M = 806kg / ADC_MEASURED_VALUE - ADC_TARE_VALUE). Channel 4 has a calculated slope M of 0.0007302457648463675 (M = 806kg / ADC_MEASURED_VALUE - ADC_TARE_VALUE).

    The values from channel 4 of the ADC range from 500000 to 700000, causing results to fluctuate significantly for the same weight. In contrast, channel 3 values hover around 60,000 for the same weight.

    I've been trying to solve this problem for several days, applying various methods, but none have yielded encouraging results. I've used the guide and read several forum posts, but I haven't found a path forward.

    Thank you very much for all the help being provided to me

  • Hi CELESTE GONZALEZ CANTERO,

    You did not respond to one of my questions in my previous post:

    Also, how are you accommodating the absolute voltage on the load cell output? You said the load cells are powered with 15V, is that a 15V unipolar supply? Or some sort of bipolar / asymmetric supply? A 15V unipolar supply will generate a common-mode output voltage of 7.5V when the load cell is balanced i.e. when there is no load applied. A 7.5V voltage is way too large for this ADC to support, and can damage the device. I cannot see the sensor part of your circuit so it is not clear to me how these voltages are being divided down into the input range of the ADC.

    Can you let me know how you are solving this issue since I cannot see your whole board?

    -Bryan

  • "Hola, gracias por responder tan rápido. Actualmente, estoy usando una fuente de alimentación para alimentar 3.3V al ADS desde mi Raspberry Pi y 15V para alimentar mi celda de carga. Mi célula de carga tiene 4 cables, 2 para la alimentación, uno para la señal positiva y otro para la señal negativa. La célula de carga es la CZC2500 con 2mV/V y 350 ohmios, diseñada para aplicaciones industriales. De acuerdo con la información que encontré, no requiere un puente Wheatstone adicional, ya que ya está integrado, y la salida de señal es la diferencia de potencial del puente.

    Para lograr la máxima amplificación de la señal de la celda, la estoy alimentando con 15V para obtener 30mV para una carga de 2500 kg. Muchas gracias por todas las sugerencias".

  • Hi CELESTE GONZALEZ CANTERO,

    Please help us by translating your responses to English so we can better assist you

    -Bryan

  • Hi, thank you for responding so quickly. Currently, I'm using a power supply to feed 3.3V to the ADS from my Raspberry Pi and 15V to power my load cell. My load cell has 4 wires, 2 for power, one for the positive signal, and one for the negative signal. The load cell is the CZC2500 with 2mV/V and 350 ohms, designed for industrial applications. According to the information I found, it doesn't require an additional Wheatstone bridge as it's already integrated, and the signal output is the bridge's potential difference.

    To achieve maximum amplification of the cell's signal, I'm powering it with 15V to obtain 30mV for a 2500 kg load. Thank you very much for all the suggestions

  • Hi CELESTE GONZALEZ CANTERO,

    Please review section 6.3 in the document we linked to earlier, A Basic Guide to Bridge Measurements. This is effectively the system I believe you have, and this section explains in more detail what I am referring to

    When you apply 15V to the bridge, your maximum differential signal is 30mV. But what about the absolute voltage i.e. the voltage with respect to ground?

    When the bridge is balanced i.e. no load applied, the signal lines will have 0V differential voltage. This is because each signal line (positive and negative) is at the same voltage, which is the excitation voltage divided by 2 (i.e. V_EXC / 2). If V_EXC = 15V, then that means the voltage at the signal lines is 15 / 2 = 7.5V. This is considerably larger than the maximum voltage allowed by the ADS131M08 (see the table below, which is coincidentally Table 6.3). Note that under all circumstances, the absolute input voltage on any pin cannot be greater than AVDD, or 3.3V. If you are applying 7.5V to the ADC, then you can permanently damage the device.

    Again, please review the guide to help you understand how to fix this issue before doing anything else. The ADC will not convert correctly until you do, and it may already be damaged.

    -Bryan

  • Good morning, thank you for your response. According to specifications, if I power my ADS with 3.3V, I can apply the radiometric method and power my cells up to 3.3V but not higher than 3.6V. I can increase the supply voltage of my cells to 6V if I use a pseudoratiometric configuration and my gain is less than or equal to 4. However, if my gain is higher than 4, I can only apply 3V to my load cells. Would there be any issues if I power them with 3.3V? Applying a very low voltage of 3V would result in a maximum of 6mV (6.6mV if I can power them with 3.3V). If I use pseudoratiometric to power my cell with 6V, I would have 12mV, but with a scale range of gain = 4 ±300mV, I'd only be using 4% of the scale. I'm unsure how inaccurate it might become. On the other hand, if I have a power supply for the load cells of 3V, having a differential not exceeding 6mV with a scale range of gain = 128 ±9.375 with a noise-free bit range of 13.9. Do you recommend using this device for this application? And what would be the maximum value I could power my cells with and with what electrical power configuration? I'm asking this again in case my previous explanation was not correct. Furthermore, my biggest concern is that currently one channel is working correctly with this 15V configuration

  • Hi CELESTE GONZALEZ CANTERO,

    You need to make sure the absolute voltage from your bridge is within the input range of the ADC. You can use the M08 datasheet and the Bridge Guide to help you determine if the excitation voltage you choose meets the necessary criteria

    Also, you should confirm that you are in fact violating the absolute voltage requirements for this ADC. If you are, the channel might "work", but you are outside of the absolute maximum ratings such that device performance cannot be guaranteed.

    Other device options you can consider are:

    • ADS125H02 - fewer channels, but can accept signals up to +/-15V using a +/-18V supply. Also has a low noise PGA
    • ADS124S08 - 6x differential channels, wider input range compared to M08, but cannot accept signals >AVDD, where AVDD is limited to 5V
    • ADS1235 - 3x differential channels, wider input range compared to M08, but cannot accept signals >AVDD, where AVDD is limited to 5V

    -Bryan