DAQ 与电源

NI DAQ、Rigol/EA 电源、Keithley/Voltcraft 万用表、示波器等数据采集与电学测量驱动。

概述

数据采集和电源设备是实验自动化的基础设施。Quatm 提供统一的 NI-DAQmx 封装和 SCPI/Modbus 仪器驱动。


Rigol DP1116A 可编程直流电源

⚙️ DP1116A Rigol 直流电源
通信VISA
输出16V/10A 或 32V/5A
通道数1
分辨率1 mV / 1 mA
用于线圈电流控制、激光二极管驱动和电路板供电。
驱动模块: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 限流
ps.enable_output(True)

Rigol DP932 可编程直流电源

用于为各种实验室设备提供可编程直流电源。

from quatm.drivers.rigol.dp932 import RigolDP932

psu = RigolDP932("USB0::...")
psu.set_voltage(1, 5.0)     # 通道 1: 5.0 V
psu.set_current(1, 1.0)     # 通道 1: 1.0 A 限流
psu.output_on(1)

NI-SWITCH 矩阵/多路复用开关

⚙️ PXI-25xx / SCXI-11xx 系列 NI-SWITCH
通信NI-SWITCH API
拓扑矩阵/多路复用/通用
通道取决于模块
切换速度ms 级
最大电压300 V (取决于模块)
NI 开关模块通过 niswitch Python API 控制。适用于实验中的信号路由切换、校准多路复用和线圈极性翻转。
驱动模块: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 数字波形发生器/分析仪

⚙️ PXIe-657x / PXIe-655x 系列 NI-Digital
通信NI-Digital Pattern API
通道32–128
速率最高 200 MHz
电压1.2–5.5 V (可编程)
功能Pattern 生成/采集、PMU 参数测量
NI 数字波形仪器通过 nidigital Python API 控制。生成和采集高速数字波形,适用于自定义 TTL 时序协议和芯片级数字测试。
驱动模块: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 周期数字波形
dig.burst_pattern(pattern, frequency=10e6)

NI-DAQmx 多功能数据采集卡

⚙️ PCIe-63xx / USB-63xx / PXI 系列 NI DAQ
通信NI-DAQmx
模拟输入16-bit, 最高 2 MS/s
模拟输出16-bit
数字 I/OTTL, 最高 10 MHz
计数器2–4 通道
通用多功能数据采集卡,用于模拟信号记录、时序数字 I/O 和光子计数。
驱动模块:NIDAQ
from quatm.drivers.NI.daq import NIDAQ

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

# 模拟输入(连续采集)
daq.configure_ai(channels=["ai0", "ai1"], voltage_range=(-10, 10))
daq.start_ai()
data = daq.read_ai(samples=1000)

# 模拟输出
daq.configure_ao(channels=["ao0"], voltage_range=(0, 5))
daq.write_ao(channel="ao0", voltage=3.3)

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

# 计数器(光子计数 / 频率测量)
daq.configure_counter(
    counter="ctr0",
    mode="edge_count",
    source="PFI0",
)
counts = daq.read_counter("ctr0")

Conrad 继电器板控制器

⚙️ Relay Board Conrad
通信串口 (19200 baud, 二进制协议)
通道每板 8 继电器,支持菊花链
触点AC/DC 切换
经济型多通道继电器控制器,适合粗粒度开关控制:磁阱线圈极性切换、设备供电开关、激光快门控制。
驱动模块:RelayBoard
from quatm.drivers.Conrad.base import RelayBoard

# 单板
rb = RelayBoard(conn="/dev/ttyUSB0", start_addr=0)
rb.set_relay(relay=0, state=True)   # 闭合第 1 个继电器
rb.set_relay(relay=3, state=False)  # 断开第 4 个继电器

# 字节写入(同时控制 8 路)
rb.write_byte(0b10101010)

Elektro Automatik PS2000B 高功率电源

⚙️ PS2000B 系列 Elektro Automatik
通信串口 (115200 baud)
功率640 W – 15 kW (取决于型号)
电压最高 1500 V
电流最高 510 A
功能恒压/恒流/恒功率模式
高功率可编程直流电源,用于磁阱线圈大电流驱动和 Feshbach 共振磁场线圈供电。
驱动模块:PS2000B
from quatm.drivers.ElektroAutomatik.base import PS2000B

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

# 恒流模式 — 磁场线圈
ps.set_current(50.0)      # 50 A
ps.set_voltage_limit(20.0) # 20 V 限压
ps.enable_output(True)

# 读取实际值
actual_v = ps.get_voltage()
actual_i = ps.get_current()

Keithley 2110 台式数字万用表

⚙️ 2110 Keithley
通信VISA (USB/LAN)
功能DCV/ACV/DCI/ACI/电阻/电容/频率/温度
精度5½ 位
采样率最高 50 kS/s
精密台式万用表,用于电学特性表征和传感器校准。
驱动模块:Keithley2110
from quatm.drivers.Keithley.multimeter import Keithley2110

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

# DC 电压测量
voltage = dmm.measure_voltage(range="10V")

# 4 线电阻测量
resistance = dmm.measure_resistance_4wire(range="100Ω")

# 温度(热电偶)
temp = dmm.measure_temperature(tc_type="K")

Voltcraft VC7055 双通道台式万用表

⚙️ VC7055 Voltcraft
通信串口 (115200 baud, SCPI)
通道数2
功能DCV/ACV/DCI/ACI/电阻/频率/电容
蓝牙可选 (VC7055BT)
双通道台式万用表,内置蓝牙的 BT 型号支持无线数据采集。
驱动模块:VC7055
from quatm.drivers.Voltcraft.multimeter import VC7055

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

# 双通道同时测量
v1 = dmm.measure_voltage(channel=1)
v2 = dmm.measure_voltage(channel=2)

设备配置

"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::..."},
},