# AD5933 Difficulty calibrating over impedance range

I am currently using the AD5933 in the form of the PModIA impedance analyzer board (https://store.digilentinc.com/pmod-ia-impedance-analyzer/) to collect bioimpedance measurements. The frequencies I am sweeping across are from 5 kHz to 200 kHz in steps of 15 kHz, and the impedance range I expect to encounter is from approximately 200 Ohms to 10k Ohms. The sweep parameters I have chosen are in the table below:

 Start Frequency 5 kHz Step Size 15 kHz Number of increments 14 RFB 20 Ohm Calibration Resistor 3600 Ohm PGA Gain x1 Output Range 2V P-P # of settling cycles 200

The PModIA has a built in AFE as well, similar to the one of page 4 of AN-1252 (https://www.analog.com/media/en/technical-documentation/application-notes/AN-1252.pdf). I find that when I try to use resistors within the range of 200-10k ohm to try and test the accuracy of my setup, that the % error can sometimes be higher than 5-10%, and is typically above 1-2% at most impedances besides the one I used to calibrate. I'm also calculating the phase using the atan2() function from the Math.h library on the results from the imaginary and real registers, and I find that the calculated phase of the resistors varies greatly, though they should all have the same value of 0. I calibrated the system phase using a resistor and everything but the values often fluctuate a full 90 degrees or more from resistor to resistor. I've followed the AD5933 datasheet and AN-1252 regarding calibration and checked the control register at points during the sweep to make sure the PGA gain was correct, but I still keep getting inaccurate values.

Any help with this issue or advice on calibration would be greatly appreciated.

Parents
• Your RFB is simply too low: to get reasonable accuracy RFB should be equal to calibration resistor RFB = Rcal and both should be equal to the lower limit of your expected range. With the values you have in the course of calibration the IC3B OPAMP voltage gain is 20 / 3600 ≈ 0.0056, so the excitation voltage is reduced to ~11 mV and that is what goes into the AD5933. The AD5933 ADC has the dynamic range of  approximately 0-2V, so, as the result, you calibrate on a minuscule fraction of the available dynamic range, which results in much higher discretization error than necessary. That calibration inaccuracy propagates into the subsequent measurements and amplifies when the "unknown" impedance is lower than Rcal. To summarize: set your RFB equal to the lowest impedance in your range of interest and use the same resistance Rcal = RFB to calibrate the system.

Not as important, but using 20 Ohm as the RFB has a couple of unpleasant side effects: 1) maximum output current of the AD8606 is ±30 mA, so the output voltage can hardly exceed  ±0.6V, which will not allow to utilize the AD5933 entire ADC dynamic range of ~2V; 2) the closed switch itself has internal resistance of 0.5 - 0.8 Ohm which adds to the RFB, resulting in 2 - 3% uncertainty of the value one needs to know as accurately as possible for calibration.

On a general note: it is useful to think of the AD5933 as the admittance gauge as the chip output Re and Im data are directly proportional to the current across the RFB. The AN-1252 should be taken with a grain of salt, see a recent discussion by here.

Best of luck!