Post Go back to editing

Looking to measure current noise in EIS - AD5941

Category: Software
Product Number: AD5941

Hi, I'm looking to measure open-circuit current noise for EIS using the AD5941. Can you please confirm if the following methods are correct?

My protocol is to run a two-wire setup for a known resistor across SE, RE, and CE. 

I run an EIS measurement at a set frequency and set RTIA, and then obtain the DFT values of that known resistor. From there, I use the following equation: 

I_{RMS} = (DFT_{MAGNITUDE} * V_{DD}) / ((2^{16} - 1) * R_{TIA})

Is that equation correct for calculating the I_RMS using the DFT? I know that I don't need to measure RCAL since I'm only measuring current, but I wanted to ask to make sure.

Lastly, is the theoretical value for the I_RMS equivalent to the AC Voltage RMS divided by the sum of the known resistor and the 100 Ohms in series with SE? 

Thank you!



Added AD5941 to title.
[edited by: kbaudue at 3:31 PM (GMT -5) on 6 Feb 2024]
  • Hi,

    We will contact the product owner and get back to you.

    Thanks,
    Janine

  • Hi,

    Since you are measuring only current,

    if using EIS example code in GitHub,

    1) you may remove below sections:

    - /* RLOAD Measurement */

    -   /* RCAL Measurement */ 

    inside measure sequence (AppIMPSeqMeasureGen()).

    2) To reduce complexity, you may not enable DFT block in measure sequence:

    AD5940_AFECtrlS(AFECTRL_ADCCNV|AFECTRL_DFT, bTRUE);  /* Start ADC convert and DFT */

    3) You may just do data process as below. It returns current input from SE. (load includes the 100ohm resistor at SE)

    static AD5940Err AppIMPDataProcess(int32_t * const pData, uint32_t *pDataCount)
    {
    uint32_t i, datacount;
    datacount = *pDataCount;
    float *pOut = (float *)pData;
    for(i=0;i<datacount;i++)
    {
    pData[i] &= 0xffff;
    pOut[i] = AppAMPCalcCurrent(pData[i]);
    }
    return AD5940ERR_OK;
    }

  • Hi Akila, 

    Is this still accounting for the AC amplitude? If I understand correctly, I use the following method: 

    1. Apply AC signal at set frequency to two-electrode configuration

    2. Poll the ADC register and NOT the DFT one

    3. Use the Current and Voltage code from the Amperometry example 

    I also have a few questions about the amperometry example: ad5940-examples/examples/AD5940_Amperometric/Amperometric.c at master · analogdevicesinc/ad5940-examples (github.com)

    AppAMPCalcVoltage uses a k-factor: 1.835/1.82 - what is the origin of these values?

    It also uses a 1.8V Ref Voltage, what pin do I measure that from? 

    The RTIA magnitude it uses, in the EIS case, is this just the RTIA I set for that measurement?

    From the current measurements, how would I obtain RMS from these values since I'm using an AC signal instead of the DC one used in Amperometry? 

    Thank you!

  • Is there a followup for this? Thank you!

  • Hi,

    1) k-factor is required because factory calibration was done at 1.835V.

    2) 1.8V Ref Voltage can be measured from VREF_1V82 pin.

    3) Could you please clarify? In EIS code, RTIA value is not used for impedance calculation. It uses ratiometric calculation. ( Rz = (1/DftRzRload - 1/DftRload)*DftRcal*RCAL)

    4) You may use the statistics block inside AD5940 to calculate mean or variance of measured data.

         Kindly refer to AD5940_StatisticCfgS(&stat_cfg) function in AD5940.c.

         For using statistics block, fifo source must to set to FIFOSRC_VAR or FIFOSRC_MEAN.

  • AppAMPCalcCurrent(), to convert to voltage and current, uses the RTIA in its function. 

    I am asking if this is the same RTIA I set when I measure the current from the ADC?

  • Hi Akila, I notice the link refers to the LPRTIA. Since I'm using the HS Loop for EIS, i wanted to quantify the current using the HS Loop. Is the process the same? Is there a calibration function for the HSRTIA or can I simply use the actual gain value of the RTIA (i.e. HSRTIA_40K = 40,000 Ohms) when calculating the current. 

    I currently have it set to apply a sinusoid voltage across a two-electrode configuration and I poll the ADC (i.e. ADCCNV) results through the SINC3 filter (i.e. AFE_ReadResult(AFERESULT_SINC3) since that is recommended to always be enabled. Or should I poll the SINC2 Notch as per the Amperometric code if I want to measure current noise?

  • Hi,

      You may use AD5940_HSRtiaCal() function defined in AD5940.c

    Sinc3 filter is used to reduce noise.

    Hence, to measure current noise, you may bypass filters as below:

    adc_filter.BpNotch = bTRUE; 
    adc_filter.BpSinc3 = bTRUE; 
    adc_filter.Sinc2NotchEnable = bTRUE

  • Hi Akila, 

    Thanks for the response! 

    Will polling the SINC3 filter after I bypass it give me the results directly from the ADC? I can't find an AFERESULT_ADC similar to AFERESULT_SINC3 and AFERESULT_SINC2NOTCH. 

    Also, do you have any recommendations for the filter settings for the calibration? For reference, here are the frequencies I'm looking to measure noise at (using 10 mV sinusoid excitation with a 1.1V bias):

    1. 200 kHz

    2. 100 kHz

    3. 10 kHz

    4. 1000 Hz

    5. 100 Hz

    6. 10 Hz

    7. 1 Hz

    8. 0.1 Hz

    Thank you!