Sequenzer Execution Order

Hi together,

I have now tried to setup a more complex bootup sequence looking like this:

As I was understanding this layout will now uncomnfigure SMU_VDD and SMU_VCC after entering the second step? Is it possible to prevent this, since we have complex multistep bootup sequences we have to use. In this cas we sweep VCC and VDD in parallel to a Voltage than have to rais VDD as first further and after that the VCC further.
Will this work or is this impossible to do at the moment?
Thanks for your help
Marc

1 Like

Hi Marc,

thanks for asking about your measurement!

It is correct that a module and the related instrument is unconfigured when a module is no more in an active branch. This means indeed that SMU_VDD and SMU_VCC get unconfigured once SweepMe! goes from branch 1 to branch 2.

So with multiple branches it is not possible right now. We have an idea in mind that instruments are not unconfigured if the same combination of a driver, a port, and a channel (if available) is used in a next branch. In this case, it is obvious that an instrument is still being used further. There is still some conceptional work to do as the instrument would still be configured again which should not interfere with the state that the instrument has.

The best solution that I can offer right now is to keep all SMUs in one branch and use the ReadValues module to create a recipe for bootup and parallel measurement.

Your sequencer could look like this:

Now you create a Excel of csv file that is loaded by the ReadValues module. There you define columns for voltage VCC, voltage VDD and an optional hold time.

The voltages can forwarded to the SMU modules via selection in the Sweep value field and the Hold time can be forwarded to the Hold module using the paramete syntax with curly brackets (see widget ‘Parameters’).

You are then free to create any voltage variation you like including different time steps per voltage. The concept can be extended to further instruments.

Does this help?

Thanks and best, Axel

1 Like

Hi Axel,

thanks for your reply, how would you create than the csv files for such a scenario:

Ramp VDD and VCC simultaneously from 0 V to +2 V
Ramp VDD from +2 V to +3.5 V
Ramp VCC from +2 V to +6.0 V
Ramp VSS from 0 V to -3.5 V
Ramp VEE from 0 V to -2.5 V

Thanks for the assistance.
Marc

1 Like

Hi Marc,

you can use e.g. Excel or LibreOffice Calc to create such a tabular value list:

When VDD and VSS are ramping up, the other one are constant. From line 24, only VDD ramps up and now also VSS stays constant.

You can save this file either at xlsx file or as csv file and load it with the ReadValues module which looks like this:

Please note that csv files must be saved with . as decimal separator.

Here is my csv file (xlsx cannot be uploaded in the forum):
Voltage_ramp_VDD_VCC_VSS_VEE.csv (2.4 KB)

The Sweep mode of ReadValues is set to “Each line of file” which is the default. It means that ReadValues will sweep through the rows and for each line of the file the values will be handed over to the SMUs and a measurement is triggered.

This gives you a lot of freedom to create any rampup procedure. However, all data will be in one file and also the plot will show the ramp up in one line.
You can use the slicing feature in the plot to only show e.g. the last x variations of ReadValues by entering [-x:] to plot a certain part of the variation without the rest.

Is this something that you can work with?

Best, Axel

Thanks Axel,
then I have understand your suggestion right. I have now created an script for generating the csv file already. Looks like your approach. I will have to test this but could workout indeed.
Marc

1 Like

The next step would than be, that we want to use another device after the boot up to do measurements how can this be done than without turning the SMUs off?

To be more precise: measuring current of all SMUs all one by one. How can we even only measure voltage or current without changing the device current settings?

1 Like

Here we need to dive more into advanced sequencing:

So far ReadValues was above the SMU modules, which is most intuitively, but it also works other way around.

The first branch consisting of SMU1, SMU2, ReadValues1 still works the same way. SMU1 and SMU2 do not perform an own variation. ReadValues will create the variation and at each step the values are handed over to the SMU modules, so they still get new set values that are applied.
Further at each iteration of ReadValues, all modules in the active branch are measured.

It means there is some flexibility in creating the sequence, especially if only one module makes a variation. In case multiple modules create a variation, there order is more important.

Once the sweep of ReadValues is finished, the first branch ends and SweepMe! goes into the second branch. SMU1 and SMU2 are still in an active branch, so they are not unconfigured or configured again. They remain at their set points, but now the LCRmeter as an example can perform a single measurement or a sweep.

Because SMU1, SMU2 and LCRmeter1 are in the second branch, the will be measured at each variation in this branch.

Just measuring current or voltage is not that easy because the driver always returns both as a convenience thing at each measurement point.

Hi Axel,
where can I see the implementation of the SMU module for the measurement part. I had the idea to code a new device class which could support multiple individual measurements and also could prevent a unconfigure to let the device open. I did not find any information in the code or the documentation how the measurement methods are accessed. This would also be of interest for other drivers, since if I use a Spektrum analyzer I don’t want to measure everything every time, rather I would say only to make a specific measurement.
How could this be possible or is this not possible due to programming restictions of the sweepme environment currently?
Greetings Marc

Hi Marc,

please have a look at this Wiki page
https://wiki.sweep-me.net/wiki/Sequencer_procedure

There, you can find commands that can be implenmented in a driver. They are the same for SMU, Spectrum analyzer, and other instrument modules. Some modules support extra functions that are often related to additional features of the modules that are documented in the Wiki article of each module. For example, the WaferProber module supports additional functions to load/unload a wafer outside of a measurement or can update/synchronize the wafer map.

As all drivers inherit from the class EmtpDevice
https://github.com/SweepMe/pysweepme/blob/main/src/pysweepme/EmptyDeviceClass.py
having a look into the public pysweepme code can be also helpful sometimes even though it does not help with the sequencer procedure.

Best, Axel

Can I add more GUI parameters in my SMU subclass? I wanted to use this to dynamically manipulate/override the measurement function in the device class to trigger specific measurements or should this be done different?
I tried this:

 gui_parameter = {

            "SweepMode": ["Voltage in V", "Voltage in V (with wait)", "Current in A", "Current in A (with wait)"],

            "Channel": [1, 2],

            "RouteOut": ["Front"],

            "Compliance": 5.0,

            "Range": ["Auto", "10 µA", "1 mA", "10 mA", "100 mA", "3 A", "10 A"],

            "RangeVoltage": ["Auto", "20 V", "6 V"],

            "Speed": ["Fast", "Medium", "Slow"],

            "MeasurementType": ["None", "Current", "Voltage"]

            # "4wire": False,

        }

Here I wanted to add a measurement Type parameter but this does not change the gui. I think this is limited in the SMU class itself then?
Greetings
Marc

1 Like

Hi Marc,

thanks for the further questions. If you like you can also create new topic/issues in the forum as this will make it easier for other users to find answers to similar questions.

In one of the last updates of SweepMe! / the SMU module, we added a “Parameter box” to the module. Now, GUI keys that are not supported by the SMU module via the fixed GUI fields, will be shown in an additional box (similar to Logger or Switch).

Here is an example for the SMU from iseg:

In the section Parameter, further non-standard parameters like “Mode”, “Polarity” or “Ramp rate” have been added.

If this does not work, please update SweepMe! or check the version manager via menu ‘Tools’ which SMU module version is activated.

Thanks and best
Axel

Hi Axel,
if I get another topic I will make a new one.
So I updated to 1.5.7.9 and to SMU 01_12 Version. I don’t see a parameter box in the gui.
Do I have to add the parameters through another function else than

def set_GUIparameter(self):

gui_parameter = {

“MeasurementType”: [“None”, “Current”, “Voltage”]

}

Because I don’t get the Parameter box.
Thanks
Marc

1 Like

Never mind, found the problem. The external library did not get loaded properly. Now I have the GUI Window.

1 Like

Hi Marc,

good to see it works now.

I recommend to have a look at the functions update_gui_parameters and appy_gui_parameters as described here

https://wiki.sweep-me.net/wiki/Driver_Programming#Dynamic_GUI_parameters

They are replacing get_GUIparameter and set_GUIparameter and have the advantage that you can dynamically add and create further keys depending on the user selection.

Thanks and best
Axel