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.

Reply Children
  • 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. 

  • Thank you Snorlax, you are right I am not getting well-shaped waveform in all measurements. before this, I was using AFE given by Analog devices in AN-1252. but the output current by using that AFE is more the 100 microampere that is not appropriate for medical application according to IEC- 6061. Can you guide me how can I alter AN-1252 circuit for our required current / any other alternate solution? I will be very grateful to you.     

    Best Regards,  

  • There is not enough information about your application to know if one can really guide anything… I would not worry too much about to IEC- 6061 for now, I would make sure that the circuit you invested so much effort into building is performing the way you expect.

    I would suggest to increase R1 to 4.7k, R12 and R13 to 10k and try to make the circuit to give you correct values for some impedance ranges DUT defined by R5, R6 and R7, so that DUT >= R5, DUT >= R6, DUT >= R7, while programming Vexc = 2V and gain = 1. This should ensure that the signal at the RFB pin is not distorted. If things work out well, you can transition to measure DUTs more representative of the target application.

  • Sonlax I only need the output current that goes through the DUT should be under 100 microampere, and it's possible with above AFE.

    You mean to say increase the R1 resistor value from 1k to 4.7k and select an appropriate value of R1 by measuring impedance. am I right?? 

  • The way your circuit implemented is that the current through the DUT is defined by the value of the DUT and excitation voltage Vexc programmed into the AD5933. The differential amplifier IC3B has gain of 0.1, so, for example, if you program Vexc = 2V the voltage applied to DUT is 0.2V p-p. If the impedance of your DUT is 1MOhm the current through the DUT is 0.1 * Vexc / DUT = 0.2 microampere p-p. If you do not connect any DUT, the impedance of your DUT is practically infinity and the current through it is zero.

    I would increase R1 to 4.7k to keep the AD5933 internal input OPAMP at gain 1. Currently the differential amplifier IC3B has gain of 0.1. To simplify things I would also keep the differential amplifier IC3B at gain 1, so that the overall system gain from the excitation to the DA5933 internal ADC would be 1 to begin with, so that once you connect calibration and test resistors instead of your DUT, the signal would be dined as R5 / DUT, R6 / DUT, R7 / DUT, depending on which feedback resistor for IC4A you select. This way you can ensure that there is no distortion of the sinewave at the AD5933 RFB pin and that the internal ADC dynamic range is reasonably utilized, by using calibration and testing resistors larger or equal to the selected feedback resistor for IC4A (R5, R6 or R7). Best is to use calibration resistor equal to the selected feedback resistor. Once that is verified, you can tweak the parameters of your electronics the way you want, just making sure that the sinewave at the RFB pin is not getting distorted.