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.