SPI Rack¶
QCoDeS driver¶
- class spi_rack.spi_rack.dummy_spi_api(address, baud_rate, timeout=1.0)[source]¶
Bases:
object
A dummy API that can be used to test the SPI rack driver.
- TEMPERATURE = 25.0¶
- BATTERY_LVLS = [6.0, -6.0]¶
- FIRMWARE_VERSION = 'v1.0'¶
- __init__(address, baud_rate, timeout=1.0)[source]¶
Instantiates the dummy API object.
- Parameters
address – Mock value for the address on which the spi_rack is connected. This value is assigned to a member variable, but is not actually used.
address – Mock value for the baud_rate for the serial connection. This value is assigned to a member variable, but is not actually used.
timeout – Mock value for the timeout for the serial connection. This value is assigned to a member variable, but is not actually used.
- get_temperature() float [source]¶
Return a mock temperature.
- Returns
returns dummy_spi_api.TEMPERATURE
- Return type
float
- get_battery() List[float] [source]¶
Return a mock battery level list. In the actual API these are two values read from the battery ADCs. For the mock API simply constant values are returned. The expected values to be returned can also be gotten through dummy_spi_api.BATTERY_LVLS.
- Returns
returns dummy_spi_api.BATTERY_LVLS
- Return type
List[float]
- class spi_rack.spi_rack.spi_rack(name: str, address: str, baud_rate: int = 9600, timeout: float = 1, is_dummy: bool = False)[source]¶
Bases:
qcodes.instrument.base.Instrument
SPI rack driver class based on QCoDeS <https://qcodes.github.io/Qcodes/>. This class relies on the spirack API <https://github.com/mtiggelman/SPI-rack/>.
Example usage:
from spi_rack.spi_rack import spi_rack from spi_rack.s4g_module import s4g_module spi = spi_rack("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, s4g_module) # 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.
- Parameters
name (str) – Instrument name.
address (str) – COM port used by SPI rack controller unit (e.g. “COM4”)
baud_rate (int) – Baud rate
timeout (float) – Data receive timeout in seconds
is_dummy (bool) – If true, the SPI rack driver is operating in “dummy” mode for testing purposes.
- add_spi_module(address: int, module_type: Union[spi_rack.spi_module_base.spi_module_base, str], name: Optional[str] = None, **kwargs)[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, spi_module_base]) – Either a str that is defined in _MODULES_MAP, or a reference to a class derived from SPI_Module_Base.
name (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 SPI_Module_Base
- get_idn()[source]¶
Generates the IDN dict.
- Returns
The QCoDeS style IDN dictionary. Currently only the firmware version is actually read from hardware.
- Return type
dict
- set_dacs_zero()[source]¶
Calls the
set_dacs_zero()
function on all the modules, which in turn should cause all output values to be set to 0.
- connect_message(idn_param: str = 'IDN', begin_time: Optional[float] = None) None [source]¶
Print a standard message on initial connection to an instrument. Overridden from superclass to accommodate IEEE488.2 for IDN.
- Parameters
idn_param (str) – Name of parameter that returns ID dict. Default
IDN
.begin_time (Optional[float]) –
time.time()
when init started. Default isself._t0
, set at start ofInstrument.__init__
.
- class spi_rack.spi_module_base.spi_module_base(parent, name: str, address: int, **kwargs)[source]¶
Bases:
qcodes.instrument.channel.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 spi_rack parent object. This is handled by the add_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).
- class spi_rack.spi_module_base.dummy_spi_module(parent, name: str, address: int)[source]¶
Bases:
spi_rack.spi_module_base.spi_module_base
A dummy implementation of module driver, used for mock implementations.
QCoDeS parameters¶
spi_rack.IDN
¶
Please see QCoDeS for a description.
- Properties
value: Anything
spi_rack.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
spi_rack.battery_voltages
¶
Calculates the battery voltages from the ADC channel values. Returns: [VbatPlus, VbatMin]
- Properties
unit: V
value: on
S4g module¶
- class spi_rack.s4g_module.dummy_s4g_api(spi_rack, module, max_current=0.05, reset_currents=True)[source]¶
Bases:
object
Mock implementation of spirack API (https://github.com/mtiggelman/SPI-rack/blob/master/spirack/S4g_module.py), for use with the dummy drivers.
- SPAN_MAPPING = {'range_max_bi': 2, 'range_max_uni': 0, 'range_min_bi': 4}¶
- DAC_RESOLUTION = 262144¶
- NUMBER_OF_DACS = 4¶
- __init__(spi_rack, module, max_current=0.05, reset_currents=True)[source]¶
Instantiates the mock communication layer with identical parameters to the spirack.S4g_module.S4g_module constructor.
- Parameters
spi_rack (dummy_spi_api) – Mock SPI_rack class object via which the communication runs
module (int) – module number set on the hardware
max_current (float) – maximum range of the S4g, configured in hardware
reset_currents (bool) – if True, then reset all currents to zero and change the span to range_max_bi
- change_span_update(DAC: int, span: int)[source]¶
Mocks the change_span_update function of the API.
- Parameters
DAC (int) – Current output of which to change the span
span (int) – values for the span as mentioned in the datasheet, use from SPAN_MAPPING
- change_span(DAC, span)[source]¶
Mocks the change_span function of the API
- Parameters
DAC (int) – Current output of which to change the span
span (int) – values for the span as mentioned in the datasheet, use from SPAN_MAPPING
- set_current(DAC: int, current: float)[source]¶
Mocks the set_voltage function of the API
- Parameters
DAC (int) – Current output of which to update the current
voltage (float) – new DAC current
- class spi_rack.s4g_module.s4g_module(parent, name: str, address: int, reset_currents: bool = True, dac_names: Optional[List[str]] = None, is_dummy: bool = False)[source]¶
Bases:
spi_rack.spi_module_base.spi_module_base
QCoDeS <https://qcodes.github.io/Qcodes/>- style instrument channel driver for the S4g SPI module.
- NUMBER_OF_DACS = 4¶
- __init__(parent, name: str, address: int, reset_currents: bool = True, dac_names: Optional[List[str]] = 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 spi_rack parent object. This is handled by the add_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 (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.
- Raises
ValueError – Length of the dac names list does not match the number of dacs.
- class spi_rack.s4g_module.s4g_dac_channel(parent: spi_rack.s4g_module.s4g_module, name: str, dac: int)[source]¶
Bases:
qcodes.instrument.channel.InstrumentChannel
QCoDeS <https://qcodes.github.io/Qcodes/>- style instrument channel driver for the dac channels of the S4g module. This class is used by the S4g_module to define the individual dac channels and should not be used directly.
- __init__(parent: spi_rack.s4g_module.s4g_module, name: str, dac: int)[source]¶
Constructor for the dac channel instrument channel.
- Parameters
parent (s4g_module) – Reference to the parent s4g_module
name (str) – Name for the instrument channel
dac (int) – Number of the dac that this channel corresponds to
S4g QCoDeS parameters¶
spi_rack_module2_dac0.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
spi_rack_module2_dac0.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_bi’, ‘range_max_uni’, ‘range_min_bi’}
spi_rack_module2_dac0.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
spi_rack_module2_dac0.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
spi_rack_module2_dac0.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
spi_rack_module2_dac0.is_ramping
¶
Returns whether the dac is currently in the process of ramping.
- Properties
value: on
spi_rack_module2_dac0.stepsize
¶
Returns the smallest current step allowed by the dac for the current settings.
- Properties
unit: A
value: on
D5a module¶
- class spi_rack.d5a_module.dummy_d5a_api(spi_rack, module: int, reset_voltages: bool = True, num_dacs: int = 16)[source]¶
Bases:
object
Mock implementation of spirack API (https://github.com/mtiggelman/SPI-rack/blob/master/spirack/D5a_module.py), for use with the dummy drivers.
- SPAN_MAPPING = {'range_2V_bi': 4, 'range_4V_bi': 2, 'range_4V_uni': 0, 'range_8V_bi': 3, 'range_8V_uni': 1}¶
- DAC_RESOLUTION = 262144¶
- __init__(spi_rack, module: int, reset_voltages: bool = True, num_dacs: int = 16)[source]¶
Instantiates the mock communication layer with identical parameters to the spirack.D5a_module.D5a_module constructor.
- Parameters
spi_rack (dummy_spi_api) – Mock SPI_rack class object via which the communication runs
module (int) – module number set on the hardware
reset_voltages (bool) – if True, then reset all voltages to zero and change the span to range_4V_bi. If a voltage jump would occur, then ramp to zero in steps of 10 mV
num_dacs (int) – number of DAC channels available
- change_span_update(DAC: int, span: int)[source]¶
Mocks the change_span_update function of the API.
- Parameters
DAC (int) – Current output of which to change the span
span (int) – values for the span as mentioned in the datasheet, use from SPAN_MAPPING
- change_span(DAC: int, span: int)[source]¶
Mocks the change_span function of the API.
- Parameters
DAC (int) – Current output of which to change the span
span (int) – values for the span as mentioned in the datasheet, use from SPAN_MAPPING
- set_voltage(DAC: int, voltage: float)[source]¶
Mocks the set_voltage function of the API
- Parameters
DAC (int) – DAC inside the module of which to update the voltage
voltage (float) – new DAC voltage
- class spi_rack.d5a_module.d5a_module(parent, name: str, address: int, reset_voltages: bool = True, dac_names: Optional[List[str]] = None, is_dummy: bool = False)[source]¶
Bases:
spi_rack.spi_module_base.spi_module_base
QCoDeS <https://qcodes.github.io/Qcodes/>- style instrument channel driver for the D5a SPI module.
- NUMBER_OF_DACS = 16¶
- __init__(parent, name: str, address: int, reset_voltages: bool = True, dac_names: Optional[List[str]] = None, is_dummy: bool = False)[source]¶
Instantiates the driver object.
- Parameters
parent – Reference to the spi_rack parent object. This is handled by the add_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 (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
- Raises
ValueError – Length of the dac names list does not match the number of dacs.
- class spi_rack.d5a_module.d5a_dac_channel(parent: spi_rack.d5a_module.d5a_module, name: str, dac: int)[source]¶
Bases:
qcodes.instrument.channel.InstrumentChannel
QCoDeS <https://qcodes.github.io/Qcodes/>- style instrument channel driver for the dac channels of the D5a module. This class is used by the d5a_module to define the individual dac channels and should not be used directly.
- __init__(parent: spi_rack.d5a_module.d5a_module, name: str, dac: int)[source]¶
Constructor for the dac channel instrument channel.
- Parameters
parent (d5a_module) – Reference to the parent s4g_module
name (str) – Name for the instrument channel
dac (int) – Number of the dac that this channel corresponds to
D5a QCoDeS parameters¶
spi_rack_module1_dac0.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
spi_rack_module1_dac0.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_8V_bi’, ‘range_4V_uni’, ‘range_4V_bi’, ‘range_2V_bi’, ‘range_8V_uni’}
spi_rack_module1_dac0.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
spi_rack_module1_dac0.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
spi_rack_module1_dac0.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
spi_rack_module1_dac0.is_ramping
¶
Returns whether the dac is currently in the process of ramping.
- Properties
value: on
spi_rack_module1_dac0.stepsize
¶
Returns the smallest current step allowed by the dac for the current settings.
- Properties
unit: V
value: on