Source code for semi_cr.core.lab.instrument.qcodes_d5a
import time
from qcodes_contrib_drivers.drivers.QuTech.D5a import D5a as _QCoDesD5aDriver
from spirack import SPI_rack
[docs]
class QCoDesD5a:
"""D5a 16-channel DAC backed by the QCoDeS contrib driver.
A thin wrapper that opens the SPI rack connection and exposes the
underlying QCoDeS instrument as ``driver``. Channels and spans are
accessed directly via QCoDeS parameters on ``driver``:
driver.dac1 … driver.dac16 — voltage parameters (V)
driver.span1 … driver.span16 — span parameters ('4v uni', '4v bi', '2v bi')
Changing a span parameter updates the corresponding dac validator automatically.
Example (hardware connected on /dev/ttyACM0, module slot 2):
>>> supply = QCoDesD5a("d5a_0", port="/dev/ttyACM0", module=2)
>>> supply.driver.dac1(1.5)
>>> supply.driver.dac1()
1.5
>>> supply.driver.span1()
'4v bi'
>>> supply.driver.span1('2v bi') # restrict channel 1 to ±2 V
"""
def __init__(self, name: str, port: str, module: int, reset_voltages: bool = False):
"""Connect to a D5a module inside an SPI rack.
Args:
name: Unique QCoDeS instrument name (e.g. "d5a_0").
port: Serial port of the SPI rack (e.g. "/dev/ttyACM0").
module: Module slot number of the D5a inside the SPI rack.
reset_voltages: If True, zero all DAC outputs on connect.
"""
self._spirack = SPI_rack(port, baud=1_000_000, timeout=1)
# Give the SPI rack a moment to become ready after opening the port.
time.sleep(1)
self._spirack.unlock()
self.driver = _QCoDesD5aDriver(
name,
self._spirack,
module,
reset_voltages=reset_voltages,
inter_delay=0.0,
dac_step=0.1,
)
[docs]
def get_idn(self) -> dict:
return self.driver.get_idn()