See also

A Jupyter notebook version of this tutorial can be downloaded here.

SPI Rack#

In this tutorial we explain basic usage of the modular SPI Rack drivers provided by the Qblox instruments package. The driver is based on the programming interface provided by SPI-rack.

In order to connect to the SPI Rack driver:

[1]:
from qblox_instruments import SpiRack

# In our case the SPI Rack is connected to COM port 4
spi = SpiRack("SPI Rack", "COM4")
Connected to: Qblox SPI Rack (serial:None, firmware:{'device': 'v1.6 - May 10 2019 - mt', 'driver': {'version': '0.3.2', 'date': '21/04/2021-16:38:33', 'hash': '0x94E811E5', 'dirty': False}}) in 0.00s

To verify everything is working correctly we can read out the temperature of the C1b module

[2]:
spi.temperature()
[2]:
23.75

Connecting to S4g#

Next, we need to add the modules to our driver. We will be using a S4g module for this tutorial.

[3]:
spi.add_spi_module(2, "S4g")

The S4g module we added can now be accessed through spi.module2. Let’s try setting an output current:

[4]:
spi.module2.dac0.current(1e-3)

This sets the output current of dac0 (output 1) to 1 mA. We can read this current back through:

[5]:
spi.module2.dac0.current()
[5]:
0.0009998321533203139

Now we will change the output range.

[6]:
spi.module2.dac1.span()
[6]:
'range_max_bi'

We see that the span of DAC channel 1 is set to the default 'range_max_bi' (corresponding to -40 to +40 mA), changing this works similar to how we change the current.

[7]:
spi.module2.dac1.span("range_min_bi")
spi.module2.dac1.span()
[7]:
'range_min_bi'

Now we updated the range to the smaller -20 to +20 mA range. We will now set all output values back to zero using the convenient set_dacs_zero function.

[8]:
spi.module2.dac0.current()
[8]:
0.0009998321533203139
[9]:
spi.set_dacs_zero()
[10]:
spi.module2.dac0.current()
[10]:
0.0

Connecting to D5a#

Connecting to the D5a module works the same way as the S4g. Instead of the default name module1, let’s give this D5a an alias and call it alice

[11]:
spi.add_spi_module(1, "D5a", "alice")
[12]:
spi.alice.dac0.voltage(1.0)
spi.alice.dac0.voltage()
[12]:
1.0
[13]:
spi.set_dacs_zero()
spi.alice.dac0.voltage()
[13]:
0.0

Similar to the S4g, the D5a also has a span that can be set.

Supported settings are: 'range_4V_uni', 'range_4V_bi' and 'range_2V_bi'.

[14]:
spi.alice.dac0.span()
[14]:
'range_4V_bi'

Extending the SPI module drivers#

It is possible to use custom drivers for the SPI modules within the SPI rack driver provided by qblox-instruments. Any class that inherits from SpiModuleBase is accepted by the spi rack driver. The driver can be added as a module by passing a reference to the class instead of the usual string.

As an example, we will add the DummySpiModule to the SPI Rack.

[15]:
from qblox_instruments.qcodes_drivers.spi_rack_modules import DummySpiModule

spi.add_spi_module(3, DummySpiModule, "bob")

Closing the instrument#

Finally, we will close the connection to the instrument.

[16]:
spi.close()