AD5941
Recommended for New Designs
The AD5940 and AD5941 are high precision, low power analog front ends (AFEs) designed for portable applications that require high precision, electrochemical...
Datasheet
AD5941 on Analog.com
AD5940
Recommended for New Designs
The AD5940 and AD5941 are high precision, low power analog front ends (AFEs) designed for portable applications that require high precision, electrochemical...
Datasheet
AD5940 on Analog.com
ADUCM355
Recommended for New Designs
The ADuCM355 is an on-chip system that controls and measures electrochemical sensors and biosensors. The ADuCM355 is an ultralow power, mixed-signal microcontroller...
Datasheet
ADUCM355 on Analog.com
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:
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!
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!
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,
Yes. After bypassing Sinc3 filter, calling AD5940_ReadAfeResult() reads directly from ADCDAT register.
You may refer to AD5940_GetFreqParameters() function in defined in AD5940.c for calibration filter settings w.r.t. frequency.
Hi,
Kindly refer to this thread for measuring open circuit potential (VOCP): (+) AD5941 Potentiometry Basic Example and OCP Basic Example - Q&A - Precision ADCs - EngineerZone (analog.com)
Open circuit noise current can be obtained by VOCP /RTIA where RTIA is the feedback resistor.
Hi Akila,
The code there primarily uses the LPTIA. I was looking to measure it through the HSTIA since that's what we're running EIS on. Any direction or examples would be appreciated.
My thought process is to disable the waveform generator and sample the SE0 pin through the ADC. The link mentioned shorting RE0 to AIN3 but in the case of EIS where I have this switch configuration:
Hi Akila,
Just wanted to follow up on this. Along with the questions I had earlier, I had a few more:
The examples you gave me refer to the LPTIA. For the HSTIA, it requires Vzero to be enabled via the LPDAC. Is there any way to measure it using the default 1.1V bias on the HSTIA? Would this be equivalent to
AD5940_ADCMuxCfgS (ADCMUXP_VSE0 ,ADCMUXN_VREF1P1); // for measurement of SE0 w.r.t. V1P1
AD5940_ADCMuxCfgS (ADCMUXP_VRE0 ,ADCMUXN_VREF1P1); // for measurement of RE0 w.r.t. V1P1
Can you please explain how this configuration utilizes the HSTIA?
Additionally, the code you provided:
"1) Connect the two terminals of your load to AIN2 and IN3 respectively and measure the voltage across them,
AD5940_ADCMuxCfgS(ADCMUXP_AIN3, ADCMUXN_AIN2);
AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_SINC2NOTCH, bTRUE);
AD5940_Delay10us(16*25);
AD5940_AFECtrlS(AFECTRL_ADCCNV, bTRUE); /* Start ADC convert*/
AD5940_Delay10us(WaitClks);
while (!(AD5940_INTCTestFlag(AFEINTC_1, AFEINTSRC_SINC2RDY)));
AD5940_INTCClrFlag(AFEINTSRC_SINC2RDY);
afeResult = AD5940_ReadAfeResult(AFERESULT_SINC2);
AD5940_AFECtrlS(AFECTRL_ADCPWR|AFECTRL_ADCCNV|AFECTRL_SINC2NOTCH, bFALSE); /* Stop ADC */
measured_voltage = AD5940_ADCCode2Volt(afeResult&0xffff, ADCPGA_1, 1.82);
another way:
1) Measure voltage of SE0 w.r.t. VERO0, (AD5940_ADCMuxCfgS (ADCMUXP_VSE0 ,ADCMUXN_VZERO0);)
2)Measure voltage of RE0 w.r.t. VZERO0, (AD5940_ADCMuxCfgS (ADCMUXP_VRE0 ,ADCMUXN_VZERO0);)
3) Subtract (1) from (2). "
Utilizes a WaitClcks - but if I want to bypass the filters, what value do I use for the number of data (DATA_COUNT) and SINC3 and SINC2 OSRs? For Data_count, if I just want to conduct a single measurement, is it just a value of 1?
Thank you!
Hi,
If you want to measure just open circuit current noise at AIN3, without providing any excitation to load,
Hi Akila,
I am sorry for the inconvenience, but I don't think we're currently on the same understanding in measuring current, and I'd like to try from the start again.
I looked at the ADC_Polling.c example as a reference, which falls in line with what you recommended for Voltage measurement (OCP, open circuit potential) using the AD5940 resp. ADuCM355 - Q&A - Precision ADCs - EngineerZone (analog.com). The problem is, that method doesn't utilize the HSTIA and samples directly from the ADC, so I'm not really getting to measure the noise due to the HSTIA.
Now, I don't want to run a discrete fourier transform to have to get the current from the HSTIA. I can get the voltage from the HSTIA (and therefore get accurate measurements for current noise) using this:
(1) AD5940_ADCMuxCfgS (ADCMUXP_VSE0 ,ADCMUXN_VZERO0); // for measurement of SE0 w.r.t. VZERO0
(2) AD5940_ADCMuxCfgS (ADCMUXP_VRE0 ,ADCMUXN_VZERO0); // for measurement of RE0 w.r.t. VZERO0
I_OCP = [(1) - (2) ] / R_HSTIA, and should the 100 Ohm resistor for SE0Load be accounted for in this equation. If so, how?
I'd greatly appreciate the help. You've been a fantastic resource in this process.
Kevin
Hi Akila,
I figured out a solution that makes sense to me. Showing this here for anyone else who would want to do so.
The method below uses a two-electrode setup with the following switch configuration:
I set the HSTIA common-mode voltage to be at 1.11V using the 1.11V reference (HsLoopCfg.HsTiaCfg.HstiaBias = HSTIABIAS_1P1), and measure the voltage through SE0 through the following switch configuration:
Hi Kevin,
Yes. It is a valid method.
If the aim is to measure only open circuit current,
I was just wondering why VRE0 is required to be measured here as open circuit current input can be measured at SE0 alone and processed.
Since this is open circuit, CE0 is irrelevant as there is no excitation.
RE0 is irrelevant as this feedback is not going to be used by excitation amplifier for providing any excitation.
Of course, for measuring Open circuit voltage across RE0/CE0 and SE0, your method is perfect.
Oh that's interesting. So if I just wanted open-circuit current input noise, I can just measure at SE0 using:
Oh that's interesting. So if I just wanted open-circuit current input noise, I can just measure at SE0 using:
Hi,
Yes. To ensure that no excitation is given to the load, sw_cfg.Dswitch can be set to SWD_OPEN.
Oh okay, I see. And this is valid even with 1.11V at the HSTIA_N because the SE0_Pin also has the same zero voltage? One last question though, can you explain further why we aren't accounting for RE0 in measuring current noise here since it is the reference when we do electrochemical measurements, but we account for it when we calculate OCP?
Thanks Akila!
Hi,
RE0 is an input to AD5940. It is not used anywhere in current measurement.
(I assumed that no bias potential is required for the electrochemical to generate this open circuit current.
If my assumption is wrong. then CE/RE play role is providing the bias potential to the electrochemical)
Hi,
When using the HSTIA, isn't the cell always biased at 1.11V when there is no external bias is applied?
Given this, and that CE/RE do play a role, shouldn't the method be measuring Vocp and then dividing by the HSTIA as I've addressed above?
Hi,
Differential voltage measured by ADC = VHSTIA_P - VHSTIA_N
= VHSTIA_P - VSE0
= Open circuit Input current X RTIA
Therefore, Open circuit input current = ADC Measured value / RTIA
CE/RE doesn't come into picture here if no bias or excitation potential is required to control the current.
That makes sense, but what do you mean by bias? Measuring the SE0 pin w.r.t. yields a voltage equal to 1.1V, which means the pins prior to any electrochemical cell being attached already has a potential applied ot them.
by bias do you mean the use of VBIAS0 and VZERO0 across RE/CE? I think this is where my confusion is coming through. Because without VBIAS and VZER0, assuming normal conditions, RE/CE should have the same voltage as SE0 (1.1V)
Hi,
Yes. The pins prior to any electrochemical cell being attached already has a potential applied to them w.r.t. gnd. But the electrochemical is not necessarily connected to a gnd reference.
If biasing is required, (VBias0 - Vzero) voltage is applied to sensor or electrochemical across CE and SE such that
- SE is at Vzero w.r.t. gnd and
- CE is at Vbias w.r.t. gnd.
Oh okay. So to clarify:
If I apply a bias: use the method I've described above to account for VRE0 / VCE0.
Without a bias (i.e. just using 1.1V), then simply just measure SE0 through the HSTIA.
Is this correct?
Hi,
Yes. Correct.