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: Can´t get ECG Signal

Part Number: ADS1298

Hello everyone, 

I made a prototype of an ECG with ADS1298. For a long time I have been doing lots of tests and as a result a got the square internal test signal and a 10Hz sine wave from an external generator. When I connect the electrodes to the body, all I get is noise. I can´t get the ECG signal correctly. 

Here I share my schematics:

LL electrode

RL electrode

Finally here it is my register configuration to see just one channel

//----- CONFIG3 -----//
    write_reg(CONFIG3,1);
    __delay_us(2);
    SPI1_Exchange8bit(0xCC);                                
    __delay_us(2);
    
    //----- CONFIG1 -----//
    write_reg(CONFIG1,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x06);                                
    __delay_us(2);
    
    //----- CONFIG2 -----//
    write_reg(CONFIG2,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x50);
    __delay_us(2);
    
    //----- CH1SET -----//
    write_reg(CH1SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x00);                                
    __delay_us(2);
    
    //----- CH2SET -----//
    write_reg(CH2SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);
    __delay_us(2);
    
    //----- CH3SET -----//
    write_reg(CH3SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);
    __delay_us(2);
    
    //----- CH4SET -----//
    write_reg(CH4SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);
    __delay_us(2);
    
    //----- CH5SET -----//
    write_reg(CH5SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);
    __delay_us(2);
    
    //----- CH6SET -----//
    write_reg(CH6SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);
    __delay_us(2);
    
    //----- CH7SET -----//
    write_reg(CH7SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);
    __delay_us(2);
    
    //----- CH8SET -----//
    write_reg(CH8SET,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x81);        
    __delay_us(2);
    
    //----- LOFF -----//
    write_reg(LOFF,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x5B);
    __delay_us(2);
    
    //----- RLD_SENSP -----//
    write_reg(RLD_SENSP,1);
    __delay_us(2);
    SPI1_Exchange8bit(0xFF);                    
    __delay_us(2);
    
    //----- RLD_SENSN -----//
    write_reg(RLD_SENSN,1);
    __delay_us(2);
    SPI1_Exchange8bit(0xFF);                    
    __delay_us(2);
    
    //----- LOFF_SENSP -----//
    write_reg(LOFF_SENSP,1);                    
    __delay_us(2);
    SPI1_Exchange8bit(0x00);                    
    __delay_us(2);
    
    //----- LOFF_SENSN -----//
    write_reg(LOFF_SENSN,1);                    
    __delay_us(2);
    SPI1_Exchange8bit(0x00);                    
    __delay_us(2);
    
    write_reg(LOFF_FLIP,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x00);
    __delay_us(2);
    
    write_reg(CONFIG4,1);
    __delay_us(2);
    SPI1_Exchange8bit(0x02);
    __delay_us(2);
    
    write_reg(WCT1,1);              
    __delay_us(2);
    SPI1_Exchange8bit(0x00);        
    __delay_us(2);
    
    write_reg(WCT2,1);              
    __delay_us(2);
    SPI1_Exchange8bit(0x00);        
    __delay_us(2);

I don´t know what I am doing wrong. I can´t find the error. 

  • Hi Gonzalo,

    Thanks for your post and welcome to the forum! 

    This noise is most likely from the power lines, either from how you're powering the board, or the lights. The noise from the lights can couple onto the skin and be seen in the measurement. Are you using a battery or a power adapter of some sort to power your board? 

    If you have not done so already, please read the app note on cancelling common-mode noise in the BIOFAQ, located here: https://e2e.ti.com/support/data-converters/f/73/p/772058/2855202

    One thing I noticed is that you have a CR CR filter on your RLD line that looks like it was copied from your other electrode inputs. I would recommend shorting out R27 & 28, and removing C49 & 50. I would also recommend disabling lead-off detection for now as it can complicate things. I also see that you are using every input to derive your RLD signal, which can cause issues when the RLD amplifier attempts to gain this signal up. See the post in the BIOFAQ and consider using fewer leads to derive your RLD signal, such as only 1 positive input. 

    Take some time to read through this material and try a few debug steps. There are also numerous other posts on the forum with similar issues that may help you.

    Let me know if these steps help or if you have any more questions! 

  • Hello Alex, 

    thank you for your answer.

    I am powering the device from a 9V battery., so I don´t have noise from the line. I removed de CR CR filter in the RLD line, lead-off detection is disabled and I used now just one postiive input to derive RLD amplifier. Those things solved the problem and now I get the view of the ECG Signal. 

    However, I still don´t have the ECG signal totally clean. It seems to have some high frequency noise. I read the article you recommended and I don´t understand how to drive the common mode voltage through a low resistor (Rp), as it´s showed in the following image.

    Where do I have to put Rp? I know it has to connect to the Right-Leg Drive, but VREF in this case is the pin RLD REF in ADS1298?

    So do I have to add a resistor between RLD REF and the Right-Leg Drive? As you see in the previous post I already put the RLD OUT pin to this RL Drive and I connected a resistor Rp in this Output, completing the feedback loop as seen in the PDF to improve CMR.

    My final RLD circuit is like the next image. Is it correct??

    Also, the signal seems to have a variable offset. The zero point never gets fixed. I don´t know why this happens. 

    Best regards,

    Gonzalo.

  • Hi Gonzalo,

    That is great to hear - very good progress. 

    Have you been able to derive the frequency of the noise? Is it constant or periodic? 

    Rp would be in between the RLDoutput and the electrode cable that connects to the patient. The purpose of Rp (protection resistor) is to limit the possible amount of current that can be injected on the patient. The value of this resistor changes based on the standard that the medical equipment is being tested against. How you have drawn your circuit looks fine to me.  

    How long are you measuring data for? Is the patient moving at all while the measurement is taking place? Wondering baseline (variable offset) is typically caused by a changing of impedance somewhere in the signal chain - oftentimes at the electrode connection to the patient. The RLD drive closes the loop, and if there's a changing impedance, the RLD drive compensates by sinking/sourcing current. If you take data for a longer amount of time, make sure the electrodes are connected very well, and move as little as possible, the offset should eventually settle out.