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()