Poor Men's SMU, part 4: Calibration

Posted on do 11 februari 2021 in NLNet

As reported in my previous blog on using the AD5522 SMU development board it was mentioned calibration would be needed to get more accurate low-voltage and low-current measurements.


An important aspect of doing calibration is the order in which the parameters are calibrated and what references are used during the calibration. The order is important as metrics are correlated; for example calibrating input offsets should be calibrated before output offsets are calibrated as otherwise the input offset will wrongly seen as a measurement offset.

To improve the measurements I wanted to calibrate the following parameters:

  1. gain error
  2. force offset
  3. measurement offset

These errors are also the ones advised in the AD5522 data sheet to be calibrated. It does assume the 5V reference and linearity of the AD5522 SMU and the AD7685 ADC are accurate enough.

The gain error is calibrated by forcing the extreme value for voltage or current and measuring the resulting voltage or current. The gain error can then be computed out of the dialed in and measured range.

For the force offset calibration I did by trying to push the SMU to a value it can't achieve so it will clamp on the maximum force compliance. For example if you have a channel open and try force the SMU to have a certain current it will not reach the current as not current can flow. The SMU will clamp instead on the maximum voltage for a positive current and on the maximum negative voltage for a negative current. Sweeping the current from negative to positive one can find the point at which the SMU goes from clamping to negative voltage to clamping to positive voltage. This value then gives the force offset.

After calibration of the force offset then the measurement offset is determined by forcing a 0 value for current or voltage on the input and measuring the resulting output.

This procedure has been carried out in a python notebook that drives the SMU and investigate the details in the notebook. The resulting values of the calibration are also in that document.


Currently the calibration parameters have been included in the AD5522 python support code. I hard coded the calibration parameters in the init of the python class. When the board is initialized now the calibration parameters are set on the SMU.

The current calibration procedure is not ideal to squeeze out the last possible accuracy out of the board but is considered good enough for the measurements I want to do with it.

Diodes revisited

After this calibration procedure was done I then went back to the diodes measurement. But it did not seem to have improved the situation as can be seen from the results of redoing the forced voltage measurement:

I did not understand this measurement until I covered the diodes with a towel and then I got the following measurement:

This is more what I expected. LEDs are also photosensitive and when they are not covered they will generate a small current due to the light that is falling on them. This also shows that the SMU is capable of measuring current with an accury of at least a few nA which is better than I expected.