Dear MLambe, andreid1994,NeoXu, Brandon
I am testing EVAL-AD5940ELCZ and ran EIS 2-wire measurement using USB cable connected to P6. I used 12k resistor connected in parallel with 3.3uF capacitor. Using connectivity guidance from AN-1563 I connected the impedance between connected RE0,CE0(Blue&Red wires) and connected SE0,DE0(Green&Black). The sweep was between 100-10,000Hz using AD5940_Impedance example. However, the results differed significantly from expected. I will appreciate if you could check whether I connected the electrodes incorrectly. JP9/10/11 switched were in position C (5-6)
The best example to use for this measurement is the AD5940_ECSns_EIS example. This example is slightly different to the AD5940_Impedance example in that it includes a load resistor internally on the SE0 line for the measurement. This Rload is required because when the excitation signal is 10kHz the magnitude of the impedance is 4.82ohms (12kOhm || 3.3uF). The internal amplifiers on the AD5940 cannot sink/source the currents required for this impedance.
The measurement is a ratiometric measurement where the excitation signal is applied across RCAL then across the sensor. The default RCAL on the EVAL-AD5940ELCZ is 10kOhm which is too large for this scenario. There is an option to use another 200Ohm resistor (RTIA1) on board. To use this resistor instead of the default 10kOhm go to the Impedance.c file. In the AppIMPSeqMeasureGen() function modify the switch settings for RCAL as per below:
/* RCAL Measurement */// sw_cfg.Dswitch = SWD_RCAL0;// sw_cfg.Pswitch = SWP_RCAL0;// sw_cfg.Nswitch = SWN_RCAL1;// sw_cfg.Tswitch = SWT_RCAL1|SWT_TRTIA; sw_cfg.Dswitch = SWD_AIN3; sw_cfg.Pswitch = SWP_AIN3; sw_cfg.Nswitch = SWN_AIN0; sw_cfg.Tswitch = SWT_AIN0|SWT_TRTIA; AD5940_SWMatrixCfgS(&sw_cfg);
In the AD5940ImpedanceStructInit() function change RalVal to 200ohm.
Note, there is an extra parasitic capacitance due to the cables and PCB tracking which will induce errors at higher frequencies.
Thanks so much for your prompt and detailed answer. The solution worked for frequencies down to approximately 100Hz (where Z is around 500 Ohm). We would like to cover [0.05-20] Hz range so we switched to AD5940_Impedance example. The impedance magnitude error was 15-20% but the phase error was significant (-18 degrees at 10 Hz instead of -68 degrees). The phase error grew smaller as frequencies increased to 20 Hz.
I wonder if you could advise AD5940 frequency and other control settings we could use for the range [0.05-20Hz] for complex impedance in the range [12k-2k].
Thanks a lot,
For the lower frequency ranges you need to increase the length of time the ADC and DFT engine are converting in order to capture enough periods of the waveform. This is effectively done by adjusting the sinc3 and sin2 filter settings. For a frequency of 0.05Hz the period is 20 seconds. In order to get an accurate result you need to capture several periods of the signal. To ensure enough periods of the wave are captured set SIN3 = 4 and set sinc2 to 1333 and DFTNUM to 8192
To do this in the example project, set the SINC2 filter output as the input to the DFT block as below code snippet from the AD5940_Main.c file
/* Configure filters if necessary */ pImpedanceCfg->ADCSinc3Osr = ADCSINC3OSR_4; pImpedanceCfg->ADCSinc2Osr = ADCSINC2OSR_1333; pImpedanceCfg->DftSrc = DFTSRC_SINC2NOTCH; pImpedanceCfg->DftNum = DFTNUM_8192;
These filter settings are suitable for 0.05 Hz. As the excitation frequency increases, the ADC sampling time can be reduced by reducing the sinc2 filter setting.
Thank you very much. Yes, those were the settings I was looking for and setting those parameters definitely improved the precision of the measurements in the lower frequency range.
Thank you very much for your answers and your application notes.