Automated 2D Impedance Sweep on the MFIA


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 MFLI with 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 details a short script for Python 3.7 which demonstrates the ease in which multi-dimension impedance sweeps can be carried out.

Figure 1: A photograph showing a red LED mounted on MFITF sample carrier and connected to MFIA



The script in this blog 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 (Ref 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:

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 (Ref 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 the photo (Figure 1).

To run the python script provided in the blog, it is recommended to download open-source Python, and the lastest zhinst python package freely available from Python Package Index. More information can also be found at our download website.

The script presented in this blog is based on, 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 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.

In order to write scripts that sweep other parameters or adjust other setup parameters (eg. filter bandwidth, settling time, number of averaging etc.,), have a look at the LabOne API Commands Log (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.

In order to initially 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.

Figure 2: LabOne API command log displayed in Python format, accessible from the LabOne web interface by clicking the “show log” button. The commands shown set a sweep of the bias voltage from 0 V to 2.5 V and capture the resulting impedance data.



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 (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).

Figure 3: Bias dependent behavior given by the LabOne sweeper, showing the impedance of a red LED over a bias voltage sweep of 0 V to 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.

Figure 4: 2D impedance (amplitude, phase and capacitance) map of a red LED with respect to DC bias voltage (in linear scale) and frequency (in log scale).


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 MFIA (and MFLI with 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 the users’ time by automating the entire process into a single mouse-click.

Figure 5: Nyquist plot of a red LED at different DC biases excerpted at a step length of 0.07 V: 1 V (cyan), 1.07 V (orange), 1.14 V (green), 1.21 V (red), 1.28 V (purple) and 1.35 V (brown).



The blog 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 above figures show a 2D sweep of frequency and bias voltage, but other parameters could be swept such as amplitude, auxiliary output or PID parameter* (requires MF-PID option). The API provides an automated solution, saving plenty of manual effort. This is particularly helpful for low frequency impedance measurement which can be extremely time-consuming.

If you’d like to hear more about how you can control the MFIA via API, Get in touch.



The author would like to thank Dr. Paweł Wierzba from Gdansk University of Technology for his comments.



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).


Special thanks to Timothy Ashworth for discussions and Fei Liu for initial ideas