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.

AFE4490 How to assess the amb ir/r?

Other Parts Discussed in Thread: AFE4490

Dear all,

i used the afe4490evm,i used  fluke index2 Simulator,nellcor Curve,bmp 75,spo2 96% amp 3%,the ired and red pleth's Quality is good.but On Weak filling column( amp 0.5-1%),the ired and red pleth's Noise is big.

the follow two pictures is display LED2-ALED2VAL and LED1-ALED1VAL wave

RED = LED2, IR = LED1.

amp3%  spo2 96% pr 75bpm, the left pleth wave is ir ,the right pleth wave is r .

amp0.% spo2 96% pr 75,the left pleth wave is ir ,the right pleth wave is r .

i used the 100hz sample rate.

the register config

WriteCommand(0x00,0x08);  //Software reset  

SystickDelay1ms(5);  

WriteCommand(0x00,0x00); //example  //test 100hz   

WriteCommand(0x01,30000);  

WriteCommand(0x02,39999);//39999  

WriteCommand(0x03,30000);  

WriteCommand(0x04,39998);//39998  

WriteCommand(0x05,0);  

WriteCommand(0x06,9998);

 WriteCommand(0x07,10000);

 WriteCommand(0x08,19998);  

WriteCommand(0x09,10000);  

WriteCommand(0x0a,19999);  

WriteCommand(0x0b,20000);

 WriteCommand(0x0c,29998);  

WriteCommand(0x0d,2);  

WriteCommand(0x0e,9999);  

WriteCommand(0x0f,10002);  

WriteCommand(0x10,19999);  

WriteCommand(0x11,20002);  

WriteCommand(0x12,29999);  

WriteCommand(0x13,30002);  

WriteCommand(0x14,39999);  

WriteCommand(0x15,0);  

WriteCommand(0x16,2);  

WriteCommand(0x17,10000);  

WriteCommand(0x18,10002);  

WriteCommand(0x19,20000);  

WriteCommand(0x1a,20002);  

WriteCommand(0x1b,30000);  

WriteCommand(0x1c,30002);  

WriteCommand(0x1d,39999);  

/WriteCommand(0x1e,0x107); //Control Register 1 ?  

//WriteCommand(0x1f,0x000); //reserved

 WriteCommand(0x20,0x00);  //Transimpedance Amplifier Gain Setting Register/  

WriteCommand(0x21,0x00);  //Transimpedance Amplifier and Ambient Cancellation Stage Gain Register

WriteCommand(0x22,0x1cccc); //204/256*75ma=60mA   red:60mA ired:60mA

WriteCommand(0x23,0x00);  //Control Register 2

 //WriteCommand(0x24,0x00); //reserved  

//WriteCommand(0x25,0x00); //reserved  //WriteCommand(0x26,0x00); //reserved  

//WriteCommand(0x27,0x00); //reserved

 //WriteCommand(0x28,0x00); //reserved

 WriteCommand(0x29,0x00); //Alarm Register  

WriteCommand(0x2a,0x00); //LED2 Digital Sample Value Register  

WriteCommand(0x2b,0x00); //Ambient LED2 Digital Sample Value Register  

WriteCommand(0x2c,0x00); //LED1 Digital Sample Value Register  

WriteCommand(0x2d,0x00); //Ambient LED1 Digital Sample Value Register  

WriteCommand(0x2e,0x00); //LED2-Ambient LED2 Digital Sample Value Register  

WriteCommand(0x2f,0x00); //LED1-Ambient LED1 Digital Sample Value Register  

WriteCommand(0x30,0x00); //Diagnostics Flag Register    

i see the LED2VAL,ALED2VAL,LED1VAL,ALED1VAL,LED2VAL-ALED2VAL,LED1VAL-ALED1VAL

used the follow command

    Afe4490DataBuf[0]=(ReadCommand(0x2a)&0x3fffff);  //read RED Data
    Afe4490DataBuf[1]=(ReadCommand(0x2b)&0x3fffff);  //read Ambient data
    Afe4490DataBuf[2]=(ReadCommand(0x2c)&0x3fffff);  //read IR Data
    Afe4490DataBuf[3]=(ReadCommand(0x2d)&0x3fffff);  //read Ambient Data
    Afe4490DataBuf[4]=(ReadCommand(2e)&0x3fffff);  //read RED - Ambient Data
    Afe4490DataBuf[5]=(ReadCommand(2f)&0x3fffff);  //read IR - Ambient Data 

i have four questions,

1、i want to know how to filter the noise.

2、how to assess the amb ir/r and Ambient-Cancellation DAC ?What is the relationship between amb ir/r and Ambient-Cancellation DAC ?

3、How to configure the TIAGAIN,TIA_AMB_GAIN and LEDCNTRL?

4、LED2-ALED2VAL: LED2-Ambient LED2 Digital Sample Value Register

LED1-ALED1VAL: LED1-Ambient LED1 Digital Sample Value Register

why the Afe4490DataBuf[4]!=Afe4490DataBuf[0]-Afe4490DataBuf[1] and

Afe4490DataBuf[5]!=Afe4490DataBuf[2]-Afe4490DataBuf[3]?

 

  • Hello Qi Fu,

    1. Do you use the same register settings for both the perfusion (amp) cases 3% and 0.5%?

    Can you provide the DC and AC values of the pleth signal for both perfusion?

    We should be able to suggest ways to improve the SNR once we have these info.

    2. Amb ir/r refers to the ambient current levels. Ideally these current levels are expected to be very small. But due to increase in external ambient light (like outdoor sunny environment), if the ambient current levels are significantly higher compared to the signal current, then you may have to use Ambient cancellation DAC.

    3.  You may choose to operate at roughly 50% of ADC full scale. Based on your system requirements, you will be limited with a range of LED currents. To achieve this, you have to adjust the TIA gain settings (10K-1 Meg) after choosing the desired LED current. As mentioned earlier, based on the ambient current levels, you can enable the ambient cancellation DAC with the stage 2 gain to maximize the ADC dynamic range.

    4. How to read the ADC data? Is it based on the ADC_RDY interrupt or based on polling the data at regular intervals?

    You will notice this discrepancy when the ADC data registers are read by polling.

    Regards

    Praveen.

  • Hi Praveen,

    Thank you very much for your answer.

    1.Yes,I used the same register settings for both the perfusion(amp) cases 3% and 0.5%.

    The attachment include LED2VAL,ALED2VAL,LED2-ALED2VAL,LED1VAL,ALED1VAL,LED1-ALED1VAL pleth signal of 3%&0.5%.

    the excel file's sheet1 is 3% pleth signal,sheet2 is 0.5% pleth signal.

    In addition,the sheet2(0.5% perfusion) also includes the fir filtered data.

    2626.afe4490.xlsx 

    2.I will try it on sunny environment.

    3.What mean of choose to operate at roughly 50% of ADC full scale? It is not referring to the current?I set the Tx Reference Voltage Settings 0.75V,max LED current is 75ma.My project setting the LED1&LED2's current are 60mA.

    4.If i get the ADC_RDY interrupt,i will read the LED2VAL,ALED2VAL,LED1VAL,ALED1VAL,LED2-ALED2VAL,LED1-ALED1VAL.I have test the interrupt is 100hz,this is correct.

    Looking forward to your reply.

    Best regards

    Mike Fu

    2014.03.27

  • Dear TI's engineer and all friends,I need your help.

    if you need more information,please tell me.

    Thank you very much.

    Best regards

    Mike

    2014.03.28

  • Hello Mike,

    1. For the data that you attached can you confirm whether the following are the AFE settings.

    a. TIA gain = 500K

    b. LED1 and LED2 current = 60mA

    c. no stage 2 gain or Ambient cancellation block enabled.

    For the data you have attached, the DC value (~7mV) seems to be small for 60mA LED current.

    I will try to replicate your measurements and will get back to you. We don't have Fluke Index2 but we do have Fluke Spotlight where we can set lower pulse amplitude.

    3. ADC full scale is 1.2V. What I meant by to operate at roughly 50% ADC full scale is to set the LED current and AFE gain such that the ADC output is roughly about 0.6V

    Again with your settings of 60mA and 500K TIA gain, the DC value of 7mV is very small.

     

    4. Yes with 100Hz PRF, the ADC_RDY interrupt rate is 10ms.

     

    Best regards.

  • Would you please share the FIR Filter code (for Canceling 50 Hz Low pass Filter)?

  • Ajeesh,

    You can go to Matlab and and use their filter generation tool. I would recommend this since it will allow you to customize what you want. Also, Matlab will generate c code for you as well.

  • Dear ,

    Thank you for your reply.

    Now,Our product can test above 0.5% signal.

    But under less than 0.5%,the SNR is lower,The SpO2 value is not stable.

    I use 100hz sample rate. TX_REF 1.0V.no stage 2 gain and  Ambient cancellation.

    CF 155pf, RF 250k o R*C<Sample Time/10  155*10(-12)*250*10(-3)=39.525us  sampletime=400us

    I don't know how to solve this problem,Can you give me some advice?

    3833.afe4490_test data.xlsx

     

  • Dear ,The following code is the reference code.Hope  can help you.

    double B[FIR_ORDER] = { //100hz fpass 8 fstop 15 order 40
    0.00225181086, 0.001675570151,0.0002154390531,-0.002801523311,-0.005952642765,
    -0.006830364,-0.003404424293, 0.004258663394, 0.01300100703, 0.01736020111,
    0.01224981807, -0.00350425276, -0.02472930029, -0.04039776325, -0.03757329658,
    -0.007474631071, 0.04915208742, 0.1202663928, 0.1858227402, 0.2251285166,
    0.2251285166, 0.1858227402, 0.1202663928, 0.04915208742,-0.007474631071,
    -0.03757329658, -0.04039776325, -0.02472930029, -0.00350425276, 0.01224981807,
    0.01736020111, 0.01300100703, 0.004258663394,-0.003404424293, -0.006830364,
    -0.005952642765,-0.002801523311,0.0002154390531, 0.001675570151, 0.00225181086
    };

    s32 GetFilterData(const s32* in, double* b,u16 order)
    {
    double data=0;
    u16 i;

    for(i=0;i<order;i++)
    {
    data+=(b[i]*in[i]);
    }
    return (s32)data;
    }

    you can change the B coefficient .

  • Thanks,

    Now  we are facing the a problem is Baseline wandering (AFE4490).it is adversely effecting my pulse rate calculation .what kind of technique you are using for mitigating Baseline wandering in MSP430 platform .

     

     

     

  • Hello Ajeesh,

    Typically a bandpass filter is used to remove the baseline wander.

    You can use a second order butterworth filter with bandpass 0.5-10Hz to remove the baseline wander and high frequencies since most of the energy of the PPG signal is below 10Hz.

      

    Regards

    Praveen.