AD5933 synchronizing different frequency sweep ranges issue

Hello, everyone, I am using AD5933 with Arduino, I can measure impedance from 47ohm to 1Mohm in the frequency range(10Hz-100kHz). I have measured impedance at different frequency ranges by using different MCLK external programmable oscillator DSL1077. Now I want to measure impedance at whole frequency sweep at a time. I have implemented logarithmic frequency sweep, so for this, I am changing my start frequency register every time for performing logarithmic frequency sweep by setting increment frequency register and number of increment register as zero.
when I have applied from 10Hz-100 kHz I am not getting the accurate result I have uploaded data in terms of real and imaginary (i have measured 47-ohm resistor with 47-ohm RFB). Although the clock frequency is changing with respect to frequency sweep. if I apply each frequency sweep separately like (5kHz-100Khz) OR (10Hz-20) etc, I am getting good results. 

how can I measure whole frequency sweep accurately, do I need to measure gain factor for each sweep separately.?
my output excitation voltage is 1.98Vp-p, and the PGA gain is X1.

add output and feedback resistor value
[edited by: aitzaz at 12:53 AM (GMT 0) on 9 Jul 2019]
  • It would be useful to share some more information regarding your setup, is there an AFE? 47 Ohm RFB and 47 Ohm resistor require your system to pass p-p current of 42 mA, which is pretty high and would require some additional circuits around the AD5933 to be generated.

    How do you determine when you are getting "accurate result"? Ideally, gain and system phase should be calibrated at every frequency point within your sweep regardless of MCLK source. Using single-point or dual-point calibration described in the datasheet works only for narrow-range frequency sweeps.

  • Snorlax thank you for your response, I am using AFE the image given below

    by using this AFE I can measure impedance from 47 ohm to 1M ohm as I told you 

    but as you can see in the above image below 1 kHz my result is not very accurate, how can I improve my system efficiency


    First, I have calculated the gain factor for each frequency range using a two-point calibration process for different feedback resistor. I have used 6 feedback resistor. (47ohm,330 ohms,1K ohm,10kohm,47kohm, and 100kohm).

    Then I used the calculated gain factor of each frequency range.

    For example:

    The calculated gain factor for (10 Hz -20 Hz) range is (1.08234E-07), The feedback resistor is 10k ohm, in logarithmic frequency sweep when 17.78 Hz will come, the above-mentioned gain factor will use.  

    and I have implemented this algorithm in my code, but below 1 kHz I need to improve my system.    

  • The pictures did not get attached - look like placeholders.
    10-20Hz range is probably too wide to use two-point calibration for it. If you know all your frequencies within your sweep, it would make sense to calculate gain at every frequency and store it in an array. Then for the unknown impedance for each newly measured frequency point you could simply pull gain value for that frequency out of gain array and calculate the measured impedance.

  • The only thing that looks suspicious is that R1 is larger than R4, so the AD5933 input amplifier has gain of 4.7. Depending on the DUT and R5, R6 and R7 values, the input amplifier (as well as the IC4A) might be clipping the signal at the power supply rails. If you have access to an oscilloscope, it would be useful to hook it up to the RFB pin of the AD5933 and check if the voltage waveform there is a well-shaped sinewave throughout all your measurements: without any clipping at VCC and ground.