Skip to content

Multiple SMUs or Multi Channel SMUs

William Wood edited this page Dec 3, 2018 · 7 revisions

Multiple SMUs or Multi-Channel SMUs

The ideology of having a uniform interface for all devices to be used by presents some interesting concepts when it comes to Multi-Channel SMUs vs Multiple Single-Channel SMUs (or indeed a mix of both). Ideally, if we have an experimental set-up with, say, one 3-channel SMU but later down the line it gets replaced with 3 individual SMUs, it should be possible to apply our same ideology to ensure the program itself needs minimal adjustmenets.

For this reason JISA has the ability to:

  • Treat a collection of individual SMUs (both single and multi channel) as a single SMU with multiple channels
  • Treat a single SMU with multiple channels as a collection of single SMUs

Multiple-Channel SMUs

SMUs that have multiple channels all extend the MCSMU abstract class. This in-turn extends the SMU class. Devices implemented as an MCSMU thus provide all the same functions as SMU devices. In-fact, if you treat an MCSMU as simply being an SMU then it will simply assume that you are referring to the first channel of the instrument.

The differences largely come down to the fact that you can now specify which channel you are referring to when calling all the standard SMU functions. Each channel is assigned a number, starting at 0. So an SMU with 3 channels would have channel numbers 0, 1 and 2.

For example if I wanted to set the voltage on channel 0 (ie first channel) and set the current on channel 1:

smu.setVoltage(0, 5.3);   // Set voltage on channel 0 to 5.3 V
smu.setCurrent(1, 50e-3); // Set current on channel 1 to 50 mA

MCSMU Sweeps

With having multiple channels comes the ability to perform nested sweeps (ie sweep one channel at every step of a sweep in another). Since this is more complex than just a straight-forward sweep, we introduce MCSMU.Sweep objects to first configure your sweep then run it.

For example, if we wanted to linearly sweep channel 1 from 0 V to 20 V in 5 steps but at each step sweep channel 0 from 0 V to 8 V and back in 4 steps each way (both with a 500 ms delay) we would do the following:

MCSMU.Sweep sweep = smu.createMultiSweep();

sweep.addLinearSweep(1, SMU.Source.VOLTAGE, 0, 20, 5, 500, false);
sweep.addLinearSweep(0, SMU.Source.VOLTAGE, 0, 8, 4, 500, true);

MCSMU.DataPoint[] points = sweep.run();

This returns an array of Multi-Channel DataPoint objects. Each one represents an overall step in the sweep:

for (MCSMU.DataPoint point : points) {

  double vChannel1 = point.getChannel(1).voltage; // Voltage of channel 1
  double vChannel0 = point.getChannel(0).voltage; // Voltage of channel 0
  double iChannel1 = point.getChannel(1).current; // Current of channel 1
  double iChannel0 = point.getChannel(0).current; // Current of channel 0

}

Treating an MCSMU as multiple SMUs

If you wish to treat an MCSMU as multiple SMU objects you can do so by use of getChannel(...):

SMU smu1 = mcSmu.getChannel(0);
SMU smu2 = mcSmu.getChannel(1);

After which, in this example, calling getVoltage(), setCurrent(...) etc on smu1 or smu2 will perform that action on channel 0 or channel 1 respectively of mcSmu.

Treating multiple SMUs as an MCSMU

If you have multiple SMUs it may be advantageous for you to consider them as a single SMU with multiple channels. To do this use the SMUCluster class like so:

SMUCluster cluster = new SMUCluster(
  new K236(new GPIBAddress(0,14)),
  new K2450(new GPIBAddress(0,15))
);

This example creates an SMUCluster made up of a K236 and a K2450. SMUCluster is a type of MCSMU so now you can use functionality like the multi-channel sweep to perform the same sweep as we did with the multi-channel SMU but using two separate SMUs this time:

MCSMU.Sweep sweep = cluster.createMultiSweep();

sweep.addLinearSweep(1, SMU.Source.VOLTAGE, 0, 20, 5, 500, false);
sweep.addLinearSweep(0, SMU.Source.VOLTAGE, 0, 8, 4, 500, true);

MCSMU.DataPoint[] points = sweep.run();
Clone this wiki locally