This notebook is for measuring diodes. This was done by connecting different diode types to the four channels of the AD5522. Notice that LEDs are also a type of diode. I connected these devices to the AD5522:
The LEDs were taken from a '3mm Multi Color LED Kit' (511-8002-KIT-ND) from digi-key. The LEDs with the same were mixed together so I don't know the exact type of LED I measured.
from importlib import reload
import sys
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# Reload already loaded modules
for m in ("AD5522_pi", "AD7685_pi", "AD5522dev_pi"):
try:
mod = sys.modules[m]
except KeyError:
pass
else:
reload(mod)
from AD5522dev_pi import AD5522dev
from AD5522_pi import MeasMode
board = AD5522dev(vref=5.0)
There are two main modes for using a SMU to do measurements on it's output port. First, and most used option, is to force a voltage and measure the resulting current. Second is the opposite, e.g. forcing current and measuring the resulting voltage.
Below you find the procedure used to apply the two modes on the selected diodes.
def _block(): # Avoid generating global variables
for ch in board.channels:
ch.currentrange = "extres"
def _setandmeasure(iset):
ivs = []
for i, ch in enumerate(board.channels):
board.measchannel = i
ch.mode = MeasMode.FIMV
ch.force = iset
ivs.append(board.measure(count=10)[0])
ch.mode = MeasMode.FIMI
ivs.append(board.measure(count=10)[0])
return ivs
iset = np.arange(-0.5e-3, 22e-3, 0.1e-3)
meas = np.array(tuple(_setandmeasure(i) for i in iset))
for ch in board.channels:
ch.mode = MeasMode.HIMV
ch.force = 0.0
return meas
meas_fi = _block()
def _block():
for ch in board.channels:
ch.currentrange = "5µA"
def _setandmeasure(vset):
ivs = []
for i, ch in enumerate(board.channels):
board.measchannel = i
ch.mode = MeasMode.FVMV
ch.force = vset
ivs.append(board.measure(count=10)[0])
ch.mode = MeasMode.FVMI
ivs.append(board.measure(count=10)[0])
return ivs
vset = np.arange(-11, 11.1, 0.1)
meas = np.array(tuple(_setandmeasure(v) for v in vset))
for ch in board.channels:
ch.mode = MeasMode.HVMV
ch.force = 0.0
return meas
meas_fv = _block()
plt.figure(figsize=[12,10])
plt.subplot(2,2,1)
plt.plot(meas_fi[:,0], 1e3*meas_fi[:,1], 'k')
plt.plot(meas_fi[:,2], 1e3*meas_fi[:,3], 'y')
plt.plot(meas_fi[:,4], 1e3*meas_fi[:,5], 'g')
plt.plot(meas_fi[:,6], 1e3*meas_fi[:,7], 'r')
plt.xlabel("Voltage [V]")
plt.ylabel("Current [mA]")
plt.legend(("1N4007", "yellow LED", "green LED", "red LED"))
plt.axis([-11, 3, -1e-4, 22])
plt.grid(True)
plt.subplot(2,2,3)
plt.plot(meas_fi[:,0], 1e3*meas_fi[:,1], 'k')
plt.plot(meas_fi[:,2], 1e3*meas_fi[:,3], 'y')
plt.plot(meas_fi[:,4], 1e3*meas_fi[:,5], 'g')
plt.plot(meas_fi[:,6], 1e3*meas_fi[:,7], 'r')
plt.xlabel("Voltage [V]")
plt.ylabel("Current [mA]")
plt.legend(("1N4007", "yellow LED", "green LED", "red LED"))
plt.axis([0, 2.5, -1e-4, 22])
plt.grid(True)
plt.subplot(2,2,4)
plt.plot(meas_fi[:,0], 1e6*meas_fi[:,1], 'k')
plt.plot(meas_fi[:,2], 1e6*meas_fi[:,3], 'y')
plt.plot(meas_fi[:,4], 1e6*meas_fi[:,5], 'g')
plt.plot(meas_fi[:,6], 1e6*meas_fi[:,7], 'r')
plt.xlabel("Voltage [V]")
plt.ylabel("Current [µA]")
plt.legend(("1N4007", "yellow LED", "green LED", "red LED"))
plt.axis([-11, 0, 0, 50])
plt.grid(True)
There are three plots of the data with forced current. On top the plot over the full voltage range is given and below are two plots with a zoom on the postive and on the negative voltage range. Although the data is measured by forcing a current and measuring the voltage is put on the X-axis and current on Y-axis in the plots as is commonly done.
For the positive voltage section one can see the smooth curve and the different threshold voltages of the device: around 0.6V for the 1N4007 diode, around 1.6V for the red diode and between 1.8V and 1.9V for the yellow and the green diode. Also a difference in slope of the current as function of voltage is seen between the different devices. It is the steepest for the 1N4007 diode, followed by the yellow LED, the green LED and finally the red LED.
For the zoom in on the negative voltage one can see that there are no good measurements present. For negative voltage the diodes are in reverse so only low leakage currents are expected. The step in forced current is too big so for the first forced negative current the SMU provides the maximum negative voltage without reaching the wanted current. Although the LEDs are only rated for a maximum reverse voltage of 3-4V they seem to be able to withstand short exposure to -11V. It is also seen that still a positive current is measured for the negative voltage. The SMU was still uncalibrated for this measurement and the conclusion is that offset calibration is needed to get accurate low value measurements.
plt.figure(figsize=[12,10])
plt.subplot(2,2,1)
plt.plot(meas_fv[:,0], 1e6*meas_fv[:,1], 'k')
plt.plot(meas_fv[:,2], 1e6*meas_fv[:,3], 'y')
plt.plot(meas_fv[:,4], 1e6*meas_fv[:,5], 'g')
plt.plot(meas_fv[:,6], 1e6*meas_fv[:,7], 'r')
plt.xlabel("Voltage [V]")
plt.ylabel("Current [µA]")
plt.legend(("1N4007", "yellow LED", "green LED", "red LED"))
plt.axis([-11, 3, -0.1, 10])
plt.grid(True)
plt.subplot(2,2,3)
plt.plot(meas_fv[:,0], 1e6*meas_fv[:,1], 'k')
plt.plot(meas_fv[:,2], 1e6*meas_fv[:,3], 'y')
plt.plot(meas_fv[:,4], 1e6*meas_fv[:,5], 'g')
plt.plot(meas_fv[:,6], 1e6*meas_fv[:,7], 'r')
plt.xlabel("Voltage [V]")
plt.ylabel("Current [µA]")
plt.legend(("1N4007", "yellow LED", "green LED", "red LED"))
plt.axis([0, 2.5, -1e-4, 10])
plt.grid(True)
plt.subplot(2,2,4)
plt.plot(meas_fv[:,0], 1e9*meas_fv[:,1], 'k')
plt.plot(meas_fv[:,2], 1e9*meas_fv[:,3], 'y')
plt.plot(meas_fv[:,4], 1e9*meas_fv[:,5], 'g')
plt.plot(meas_fv[:,6], 1e9*meas_fv[:,7], 'r')
plt.xlabel("Voltage [V]")
plt.ylabel("Current [nA]")
plt.legend(("1N4007", "yellow LED", "green LED", "red LED"))
plt.axis([-11, 0.5, 0, 50])
plt.grid(True)
For the forced voltage measurement we provided the same three plots. The maximum current in the plots is reduced from 22mA to 10µA to increase more accurate measurement of small currents. For the positive voltage range one can see that the plot is less smooth than for the forced current measurement. This is because small changes in voltage give high changes in current when above the threshold voltage. The reduced current range also influences the percieved threshold voltage for the different devices. For the negative voltage on the contrary one can now see that one gets current measurements for the full voltage range. One can see that for the 1N4007 diode the current immediately starts to increae when the voltage goes above 0V and not for the LEDs. The measurement now more clearly indicates the need for offset calibration and that the LEDs seems to be able to withstand the out of spec reverse voltage gracefully.
Combining the two measurements one can see that a more ideal measurement strategy for a diode would be to use forced current measurement for positive voltage to get an accurate smooth curve and forced voltage for the negative voltage range.
In general using a SMU to measure certain devices gets best results when using opitimized measurement procedures for the specific device one wants to measure.