AnsweredAssumed Answered

Using CN0349 to measure complex impedances

Question asked by ronishi3 on Jan 24, 2018
Latest reply on Feb 13, 2018 by R.L

I am using the CN0349 evaluation board for impedance measurements of resistors and capacitors using my own code and I2C to the AD5934 and ADG715 modules. Currently, I can measure all ranges of real impedance resistor values correctly (from ~100ohm - 33kohm) and certain complex impedance reactances of capacitors (10uF, 2.2uF @ 2kHz). For reactances of other capacitor values (100nF, 47nF @ 2kHz) is where I am unable to get accurate measurements, so I'd like to ask if someone can replicate my measurements in parallel to compare values and follow my method for any errors as I cannot use the evaluation software to cross check without the purchase of additional hardware. [Edit: Was told the CN0217 is best for impedance measurements but don't see the difference between the circuitry and functionality - what's the difference between the CN0217 and the CN0349 or the AD5934 and AD5933 for these purposes??]


My goal is to eventually be able to use a Start Frequency of ~100-200Hz by using a different MCLK crystal (~32kHz instead of 1MHz) for low impedance measurements (up to ~1kohm).


My settings:

  • Start freq: 2kHz
  • Gain x1
  • Settling cycles: 255
  • Excitation voltage: 2Vpp
  • freq increment: 0 (only want readings at 2kHz)
  • # increments: 5 


Capacitor inputs that work (low reactance, high admittance):

  • C=10uF => expected Xc = -1/(2*pi*2000*10e-6) = -8ohms
  • C=2.2uF => expected Xc = -1/(2*pi*2000*2.2e-6) = -36ohms 


Capacitor inputs that don't work (higher reactances)

  • C=100nF => expected Xc = -1/(2*pi*2000*100e-9) = -796ohms (calibration range 1 RCAL=RFB=100ohm)
  • C=47nF => expected Xc = -1/(2*pi*2000*47e-9) = -1693ohms (calibration range 3 RCAL=RFB=1kohm)




i2c_write(0x81, 0x10)


i2c_write(0x81, 0x00)



//Start freq - 2kHz -> 0x418937

i2c_write(0x82, 0x41)

i2c_write(0x83, 0x89)

i2c_write((0x84, 0x37)



//freq increment reg - 0Hz

i2c_write(0x85, 0x00)

i2c_write(0x86, 0x00)

i2c_write(0x87, 0x00)



//Number increments - 5

i2c_write(0x88, 0x00)

i2c_write(0x89, 0x05)



//Settling times - 255 cycles

i2c_write(0x8A, 0x00)

i2c_write(0x8B, 0xFF)


//Set excitation voltage first 2Vpp

i2c_write(0x80, 0x01)



//start freq sweep

i2c_write(0x80, 0x21)






i2c_write(0x81, 0x10)


//power down

i2c_write(0x80, 0xA0)


I do this once for calibration to get the phase and magnitude (ADG715 switch status 1001 or 10010), calculate the Gain Factor (GF), magnitude and phase from the Re and Im parts. Then with the capacitor at pins 4 and 5 of J1 (ADG715 switch status 10000001 or 10000010) to get the magnitude and phase. The impedance |Z| = 1/(GF * magnitude) and phase = unknown_phase - system_phase.


With |Z| and the phase, get the Re and Im components ==> Z = R - Xj where R is the resistance of input (subtract the 100ohm series resistor R2) and X should be the reactance calculated by X = 1/(2*pi*f*C)


The follow screenshots show the measured values from the serial output (first part is calibration, second is measurement)


10 uF (@2kHz, Xc = 8 ohm)

2.2uF (@2kHz, Xc = 36 ohm)

100nF (@2kHz, Xc = 796 ohm)

47nF (@2kHz, Xc = 1693 ohm)

150 ohm

2.3 kohm


33 kohm