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.
- 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?
- 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
- 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?
- 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