Post Go back to editing

AD7718: input voltage changes when I connect to a loadcell directly

Category: Hardware
Product Number: AD7718

I am using AD7718 to measure loadcell output voltage as differential input 

My setup for 

VREF = 2.433V

ADC CON Register :  oxCF  //unipolar, 

ADC MODE Register: 0x13 

As soon as I connect loadcell output to AD7718 voltage jumps to 2.3V, before connection output voltage was 1mV

load cell circuit

Parents
  • My current test setup doesn't have any capacitor installed and 49.9 ohms replaced with 0 ohms

  • Hi, 

    When you check your sensor alone for example, I mean measure/probe the SIGNAL+ and SIGNAL- what is the measured value? Does the issue only when connecting them together? 

    May I know what is the load cell sensitivity, value of excitation voltage and reference voltage? 

    Another thing I noticed is the suggested configuration for weighscale or any load cell measurements is we so called ratiometric configuration, ratiometric configuration uses the same source/value of excitation volatge for load cell and reference voltage of the ADC so that any errors associated with the excitation voltage will be cancelled. 

    AD7718 is also a very old product do you want to consider using AD7124-8B or AD719x family for example? or is the reason of using this is due to supplies/stocks issues? 

    Thanks,

    Jellenie

  • Excitation voltage for load cell is 11.5V

    Sensitivity: 1 mv/V

    Reference voltage : 2.45V

    Voltage readings from Load cell without connecting to AD7718 is 0.2mV  without weight and 2.0mV with 500g weight

    If I inject 1V to the input from a power supply, it works fine but if connect load cells some random voltage shows up at the input depending on the resistance in series.

    I can try ratio-metric if you think that will solve the issue

  • Hi, 

    May I know what resistance values that your load cell/sensors is using? and what is maximum load weight that it can handle? 

    And you have mentioned an excitation voltage of 11.5V? I assume the common mode voltage will be 11.5/2 = 5.75V which is outside the allowable absolute AIN pin and CM input voltage range? Can you probe the AINP to GND or AINM to GND please to confirm? 

    And yes, a ratiometric configuration is highly recommended. 

    Thanks,

    Jellenie

  • Load cell resistance is 1K 

    Loadcell sensitivity is 1mV/V, so common mode voltage will be 5.75mV.  

    Anyways I am using ratio-metric measurement with 3.3V supply as reference and supply for loadcell

    I am getting good data after putting 471 ohms resistor instead of 0 ohms between load cell output and analog input pin.   I would like to understand why 471 ohms made it work.  I tried other resistance value and it wouldn't work

  • Hi, 

    Apologies, I am confused with the last statement. You have mentioned using 11.5V excitation voltage, but you also mentioned using 3.3V supply for load cell. Does it means the 3.3V supply works? Because if you used 11.5V as excitation voltage the common mode input will be outside range as your ADC supply is 5V only. 

    In terms of getting good data after putting 471 ohms, can you clarify what is meant by good data? and does not work? 

    Thanks,

    Jellenie

  • Hello,

     

    Sorry for the late response.  I was on vacation and working on other projects.  I am back on this project now. Here is my current setup. Everything running off of 3.3V .  If I replace 470 ohms with 0 ohms,  I get 0x89 value from the ADC status register.   

     

    Can we have a quick phone call to explain my setup.  I think we can resolve the issue lot sooner. 

    Code for calibration and data reading

    void AD7718_Calibrate( uint8_t ch )
    {
          uint32_t offset=0, gain=0;
          int i;
          uint8_t adcCon = 0;
          uint8_t regVal=0;
         
          if( ch == 0) return;
           if( ch > 5 ) return;

          printf( "Start of Calibration\n");
          adcCon =  (ch-1) << 4 ;
          adcCon = adcCon | 0x08; //unipolar coding
          AD7718_write_reg(REG_ADC_CTRL, adcCon );
          for( i=0; i<0xFF; i++);   //add some delay
          AD7718_write_reg(REG_ADC_MODE, 0x54 );
          for( i=0; i<0xFF; i++);   //add some delay
          //it should read 0xA1
         regVal = AD7718_read_reg( REG_ADC_COMM_STATUS);
     
          AD7718_write_reg(REG_ADC_CTRL, adcCon );
          for( i=0; i<0xFF; i++);   //add some delay
          AD7718_write_reg(REG_ADC_MODE, 0x55 );
          for( i=0; i<0xFF; i++);   //add some delay  
          //it should read 0xA1
          regVal = AD7718_read_reg( REG_ADC_COMM_STATUS);

         // if( !AD7718_ready() ) return;
          offset = AD7718_offset();
          gain = AD7718_gain();
     
          printf( "Gain=%ld Offset=%ld \n", gain, offset );
         
     

    }
    //ch - 1 to 5 is accceptable range
    void AD7718_ReadADC_CH( uint8_t ch )
    {
          uint32_t  data=0;
         int i;
          uint8_t adcCon = 0;
          uint8_t regRet=0;
         
          if( ch == 0) return;
          if( ch > 5 ) return;
    //
          adcCon =  (ch-1) << 4 ;
          adcCon = adcCon | 0x08;  //unipolar coding
     
          AD7718_write_reg(REG_ADC_IO_CTRL, 0x00);
          regRet = AD7718_read_reg( REG_ADC_IO_CTRL );

          AD7718_write_reg( REG_ADC_FILTER, 0x0D );
          regRet = AD7718_read_reg( REG_ADC_FILTER );

         
         AD7718_write_reg(REG_ADC_CTRL, adcCon );
         regRet = AD7718_read_reg( REG_ADC_CTRL );
     // single conversion, NEGBUF=0
        AD7718_write_reg(REG_ADC_MODE, 0x52 );
         regRet = AD7718_read_reg( REG_ADC_MODE );
       
        regRet = 0;
     
        for( i=0; i<0xFF; i++);
        //should return 0x81 - working , 0x89 - error occured or not ready
        regRet = AD7718_read_reg( REG_ADC_COMM_STATUS);
       //if( !AD7718_ready() ) return;
        data = AD7718_RD_ADC();
        printf( "%lu\n", data);
    }
    Regards

    Tahrim Chowdhury

    Senior Electrical Engineer

    Cell: 512 988 3368

Reply
  • Hello,

     

    Sorry for the late response.  I was on vacation and working on other projects.  I am back on this project now. Here is my current setup. Everything running off of 3.3V .  If I replace 470 ohms with 0 ohms,  I get 0x89 value from the ADC status register.   

     

    Can we have a quick phone call to explain my setup.  I think we can resolve the issue lot sooner. 

    Code for calibration and data reading

    void AD7718_Calibrate( uint8_t ch )
    {
          uint32_t offset=0, gain=0;
          int i;
          uint8_t adcCon = 0;
          uint8_t regVal=0;
         
          if( ch == 0) return;
           if( ch > 5 ) return;

          printf( "Start of Calibration\n");
          adcCon =  (ch-1) << 4 ;
          adcCon = adcCon | 0x08; //unipolar coding
          AD7718_write_reg(REG_ADC_CTRL, adcCon );
          for( i=0; i<0xFF; i++);   //add some delay
          AD7718_write_reg(REG_ADC_MODE, 0x54 );
          for( i=0; i<0xFF; i++);   //add some delay
          //it should read 0xA1
         regVal = AD7718_read_reg( REG_ADC_COMM_STATUS);
     
          AD7718_write_reg(REG_ADC_CTRL, adcCon );
          for( i=0; i<0xFF; i++);   //add some delay
          AD7718_write_reg(REG_ADC_MODE, 0x55 );
          for( i=0; i<0xFF; i++);   //add some delay  
          //it should read 0xA1
          regVal = AD7718_read_reg( REG_ADC_COMM_STATUS);

         // if( !AD7718_ready() ) return;
          offset = AD7718_offset();
          gain = AD7718_gain();
     
          printf( "Gain=%ld Offset=%ld \n", gain, offset );
         
     

    }
    //ch - 1 to 5 is accceptable range
    void AD7718_ReadADC_CH( uint8_t ch )
    {
          uint32_t  data=0;
         int i;
          uint8_t adcCon = 0;
          uint8_t regRet=0;
         
          if( ch == 0) return;
          if( ch > 5 ) return;
    //
          adcCon =  (ch-1) << 4 ;
          adcCon = adcCon | 0x08;  //unipolar coding
     
          AD7718_write_reg(REG_ADC_IO_CTRL, 0x00);
          regRet = AD7718_read_reg( REG_ADC_IO_CTRL );

          AD7718_write_reg( REG_ADC_FILTER, 0x0D );
          regRet = AD7718_read_reg( REG_ADC_FILTER );

         
         AD7718_write_reg(REG_ADC_CTRL, adcCon );
         regRet = AD7718_read_reg( REG_ADC_CTRL );
     // single conversion, NEGBUF=0
        AD7718_write_reg(REG_ADC_MODE, 0x52 );
         regRet = AD7718_read_reg( REG_ADC_MODE );
       
        regRet = 0;
     
        for( i=0; i<0xFF; i++);
        //should return 0x81 - working , 0x89 - error occured or not ready
        regRet = AD7718_read_reg( REG_ADC_COMM_STATUS);
       //if( !AD7718_ready() ) return;
        data = AD7718_RD_ADC();
        printf( "%lu\n", data);
    }
    Regards

    Tahrim Chowdhury

    Senior Electrical Engineer

    Cell: 512 988 3368

Children
No Data