Post Go back to editing

# Looking to measure current noise in EIS - AD5941

Category: Software

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!

[edited by: kbaudue at 3:31 PM (GMT -5) on 6 Feb 2024]
Parents
• Hi,

Since you are measuring only current,

if using EIS example code in GitHub,

1) you may remove below sections:

-   /* RCAL Measurement */

inside measure sequence (AppIMPSeqMeasureGen()).

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

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]);
}
}

• Hi,

Since you are measuring only current,

if using EIS example code in GitHub,

1) you may remove below sections:

-   /* RCAL Measurement */

inside measure sequence (AppIMPSeqMeasureGen()).

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

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]);
}
}

Children
• 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

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.

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,

Sinc3 filter is used to reduce noise.

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

• 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!

• Hi Akila,

Sorry about the inconvenience, but I wanted to ask about the open-circuit noise (measuring current without an electrochemical cell). This means applying a 0V signal and then reading the results through the ADC via the SE0 pin.

What settings need to be enabled / disabled such that I can achieve this 0V signal across SE0, RE0, and CE0? I ask because I know that the HSDAC has a standard 1.1V bias when not using the LPDAC, so I'm not too sure how to go about this.

• Hi,