SPI Rack
The SPI rack driver is separated into two layers:
QCoDeS driver: Instrument driver based on QCoDeS and the instrument’s native interface.
Native interface: Instrument API that provides control over the instrument and is an extension of the spirack package.
QCoDeS driver
- class qblox_instruments.SpiRack(*args: Any, **kwargs: Any)[source]
Bases:
SpiRack
,Instrument
SPI rack driver class based on QCoDeS.
Example usage:
from qblox_instruments import SpiRack from qblox_instruments.qcodes_drivers.spi_rack_modules import S4gModule spi = SpiRack("my_spi_rack", "COM4") # connects to an SPI rack on COM port 4 spi.add_spi_module(3, "D5a", "alice") # adds an D5a module with address 3 named "alice" spi.add_spi_module(2, "S4g", "bob") # adds an S4g module with address 2 named "bob" spi.add_spi_module(6, S4gModule) # adds an S4g module with address 6 with the default name module6 spi.bob.dac0.current(10e-3) # sets the current of output 1 of the S4g module named "bob" to 10 mA spi.alice.dac6.voltage(-2) # sets the voltage of output 7 of the D5a module named "alice" to -2 V
- __init__(name: str, address: str, baud_rate: int = 9600, timeout: float = 1, is_dummy: bool = False)[source]
Instantiates the driver object.
- add_spi_module(address: int, module_type: SpiModuleBase | str, name: str | None = None, **kwargs) None [source]
Add a module to the driver.
- Parameters:
address (int) – Address that the module is set to (set internally on the module itself with a jumper).
module_type (Union[str,
SpiModuleBase
]) – Either a str that is defined in _MODULES_MAP, or a reference to a class derived fromSpiModuleBase
.name (Optional[str]) – Optional name of the module. If no name is given or is None, a default name of “module{address}” is used.
- Raises:
ValueError – module_type is not a string or a subclass of
SpiModuleBase
- class qblox_instruments.qcodes_drivers.spi_rack_modules.SpiModuleBase(parent, name: str, address: int, **kwargs)[source]
Bases:
SpiModuleBase
,InstrumentChannel
Defines an abstract base class for SPI modules. All module drivers should inherit from this class.
This class defines no actual functionality but rather serves to provide a common interface shared among all modules.
- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the InstrumentChannel.
address (int) – Module number set on the hardware (set internally on the module itself with a jumper).
- __init__(parent, name: str, address: int, **kwargs)[source]
Defines an abstract base class for SPI modules. All module drivers should inherit from this class.
This class defines no actual functionality but rather serves to provide a common interface shared among all modules.
- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the module.
address (int) – Module number set on the hardware (set internally on the module itself with a jumper).
QCoDeS instrument parameters
QCoDeS parameters generated by SpiRack
.
SPIRack.IDN
Please see QCoDeS for a description.
- Properties:
value: Anything
SPIRack.temperature
Returns the temperature in the C1b module. Reads the temperature from the internal C1b temperature sensor. Accuracy is +- 0.5 degrees in 0-70 degree range.
- Properties:
unit: C
value: on
SPIRack.battery_voltages
Calculates the battery voltages from the ADC channel values. Returns: [VbatPlus, VbatMin]
- Properties:
unit: V
value: on
Native interface
- class qblox_instruments.native.SpiRack(address: str, baud_rate: int = 9600, timeout: float = 1, is_dummy: bool = False)[source]
Bases:
object
SPI rack native interface class. This class relies on the spirack API.
- __init__(address: str, baud_rate: int = 9600, timeout: float = 1, is_dummy: bool = False)[source]
Instantiates the driver object.
- add_spi_module(address: int, module_type: SpiModuleBase | str, name: str | None = None, **kwargs) Tuple[str, SpiModuleBase] [source]
Add a module to the driver and return module object.
- Parameters:
address (int) – Address that the module is set to (set internally on the module itself with a jumper).
module_type (Union[str,
SpiModuleBase
]) – Either a str that is defined in _MODULES_MAP, or a reference to a class derived fromSpiModuleBase
.name (Optional[str]) – Optional name of the module. If no name is given or is None, a default name of “module{address}” is used.
- Returns:
str – Name
SpiModuleBase – SPI module object
- Raises:
ValueError – module_type is not a string or a subclass of
SpiModuleBase
- get_idn() Dict [source]
Generates the IDN dict.
- Returns:
The QCoDeS style IDN dictionary. Currently only the firmware version is actually read from hardware.
- Return type:
- set_dacs_zero() None [source]
Calls the
set_dacs_zero()
function on all the modules, which in turn should cause all output values to be set to 0.
- class qblox_instruments.native.spi_rack_modules.SpiModuleBase(parent, name: str, address: int, **kwargs)[source]
Bases:
object
Abstract SPI module base class.
- __init__(parent, name: str, address: int, **kwargs)[source]
Defines an abstract base class for SPI modules. All module drivers should inherit from this class.
This class defines no actual functionality but rather serves to provide a common interface shared among all modules.
- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the module.
address (int) – Module number set on the hardware (set internally on the module itself with a jumper).
S4g QCoDeS driver
QCoDeS parameters generated by S4gModule
.
- class qblox_instruments.qcodes_drivers.spi_rack_modules.S4gModule(parent, name: str, address: int, reset_currents: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Bases:
S4gModule
,InstrumentChannel
QCoDeS style instrument channel driver for the S4g SPI module.
- NUMBER_OF_DACS = 4
- __init__(parent, name: str, address: int, reset_currents: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Instantiates the driver object. This is the object that should be instantiated by the
add_spi_module()
function.- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the InstrumentChannel.
address (int) – Module number set on the hardware.
reset_currents (bool) – If True, then reset all currents to zero and change the span to range_max_bi.
dac_names (Optional[List[str]]) – List of all the names to use for the dac channels. If no list is given or is None, the default name “dac{i}” is used for the i-th dac channel.
is_dummy (bool) – If true, do not connect to physical hardware, but use a dummy module.
- Raises:
ValueError – Length of the dac names list does not match the number of dacs.
S4g QCoDeS parameters
S4g.current
Sets the output current of the dac channel. Depending on the value of ramping_enabled, the output value is either achieved through slowly ramping, or instantaneously set.
- Properties:
unit: A
value: Numbers -0.04<=v<=0.04
S4g.span
Sets the max range of the DACs. Possible values: ‘range_max_uni’: 0 - 40 mA, ‘range_max_bi’: -40 - 40 mA, ‘range_min_bi’: -20 - 20 mA.
- Properties:
value: Enum: {‘range_max_uni’, ‘range_min_bi’, ‘range_max_bi’}
S4g.ramp_rate
Limits the rate at which currents can be changed. The size of of steps is still limited by ramp_max_step.
- Properties:
unit: A/s
value: on
S4g.ramp_max_step
Sets the maximum step size for current ramping. The rate at which it ramps is set by ramp_rate.
- Properties:
unit: A
value: on
S4g.ramping_enabled
Turns ramping on or off. Toggling ramping_enabled changed the behavior of the setter for the current parameter. If enabled, ramping is done at a rate set by ramp_rate and in steps specified by ramp_max_step.
- Properties:
value: Boolean
S4g.is_ramping
Returns whether the dac is currently in the process of ramping.
- Properties:
value: on
S4g.stepsize
Returns the smallest current step allowed by the dac for the current settings.
- Properties:
unit: A
value: on
S4g.dac_channel
Returns the dac number of this channel.
- Properties:
value: on
S4g native interface
- class qblox_instruments.native.spi_rack_modules.S4gModule(parent, name: str, address: int, reset_currents: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Bases:
SpiModuleBase
Native driver for the S4g SPI module.
- NUMBER_OF_DACS = 4
- __init__(parent, name: str, address: int, reset_currents: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Instantiates the driver object. This is the object that should be instantiated by the
add_spi_module()
function.- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the InstrumentChannel.
address (int) – Module number set on the hardware.
reset_currents (bool) – If True, then reset all currents to zero and change the span to range_max_bi.
dac_names (Optional[List[str]]) – List of all the names to use for the dac channels. If no list is given or is None, the default name “dac{i}” is used for the i-th dac channel.
is_dummy (bool) – If true, do not connect to physical hardware, but use dummy module.
- Raises:
ValueError – Length of the dac names list does not match the number of dacs.
D5a QCoDeS driver
QCoDeS parameters generated by D5aModule
.
- class qblox_instruments.qcodes_drivers.spi_rack_modules.D5aModule(parent, name: str, address: int, reset_voltages: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Bases:
D5aModule
,InstrumentChannel
QCoDeS style instrument channel driver for the D5a SPI module.
- NUMBER_OF_DACS = 16
- __init__(parent, name: str, address: int, reset_voltages: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Instantiates the driver object. This is the object that should be instantiated by the
add_spi_module()
function.- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the InstrumentChannel.
address (int) – Module number set on the hardware.
reset_voltages (bool) – If True, then reset all voltages to zero and change the span to range_max_bi.
dac_names (Optional[List[str]]) – List of all the names to use for the dac channels. If no list is given or is None, the default name “dac{i}” is used for the i-th dac channel.
is_dummy (bool) – If true, do not connect to physical hardware, but use a dummy module.
- Raises:
ValueError – Length of the dac names list does not match the number of dacs.
D5a QCoDeS parameters
D5a.voltage
Sets the output voltage of the dac channel. Depending on the value of ramping_enabled, the output value is either achieved through slowly ramping, or instantaneously set.
- Properties:
unit: V
value: Numbers -8.0<=v<=8.0
D5a.span
Sets the max range of the DACs. Possible values: ‘range_4V_uni’: 0 - 4 V, ‘range_8V_uni’: 0 - 8 V (only if non-standard 12 V power supply is present), ‘range_4V_bi’: -4 - 4 V, ‘range_8V_bi’: -8 - 8 V (only if non-standard 12 V power supply is present), ‘range_2V_bi’: -2 - 2 V.
- Properties:
value: Enum: {‘range_2V_bi’, ‘range_8V_uni’, ‘range_4V_bi’, ‘range_4V_uni’, ‘range_8V_bi’}
D5a.ramp_rate
Limits the rate at which currents can be changed. The size of of steps is still limited by ramp_max_step.
- Properties:
unit: V/s
value: on
D5a.ramp_max_step
Sets the maximum step size for voltage ramping. The rate at which it ramps is set by ramp_rate.
- Properties:
unit: V
value: on
D5a.ramping_enabled
Turns ramping on or off. Toggling ramping_enabled changed the behavior of the setter for the current parameter. If enabled, ramping is done at a rate set by ramp_rate and in steps specified by ramp_max_step.
- Properties:
value: Boolean
D5a.is_ramping
Returns whether the dac is currently in the process of ramping.
- Properties:
value: on
D5a.stepsize
Returns the smallest current step allowed by the dac for the current settings.
- Properties:
unit: V
value: on
D5a.dac_channel
Returns the dac number of this channel.
- Properties:
value: on
D5a native interface
- class qblox_instruments.native.spi_rack_modules.D5aModule(parent, name: str, address: int, reset_voltages: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Bases:
SpiModuleBase
Native driver for the D5a SPI module.
- NUMBER_OF_DACS = 16
- __init__(parent, name: str, address: int, reset_voltages: bool = False, dac_names: List[str] | None = None, is_dummy: bool = False)[source]
Instantiates the driver object. This is the object that should be instantiated by the
add_spi_module()
function.- Parameters:
parent – Reference to the
SpiRack
parent object. This is handled by theadd_spi_module()
function.name (str) – Name given to the InstrumentChannel.
address (int) – Module number set on the hardware.
reset_voltages (bool) – If True, then reset all voltages to zero and change the span to range_max_bi.
dac_names (Optional[List[str]]) – List of all the names to use for the dac channels. If no list is given or is None, the default name “dac{i}” is used for the i-th dac channel.
is_dummy (bool) – If true, do not connect to physical hardware, but use dummy module.
- Raises:
ValueError – Length of the dac names list does not match the number of dacs.