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 |
驱动模块:
DP1116Afrom 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 (取决于模块) |
niswitch Python API 控制。适用于实验中的信号路由切换、校准多路复用和线圈极性翻转。驱动模块:
ni_switchfrom 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 参数测量 |
nidigital Python API 控制。生成和采集高速数字波形,适用于自定义 TTL 时序协议和芯片级数字测试。驱动模块:
ni_digitalfrom 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/O | TTL, 最高 10 MHz |
| 计数器 | 2–4 通道 |
驱动模块:
NIDAQfrom 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 切换 |
驱动模块:
RelayBoardfrom 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 |
| 功能 | 恒压/恒流/恒功率模式 |
驱动模块:
PS2000Bfrom 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 |
驱动模块:
Keithley2110from 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) |
驱动模块:
VC7055from 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::..."},
},