Automated 2D Impedance Sweeps on the MFIA
Introduction
Many devices and materials exhibit an impedance which depends on both frequency and other parameters such as bias voltage. To fully characterize the impedance of these samples requires an impedance analyzer with the ability to sweep in two dimensions. The MFIA (and the MFLI with the MF-IA option) can be easily controlled via any of the five included APIs to open up the full parameter space of impedance analysis.
This blog post presents a short script for Python 3.7, demonstrating the ease with which multi-dimensional impedance sweeps can be carried out.
Background
The script in this post describes how to carry out a 2D sweep, where DC bias voltage is the second sweep parameter. The bias voltage is an essential parameter when studying devices that exhibit a non-linear I-V response. A typical example includes electrochemical devices such as batteries or fuel cells, which have complicated physiochemical behavior with respect to bias [1]. Other examples include semiconductor diodes, where junction capacitance forms due to charge carrier depletion at the interface. The areal junction capacitance (C') works very similar to a standard parallel-plate capacitor, yet with a major difference that it can be tuned by applying a bias voltage (Va), given by the equation below:
\({C}'=\frac{\varepsilon }{d}\propto\sqrt{\frac{1}{V_{b}-V_{a}}}\)
As the forward bias voltage (Va) ramps up, the depletion layer width (d) shrinks, resulting in an increase in the capacitance. Eventually when the bias approaches the built-in potential (Vb), the equation becomes invalid and junction turns into Ohmic [2].
Experimental Setup
A red light-emitting-diode (LED, Digikey part number C503B-RAN-CZ0C0AA2CT-ND) was soldered on MFITF demo carrier and connected to MFIA as shown in Figure 1.
To run the Python script provided here, it is advisable to download open-source Python and the lastest zhinst Python package freely available from the Python Package Index. More information can be found in our Download Center.
The script is based on example_poll_impedance.py, one of many example scripts included with the Python API. We have modified the script to include two "for" loops in order to measure the impedance as a function of frequency in the fast direction, and as a function of bias voltage in the slow direction.
One nice feature of this script is that it uses the ZiDAQ module and the poll function, which returns the measured impedance data formatted as a nested dictionary. Users can then use Python or other programs to analyze and plot the data.
To write scripts that sweep other parameters or adjust other setup parameters (eg. filter bandwidth, settling time, number of averaging etc.,), take a look at the LabOne® API Commands Log (see Figure 2). The command log can be accessed in the user interface by clicking the "show log" button. Each action in the graphical interface is logged along with the node structure, and therefore saves the time of looking through the node documentation.
To determine the turn-on voltage of the LED, we initially use the LabOne Sweeper to run a DC bias sweep from 0 V to 2.5 V, with an additional AC voltage test signal amplitude of 100 mV at 1 kHz. Note that a more rigorous way is to sweep current to prevent possible catastrophic failure. In our case, sweeping voltage is feasible since the measured current is lower than the test current (20 mA) which the manufacturer specifies.
Results
Figure 3 shows the bias depend behavior of impedance amplitude (blue), phase (red) and derived parallel capacitance (green) of the LED, generated by the LabOne Sweeper. Below 1.0 V, the LED behaves very similar to a capacitor as theory suggests. The measured phase (-89.5 deg) is close to -90 deg at zero bias, and the impedance amplitude decreases slowly with respect to the DC offset (see Figure 3). The capacitance rises slightly in the beginning but starts to fall out of theoretical prediction close to turn-on voltage (~1.5 V).
Above 1.5 V, the impedance becomes much smaller (only 9.6 Ohm at 2.5 V). The LED now behaves as a resistor where the phase rises close to 0 deg (measured as 140 mdeg at 2.5 V).
To gain more insight in the transition region, we design our Python script to sweep both frequency (from 1 kHz to 1 MHz) and bias voltage (from 1 V to 1.7 V). The measured impedance amplitude reveals a clear frequency dependency below turn-on voltage. The higher the frequency, the lower the impedance amplitude. And above this threshold, the dependency becomes weaker.
Capacitance mapping can also be done using the same script. However, since the capacitance becomes meaningless close to the turn-on threshold or above, we only plot the values up to 1.56 V. To obtain the capacitance of the LED, we extract data from the 'param1' node from one of the existing circuit element models (R||C) in the impedance module. It should be mentioned that other circuit elements such as R, L, D, and Q are also available. The capacitance (on the order of pF up to hundreds of pF) in this region increases with bias voltage while remaining independent of frequency, as theory predicts.
It is also interesting to look at the Nyquist plot at different biases. For better visualization, we present the measured impedance data in a step length of 0.07 V and plot them in Figure 5. A clear transition can also be seen: the curve at 1 V bias (cyan) is almost a straight line with infinite slope in the beginning, corresponding to -90 deg as shown in the phase map in Figure 4. At higher bias, the resistance component dominates the impedance, which leads to a R-C semi-circle. Eventually after the LED is turned on, the resistance becomes so small that disappears in the scale shown in Figure 5.
It is worth mentioning that users of the MFIA (and of the MFLI with the MF-IA option) can also easily obtain Nyquist plot in the LabOne GUI, and then manually step the DC bias each time after sweep. However, this Python script saves time by turning the entire process into a single mouse click.
Conclusion
This blog post shows how an API script can be used to connect and command the MFIA to take complicated data sets without having to manually change parameters. The results show a 2D sweep of frequency and bias voltage, but other parameters could be swept - for example amplitude, auxiliary output or PID parameter (which, however, requires the MF-PID option). The API provides an automated solution that saves time and effort. This is particularly helpful for low-frequency impedance measurements that can often be extremely time-consuming.
If you'd like to hear more about how to control the MFIA with APIs, get in touch with us.
Acknowledgements: I would like to thank Dr. Paweł Wierzba from Gdansk University of Technology for his comments. Special thanks to Tim Ashworth for discussions and Fei Liu for initial ideas about this post.
References
1. M. Winter and R. J. Brodd. "What are batteries, fuel cells, and supercapacitors?." Chemical Reviews (2004): 4245-4270.
2. B. Van Zeghbroeck. Principles of Semiconductor Devices (2011). http://ecee.colorado.edu/~bart/book/book/chapter4/ch4_3.htm#4_3_4






