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.

ADS1298: Noise on the ECG signals internal RLD amp is used

Part Number: ADS1298

Hello,

We are currently working with the ADS1298 chip for our ECG application and have encountered a recurring issue related to RLD which makes the tests fail randomly.

We tested for this issue extensively and eliminated most of the common issues like (dry skin, connection issues, revers lead issues, cable issues, muscle noise issue, movement issue).

We suspect that something is not working properly with the ads1298.

Checking the forum we found that similar or same issues ware reported(impedance imbalances on the RLD, high noise, RLD does not properly reduce the noise), but no real solution provided for the ADS1298.

references:

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/706043/ads1298-ads1298-right-leg-drive-not-working

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1059972/ads1299eegfe-pdk-ecg-noise-problem-rld-is-not-working?tisearch=e2e-sitesearch&keymatch=ads1298%25252525252520rld%25252525252520problems#

Please help.

For reference, I have attached the ECG schematics and code.

ads config.txt
 // CONFIG 1
 ads129x_device.base->setReadbackMode(ADS1X_READBACK_DAISY_CHAIN);   
 ads129x_device.base->setDataRate(ADS1x_DR2);                        /* SET the output data rate on 4kHz for the DEFAULT LOW-POWER mode */

 // CONFIG 3
 ads129x_device.base->setPowerDownReferenceBuffer(ADS1x_PD_REF_ENABLED);        // enable internal reference buffer
 ads129x_device.setRLDReferenceSignalSource(ADS129x_RLD_REF_SIG_INTERNAL);    
 ads129x_device.setRLDBufferPower(ADS129x_RLD_BUFFER_ENABLED);                 // RLD buffer is enabled


 ads129x_device.setPGAGain(ADS1X_CHANNEL1,ADS129x_GAIN_6); 
 ads129x_device.setPGAGain(ADS1X_CHANNEL2,ADS129x_GAIN_6);    
 ads129x_device.setPGAGain(ADS1X_CHANNEL3,ADS129x_GAIN_6);
 ads129x_device.setPGAGain(ADS1X_CHANNEL4,ADS129x_GAIN_6);   
 ads129x_device.setPGAGain(ADS1X_CHANNEL5,ADS129x_GAIN_6);  
 ads129x_device.setPGAGain(ADS1X_CHANNEL6,ADS129x_GAIN_6);   
 ads129x_device.setPGAGain(ADS1X_CHANNEL7,ADS129x_GAIN_6);  
 ads129x_device.setPGAGain(ADS1X_CHANNEL8,ADS129x_GAIN_6);   

 ads129x_device.setReferenceVoltage(ADS1x_REF_VOLTAGE_2_4V);

 // RLD_SENSP
 // ch2 and ch3 set
 ads1x_channel_status_t rldSenseP;
 rldSenseP.channel1 = ADS1x_STAT_DISABLED;
 rldSenseP.channel2 = ADS1x_STAT_ENABLED;
 rldSenseP.channel3 = ADS1x_STAT_ENABLED;
 rldSenseP.channel4 = ADS1x_STAT_DISABLED;
 rldSenseP.channel5 = ADS1x_STAT_DISABLED;
 rldSenseP.channel6 = ADS1x_STAT_DISABLED;
 rldSenseP.channel7 = ADS1x_STAT_DISABLED;
 rldSenseP.channel8 = ADS1x_STAT_DISABLED;

 ads129x_device.setRightLegDriveSense(ADS1x_POL_POSITIVE, rldSenseP); 

 // RLD_SENSN
 // ch2
 ads1x_channel_status_t rldSenseN;
 rldSenseN.channel1 = ADS1x_STAT_DISABLED;
 rldSenseN.channel2 = ADS1x_STAT_ENABLED;
 rldSenseN.channel3 = ADS1x_STAT_DISABLED;
 rldSenseN.channel4 = ADS1x_STAT_DISABLED;
 rldSenseN.channel5 = ADS1x_STAT_DISABLED;
 rldSenseN.channel6 = ADS1x_STAT_DISABLED;
 rldSenseN.channel7 = ADS1x_STAT_DISABLED;
 rldSenseN.channel8 = ADS1x_STAT_DISABLED;

 ads129x_device.setRightLegDriveSense(ADS1x_POL_NEGATIVE, rldSenseN);   

 // WCT1
 // bit3 PD_WCTS = 1 poweron
 // WCTA 011, channel2 negative
 ads129x_device.setWctAPowerDown(ADS129x_WCTA_STAT_POWERED_ON);                
 ads129x_device.setWctAmplifierAChannelSelection(ADS129x_WCTAC_AMP_CH2_N);   

 // WCT2
 // PD_WCTC = 1 powered on
 // PD_WCTB = 1 powered on
 // WCTB 010
 // WCTC 100

 ads129x_device.setWctBPowerDown(ADS129x_WCTB_STAT_POWERED_ON);                
 ads129x_device.setWctAmplifierBChannelSelection(ADS129x_WCTB_AMP_CH2_P);    
 ads129x_device.setWctCPowerDown(ADS129x_WCTC_STAT_POWERED_ON);                
 ads129x_device.setWctAmplifierCChannelSelection(ADS129x_WCTAC_AMP_CH3_P);    


// --LEAD off detection tryed with resistor puls but did not function

 //    Comp TH change   comparator treshold 75%
 ads129x_device.setLeadOffComparatorThreshold(ADS1X_COMP_TH_P_95_0);


 ads129x_device.setLeadOffDetectionMode(ADS129x_LOFF_MODE_CURRENT_SOURCE);
 //    I_LEAD_OFF_enable current magnitude 12nA
//    ads129x_device.setLeadOffCurrentMagnitude(ADS129x_LOFF_MAG_12NA);


 //    Lead off detection
 ads129x_device.setLeadOffComparatorPowerState(ADS1x_LOFF_COMP_ENABLED);

 // Enable lead off
 ads1x_channel_status_t lead_off_SenseN;
 lead_off_SenseN.channel1 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel2 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel3 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel4 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel5 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel6 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel7 = ADS1x_STAT_ENABLED;
 lead_off_SenseN.channel8 = ADS1x_STAT_ENABLED;
 ads129x_device.setLeadOffSense(ADS1x_POL_NEGATIVE, lead_off_SenseN);

 ads1x_channel_status_t lead_off_SenseP;
 lead_off_SenseP.channel1 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel2 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel3 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel4 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel5 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel6 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel7 = ADS1x_STAT_ENABLED;
 lead_off_SenseP.channel8 = ADS1x_STAT_ENABLED;
 ads129x_device.setLeadOffSense(ADS1x_POL_POSITIVE, lead_off_SenseP);
 

  • Hi,

    Could you provide more detail or some visual about what you mean by "recurring issue related to RLD which makes the tests fail randomly."?

    ------------------------

    Let's take one step back and do some checking -

    0. Can you successfully read the internal test signals in one and all channels?  Make sure you can achieve step 0 first before continue.

    1. What ECG signal source do you use? Suggest to start/use with an ECG simulator first.

       Use an ECG simulator and make sure RLD electrode is attached firmly.

       Then, try with the Internal RLD amp first by setting RLDREF_INT=1 to use the internal mid supply voltage (AVDD+AVSS)/2

       Turn off all RLD_SENSP and RLD_SENSP.

       And, turn off/disable most other additional features, e.g. WCT.

       And, only acquire ECG signal from Channel 1 first.

       If succeed, move on to channel 2 and other channel one after one. And, the All channels.

    ----------------------------------------------------------------

    In addition,

    from the schematic provided -

    why are there

    D2 +/-1V 

     and

    R20(100k), C16,C18

    and 

    FB13

    along the RLD

    and 

    what is SA1?

    And, where do the N go?

    Where is the RLD electrode connected to?

    -------------------------------------

    The above looks quite different from the Evaluation kit/board(EVM) reference schematic. Has someone done some prototyping tests&V&V before implementing above?

    If not, it's suggested to see if one could modify above to something similar to the EVM reference schematic first, and do some tests&V&V first.

    Then, after that, add/modify slightly one by one.

    Thanks