AD5933 real and imaginary value

Hi, I am using EVAL_AD5933 with Arduino code from GitHub - mjmeli/arduino-ad5933: A simple library for controlling the AD5933 impedance converter system with an Arduino compatible device. to measure the impedance value. When I am measuring a resistor only, it shows correct impedance value but the real and imaginary value does not go well. The imaginary value should be zero in this case but it is measuring negative value.

First, I calibrate with RFB of 20k ohm resistor and Zunknown 20k ohm resistor. I got 20k for impedance but 9127 for real value and -2844 for imaginary value. In terms of hardware connection, I2C is connected using logic converter and I have checked all the connections are correct.

Please help to advise what are the steps to troubleshoot this issue. Thank yoy very much for your help and advise.

You can try using a different impedance value for the unknown resistor to see if the problem is specific to the 20k ohm value.
also check the accuracy of the reference resistor used for calibration. If it’s not accurate, it can cause incorrect readings. If nothing solves your problem, you can raise your issue in Github.

Hi, thank you for your reply. I have tried different impedance value for the Zunknown but the real and imaginary value still giving incorrect values. The reference resistor I use is 2% tolerance.


Welcome to the Digi-Key tech forum community.

I’m am currently checking into your request with other personnel and will get back to you with feedback.


If I understand correctly, you’re saying that the impedance magnitude results are coming out OK, but the phase is off; your 20K resistor is measured as 20K, but significantly reactive.

The below part of the referenced github page would seem to address this:

A description of the missing phase compensation process appears to be described in the datasheet starting at page 19.


Hi Rick, thanks for your kind reply. I did calibrate the phase using the formula Phase=atan(imaginary/real) as reference to the datasheet and managed to get phase=0 degree when measuring a resistor.

However, I still need the correct real and imaginary value across a range of frequency to generate an equivalent circuit for EIS purpose. Please advise is there extra processing needed for the real and imaginary value from the register?

Below is the result I got when measuring a 1600 ohm resistor.

It’s not clear to me what exactly the figures shown represent, but it would would seem as if there’s possible confusion between raw and net data; assuming the phase values are in degrees, the impedance and unknown phase shown seem within reason for a nominal 1.6K resistance.

The shown real and imaginary values nicely translate into a sum of the phases shown, but don’t correctly sum to the indicated impedance; some sort of hidden gain figure might account for this.

1 Like