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.

AFE4404: Current level adjustments for LEDs

Part Number: AFE4404

Hi,

We have designed a data acquisition system with 4 AFEs specifically AFE4404 for PPG signal acquisition. This one is connected to an MCU and LEDs are driven by 3.7V 3500mAh Li Po battery. While doing a power analysis using SMU instead of 3500mAh Battery, we noticed current drawn by the system is very low.

Please correct me if I am wrong. The AFE is configured for 900Hz and 10% duty cycle. I take settings from GUI and add it in code.

  1. The LEDs used are configured for 80mA and 20mA, Ideally i am expecting a current in the range of ~80mA, but in SMU it shows a maximum of 35mA. Is this expected?
  2. There is cross channel interference between the 2 LEDs, any method to avoid this? I can see spikes in ADC codes if I keep LEDs in proximity
  3. When ambient content is more, when we read RAW-AMBIENT register, the value becomes negative and result in a value somewhere in 42 lakhs, which will corrupt my data, so i changed to raw data, is this approach ok?
  4. To check if TIA gain adjustments have an impact, I tried changing TIA gain from 5k to 100k, but there isn't any difference in ADC codes read from AFE, When I tried with PD disconnect bit 0, raw readings from 4xAFEs gave an ADC value of around 650-65000. To remove this, I should be doing something with DAC offset current levels right?

I am attaching the register settings as per my configuration.

  afe4404_enable_register_write(afe4404);                    // Enable modification of AFE4404 registers
  afe4404_register_write(AFE4404_LED2STC, 0x000050,afe4404);         //LED2STC
  afe4404_register_write(AFE4404_LED2ENDC, 0x0001BB,afe4404);        //LED2ENDC
  afe4404_register_write(AFE4404_LED1LEDSTC, 0x000378,afe4404);     //LED1LEDSTC
  afe4404_register_write(AFE4404_LED1LEDENDC,0x000533,afe4404);     //LED1LEDENDC
  afe4404_register_write(AFE4404_ALED2STC, 0x00020C,afe4404);       //ALED2STC
  afe4404_register_write(AFE4404_ALED2ENDC, 0x000377,afe4404);      //ALED2ENDC
  afe4404_register_write(AFE4404_LED1STC, 0x0003C8,afe4404);        //LED1STC
  afe4404_register_write(AFE4404_LED1ENDC, 0x000533,afe4404);       //LED1ENDC
  afe4404_register_write(AFE4404_LED2LEDSTC, 0x000000,afe4404);     //LED2LEDSTC
  afe4404_register_write(AFE4404_LED2LEDENDC, 0x0001BB,afe4404);    //LED2LEDENDC
  afe4404_register_write(AFE4404_ALED1STC, 0x000585,afe4404);       //ALED1STC
  afe4404_register_write(AFE4404_ALED1ENDC, 0x0006F0,afe4404);     //ALED1ENDC
  afe4404_register_write(AFE4404_LED2CONVST, 0x0001C4,afe4404);    //LED2CONVST
  afe4404_register_write(AFE4404_LED2CONVEND, 0x0005E7,afe4404);   //LED2CONVEND
  afe4404_register_write(AFE4404_ALED2CONVST, 0x0005F0,afe4404);   //ALED2CONVST
  afe4404_register_write(AFE4404_ALED2CONVEND, 0x000A13,afe4404);  //ALED2CONVEND
  afe4404_register_write(AFE4404_LED1CONVST, 0x000A1C,afe4404);    //LED1CONVST
  afe4404_register_write(AFE4404_LED1CONVEND, 0x000E3F,afe4404);   //LED1CONVEND
  afe4404_register_write(AFE4404_ALED1CONVST, 0x000E48,afe4404);   //ALED1CONVST
  afe4404_register_write(AFE4404_ALED1CONVEND, 0x00126B,afe4404);  //ALED1CONVEND
  afe4404_register_write(AFE4404_ADCRSTSTCT0, 0x0001BD,afe4404);   //ADCRSTSTCT0
  afe4404_register_write(AFE4404_ADCRSTENDCT0,0x0001C3,afe4404);   //ADCRSTENDCT0
  afe4404_register_write(AFE4404_ADCRSTSTCT1, 0x0005E9,afe4404);   //ADCRSTSTCT1
  afe4404_register_write(AFE4404_ADCRSTENDCT1, 0x0005EF,afe4404);  //ADCRSTENDCT1
  afe4404_register_write(AFE4404_ADCRSTSTCT2, 0x000A15,afe4404);   //ADCRSTSTCT2
  afe4404_register_write(AFE4404_ADCRSTENDCT2, 0x000A1B,afe4404);  //ADCRSTENDCT2
  afe4404_register_write(AFE4404_ADCRSTSTCT3, 0x000E41,afe4404);   //ADCRSTSTCT3
  afe4404_register_write(AFE4404_ADCRSTENDCT3, 0x000E47,afe4404);  //ADCRSTENDCT3
  afe4404_register_write(AFE4404_PRPCT, 0x00115B,afe4404);         //PRPCT
  afe4404_register_write(AFE4404_CONTROL1, 0x020103,afe4404);      //CONTROL1
  afe4404_register_write(AFE4404_TIA_GAIN, 0x00800B,afe4404);      //TIA_GAIN
  afe4404_register_write(AFE4404_TIA_AMB_GAIN, 0x00000B,afe4404);  //TIA_AMB_GAIN
  afe4404_register_write(AFE4404_LEDCTRL, 0x000332,afe4404);       //LEDCTRL  
  afe4404_register_write(AFE4404_CONTROL2, 0x124218,afe4404);      //CONTROL2
  afe4404_register_write(AFE4404_CLKDIV1, 0x000000,afe4404);       //CLKDIV1
  afe4404_register_write(AFE4404_CONTROL3, 0x000000,afe4404);      //CONTROL3
  afe4404_register_write(AFE4404_PDNCYCLESTC, 0x00252B,afe4404);   //PDNCYCLESTC
  afe4404_register_write(AFE4404_PDNCYCLEENDC, 0x000E3A,afe4404);  //PDNCYCLEENDC
  afe4404_register_write(AFE4404_PROG_TG_STC, 0x000000,afe4404);   //PROG_TG_STC
  afe4404_register_write(AFE4404_PROG_TG_ENDC, 0x000000,afe4404);  //PROG_TG_ENDC
  afe4404_register_write(AFE4404_LED3LEDSTC, 0x0001BC,afe4404);    //LED3LEDSTC  
  afe4404_register_write(AFE4404_LED3LEDENDC, 0x000377,afe4404);   //LED3LEDENDC
  afe4404_register_write(AFE4404_CLKDIV2, 0x000000,afe4404);       //CLKDIV2
  afe4404_register_write(AFE4404_OFFDAC, 0x000000,afe4404);        //OFFDAC

I am looking at ADC codes of around 15-18lakhs for current levels >30mA . Please correct me if I am missing out something in configuration

  • Hi Alex,

    You have two LEDs each with 10%duty cycle, so each AFE will consume 10 % of 80mA and 10% of 20mA = ~10mA. So 4 AFE will consume ~40mA ( which is matching with 35mA from SMU).
    Can you elaborate the channel interference issue? Does this mean that when you have LED2, AMB2, LED1, AMB1 you see some signal from LED1/LED2 to another LED?
    You should use LED-AMB data as it removes the offset and modulation due to AMB. You can bring the LED-AMB close to 0V using offset DAC in LED or /and AMB phase.
    Changing the TIA gain will definitely change the ADC code. But the change/ delta depends upon the signal level. Can you try to see the chnage in LED-AMB phase.

    Regards,
    Prabin
  • Hi,
    We are trying to acquire PPG signal from wrist and other measurement sites using AFE4404. We increased current to see if PPG can be acquired for lower perfusion levels also. What is the maximum current level written as 100mA in datasheet?
    We are expecting ADC readings in the range of 15-20 lakhs for this only i tried increasing TIA gain. Increasing TIA gain without changing CF is ok?
    Regarding channel interference issue, we have designed custom probes which houses LEDs and PD. If we keep the probes near to each other, it results in spikes in the LED channel readings.
    We were initially using LED_AMB data, but because of that higher ADC reading which was corrupting signal we reverted back to LED channel readings. In DAC offset cancellation, will try adding current in LED AMB phase and check with - polarity.
  • Hi Alex,

    The maximum LED current supported by AFE4404 is 100mA.
    While changing the TIA_GAIN you have to change the Cf as well, Rf and Cf sets the bandwidth of the TIA and these should be such that Rf*Cf is 1/5th of sampling width. Please refer to section "8.3.1.3 TIA Bandwidth Settings" for further details.

    ADC code of the ~20 Lakhs is close to satiration so we don't recommend operating in this region.
    Since out of 20 lakhs of the PPG signal (ADC Code) most of them will be DC component and very little AC component. You can eventually use Offset DAC to cancel the DC and use the higher TIA Gain. This will improve the signal quality as well as put the AFE into non saturation region.

    I guess being close to saturation is causing the spikes in the signal.


    Regards,
    Prabin