DAQ and power supplies

Data acquisition and electrical measurement drivers: NI DAQ, Rigol/EA power supplies, Keithley/Voltcraft multimeters, oscilloscopes.

Overview

Data acquisition and power equipment form the infrastructure of experiment automation. Quatm provides a unified NI-DAQmx wrapper together with SCPI/Modbus instrument drivers.


Rigol DP1116A programmable DC power supply

DP1116A Rigol DC power supply
CommunicationVISA
Output16V/10A or 32V/5A
Channels1
Resolution1 mV / 1 mA
Used for coil current control, laser diode driving and circuit board supply.
Driver module: DP1116A
from quatm.drivers.rigol.power_supply import DP1116A

ps = DP1116A(addr="USB0::0x1AB1::0x0E11::DP1A123456789::INSTR")
ps.set_voltage(12.0)       # 12V
dc.set_current(0.5)        # 500 mA current limit
ps.enable_output(True)

Rigol DP932 programmable DC power supply

Provides programmable DC power for a wide range of laboratory equipment.

from quatm.drivers.rigol.dp932 import RigolDP932

psu = RigolDP932("USB0::...")
psu.set_voltage(1, 5.0)     # Channel 1: 5.0 V
psu.set_current(1, 1.0)     # Channel 1: 1.0 A current limit
psu.output_on(1)

NI-SWITCH matrix/multiplexer switches

PXI-25xx / SCXI-11xx series NI-SWITCH
CommunicationNI-SWITCH API
Topologymatrix/multiplexer/general-purpose
Channelsdepends on module
Switching speedms range
Maximum voltage300 V (depends on module)
NI switch modules are controlled through the niswitch Python API. They are suited to signal routing, multiplexed calibration and coil polarity reversal in experiments.
Driver module: ni_switch
from quatm.drivers.NI.ni_switch import NISwitch

sw = NISwitch(resource_name="PXI1Slot2")
sw.connect(channel1="ch0", channel2="com0")
sw.disconnect(channel1="ch0", channel2="com0")
all_relays = sw.get_relay_count()

NI-Digital digital waveform generator/analyzer

PXIe-657x / PXIe-655x series NI-Digital
CommunicationNI-Digital Pattern API
Channels32–128
Rateup to 200 MHz
Voltage1.2–5.5 V (programmable)
Featurespattern generation/acquisition, PMU parametric measurement
NI digital waveform instruments are controlled through the nidigital Python API. They generate and acquire high-speed digital waveforms for custom TTL timing protocols and chip-level digital testing.
Driver module: ni_digital
from quatm.drivers.NI.ni_digital import NIDigital

dig = NIDigital(resource_name="PXI1Slot3")
dig.configure_voltage_levels(voltage=3.3)
pattern = [0b10101010] * 100  # 100-cycle digital waveform
dig.burst_pattern(pattern, frequency=10e6)

NI-DAQmx multifunction data acquisition

PCIe-63xx / USB-63xx / PXI series NI DAQ
CommunicationNI-DAQmx
Analog input16-bit, up to 2 MS/s
Analog output16-bit
Digital I/OTTL, up to 10 MHz
Counters2–4 channels
General-purpose multifunction DAQ cards for analog signal recording, timed digital I/O and photon counting.
Driver module: NIDAQ
from quatm.drivers.NI.daq import NIDAQ

daq = NIDAQ(
    dev_name="Dev1",
    rate=100_000,         # 100 kS/s
    buffer_size=10_000,
)

# Analog input (continuous acquisition)
daq.configure_ai(channels=["ai0", "ai1"], voltage_range=(-10, 10))
daq.start_ai()
data = daq.read_ai(samples=1000)

# Analog output
daq.configure_ao(channels=["ao0"], voltage_range=(0, 5))
daq.write_ao(channel="ao0", voltage=3.3)

# Digital I/O
daq.configure_di(lines=["port0/line0"])
daq.configure_do(lines=["port0/line1"])
daq.write_do(line="port0/line1", value=True)

# Counters (photon counting / frequency measurement)
daq.configure_counter(
    counter="ctr0",
    mode="edge_count",
    source="PFI0",
)
counts = daq.read_counter("ctr0")

Conrad relay board controller

Relay Board Conrad
Communicationserial (19200 baud, binary protocol)
Channels8 relays per board, daisy-chainable
ContactsAC/DC switching
An economical multi-channel relay controller suited to coarse switching: magnetic trap coil polarity reversal, device power switching and laser shutter control.
Driver module: RelayBoard
from quatm.drivers.Conrad.base import RelayBoard

# Single board
rb = RelayBoard(conn="/dev/ttyUSB0", start_addr=0)
rb.set_relay(relay=0, state=True)   # Close relay 1
rb.set_relay(relay=3, state=False)  # Open relay 4

# Byte write (controls 8 channels at once)
rb.write_byte(0b10101010)

Elektro Automatik PS2000B high-power supply

PS2000B series Elektro Automatik
Communicationserial (115200 baud)
Power640 W – 15 kW (depends on model)
Voltageup to 1500 V
Currentup to 510 A
Modesconstant voltage/current/power
High-power programmable DC supply for driving large currents in magnetic trap coils and for Feshbach resonance field coils.
Driver module: PS2000B
from quatm.drivers.ElektroAutomatik.base import PS2000B

ps = PS2000B(conn="/dev/ttyUSB0", remote_mode=True)

# Constant-current mode — magnetic field coil
ps.set_current(50.0)      # 50 A
ps.set_voltage_limit(20.0) # 20 V voltage limit
ps.enable_output(True)

# Read actual values
actual_v = ps.get_voltage()
actual_i = ps.get_current()

Keithley 2110 benchtop digital multimeter

2110 Keithley
CommunicationVISA (USB/LAN)
FunctionsDCV/ACV/DCI/ACI/resistance/capacitance/frequency/temperature
Accuracy5½ digits
Sampling rateup to 50 kS/s
A precision benchtop multimeter for electrical characterization and sensor calibration.
Driver module: Keithley2110
from quatm.drivers.Keithley.multimeter import Keithley2110

dmm = Keithley2110(addr="USB0::0x05E6::0x2110::1234567::INSTR")

# DC voltage measurement
voltage = dmm.measure_voltage(range="10V")

# 4-wire resistance measurement
resistance = dmm.measure_resistance_4wire(range="100Ω")

# Temperature (thermocouple)
temp = dmm.measure_temperature(tc_type="K")

Voltcraft VC7055 two-channel benchtop multimeter

VC7055 Voltcraft
Communicationserial (115200 baud, SCPI)
Channels2
FunctionsDCV/ACV/DCI/ACI/resistance/frequency/capacitance
Bluetoothoptional (VC7055BT)
A two-channel benchtop multimeter; the BT variant with built-in Bluetooth supports wireless data acquisition.
Driver module: VC7055
from quatm.drivers.Voltcraft.multimeter import VC7055

dmm = VC7055(addr="/dev/ttyUSB0")

# Simultaneous two-channel measurement
v1 = dmm.measure_voltage(channel=1)
v2 = dmm.measure_voltage(channel=2)

Device configuration

"daq": {
    "type": "local",
    "module": "drivers.NI.daq",
    "class": "NIDAQ",
    "arguments": {"dev_name": "Dev1", "rate": 100_000},
},
"coil_ps": {
    "type": "local",
    "module": "drivers.ElektroAutomatik.base",
    "class": "PS2000B",
    "arguments": {"conn": "/dev/ttyUSB0", "remote_mode": True},
},
"dmm": {
    "type": "local",
    "module": "drivers.Keithley.multimeter",
    "class": "Keithley2110",
    "arguments": {"addr": "USB0::..."},
},