这是本节的多页打印视图。
点击此处打印.
返回本页常规视图.
设备与驱动
Quatm 原生支持 50+ 品牌、100+ 种实验仪器:涵盖科学相机、信号源、激光器、运动平台、DAQ 与环境监测。
Quatm 通过 configuration/device_db.py 统一管理所有仪器设备,支持三种接入模式。
设备接入模式
| type | 行为 | 适用场景 |
|---|
local | 实例化驱动类,作为完整对象使用 | FPGA 控制器、相机等需要方法调用的设备 |
attr | 将通道映射为 Python 属性 | DAC 输出、TTL 数字信号 |
generic_attr | 调用驱动的任意函数 | DDS 频率设置等灵活映射 |
驱动分类
Quatm 内置 50+ 品牌 的实验仪器驱动,分为以下 7 个类别:
| 类别 | 品牌数 | 典型设备 |
|---|
| 📷 科学相机 | 15 | Andor EMCCD/sCMOS、FLIR Blackfly、Basler、Hamamatsu ORCA、Thorlabs TSI |
| 📡 信号源与射频 | 8 | Valon 5009、DDS AD9959、Agilent 33500、Rigol DG1020Z |
| 🔬 激光器与光学 | 9 | Cobolt、Toptica iBeam、Sirah Matisse、M² Solstis、HighFinesse 波长计 |
| 🎯 运动与定位 | 8 | PI 纳米台、Attocube、Newport Picomotor、Thorlabs APT |
| 🔌 DAQ 与电源 | 9 | NI DAQ/SWITCH/Digital、Rigol DP1116A、EA PS2000B、Keithley 2110、示波器 |
| 🌡️ 环境监测 | 9 | Lakeshore 218、Cryocon、Pfeiffer TPG2xx、Leybold ITR、液氦液位计 |
| ⚡ 实验控制 | 3 | ADwin FPGA、NI-FPGA、Red Pitaya |
属性设备详解
TTLOut — 数字输出
映射硬件控制器的 TTL 通道为实验属性,支持正/反逻辑:
"cooling_aom": {
"type": "attr",
"module": "quatm.experiment.attributes",
"class": "TTLOut",
"arguments": {"channel": 5, "logic": "a"},
}
实验中直接赋值:self.cooling_aom = True
DAC — 模拟输出
映射硬件控制器的 DAC 通道,支持校准曲线:
"trap_x": {
"type": "attr",
"module": "quatm.experiment.attributes",
"class": "DAC",
"arguments": {"channel": 2, "gauge": "gauge-trap-x.txt"},
}
校准文件
非线性设备使用两列文本文件校准。第一列为期望物理量,第二列为实际 DAC 值,系统自动线性插值。
自定义驱动
"my_laser": {
"type": "local",
"module": "my_lab.laser_driver",
"class": "LaserController",
"arguments": {"port": "/dev/ttyUSB0"},
}
通信协议
| 协议 | 典型设备 |
|---|
| VISA / SCPI | 信号发生器、万用表、示波器、电源 |
| 串口 (RS232/RS485) | 激光器、真空计、位移台、温控器 |
| Modbus RTU | Omron/Lumel 温控器 |
| TCP/IP (Telnet/JSON) | M² 激光器、Attocube 控制器 |
| 原生 SDK DLL | Andor、Basler、Hamamatsu 等相机 |
| NI-DAQmx | NI 数据采集卡 |
| USB HID | ANC350 纳米定位器 |
| SPI | AD9959 DDS |
1 - 科学相机
Andor、Basler、Hamamatsu、FLIR 等 15 品牌科学相机与图像采集驱动。
概述
Quatm 为全球 15 个主流科学相机品牌提供统一的 ICamera 接口封装,覆盖 EMCCD、sCMOS、高速 CMOS 和工业相机。
Andor 系列:iXon EMCCD / Zyla sCMOS / Shamrock 光谱仪
概述
Quatm 提供两套 Andor 相机驱动,通过原生 SDK 实现高性能成像控制:
| 驱动类 | SDK | 适用型号 | 接口 |
|---|
AndorSDK2Camera | atmcd32d.dll (SDK2) | iXon EMCCD, Luca, Clara | PCIe / USB |
AndorSDK3Camera | atcore.dll (SDK3) | Zyla, Neo, Marana (sCMOS) | USB3 / CameraLink |
ShamrockSpectrograph | ShamrockCIF.dll | SR-303i, SR-500i 等光谱仪 | USB |
所有类继承自 io.camera 接口,支持 ROI、binning、曝光控制和帧缓冲管理。
Andor SDK2 (EMCCD) AndorSDK2Camera
⚙️
iXon EMCCD
Andor SDK2 系列
| 通信 | DLL (atm32cd32) |
| 读出模式 | EM/传统 |
| ADC 频率 | 1/5/10 MHz |
| 像素深度 | 16-bit |
| 制冷 | TEC(≤ -100°C) |
适用于极低光信号场景(单原子/离子荧光),通过电子倍增(EM Gain)实现单光子级灵敏度。
驱动模块:AndorSDK2Camera
初始化
from quatm.drivers.andor.AndorSDK2 import AndorSDK2Camera
# 连接第一台相机
cam = AndorSDK2Camera(cam_id=0)
# 配置采集参数
cam.setup_acquisition(
exposure=0.1, # 曝光时间 (s)
em_gain=200, # EM 增益 (0-1000)
readout_rate="5MHz",# 读出速率
pre_amp_gain=2, # 前置放大增益
hsspeed=0, # 水平转移速率
temperature=-70, # 目标温度 (°C)
)
# 采集单帧
cam.start_acquisition(nframes=1)
image = cam.read_multiple_images(nframes=1)
关键参数
| 参数 | 说明 | 典型范围 |
|---|
exposure | 单帧曝光时长 | 0.001 – 3600 s |
em_gain | 电子倍增增益 | 0 – 1000(线性或真实增益模式) |
readout_rate | ADC 读出频率 | 1MHz / 5MHz / 10MHz |
temperature | 传感器目标温度 | -60 至 -100°C(取决于冷却器) |
pre_amp_gain | 前置放大器增益 | 1× – 4× |
Andor SDK3 (sCMOS) AndorSDK3Camera
⚙️
Zyla / Neo sCMOS
Andor SDK3 系列
| 通信 | DLL (atcore) |
| 传感器 | sCMOS |
| 接口 | USB3 / CameraLink |
| 像素深度 | 12/16-bit |
| 帧率 | 最高 100 fps(全分辨率) |
适用于快速序列成像和需要大视场的场景。基于 GenAPI 属性模型配置曝光、ROI 和触发。
驱动模块:AndorSDK3Camera
初始化
from quatm.drivers.andor.AndorSDK3 import AndorSDK3Camera
cam = AndorSDK3Camera(cam_id=0)
cam.setup_acquisition(
exposure=0.05,
pixel_format="Mono16",
trigger_mode="Internal",
)
Andor Shamrock 光谱仪 ShamrockSpectrograph
控制光栅选择、中心波长和狭缝宽度:
from quatm.drivers.andor.Shamrock import ShamrockSpectrograph
spec = ShamrockSpectrograph(idx=0)
spec.set_wavelength(780.24) # 中心波长 (nm)
spec.set_grating(2) # 选择光栅
spec.set_slit_width(50, port=1) # 入口狭缝 (µm)
设备配置
"emccd": {
"type": "local",
"module": "drivers.andor.AndorSDK2",
"class": "AndorSDK2Camera",
"arguments": {"cam_id": 0},
}
校准提示
EMCCD 增益需针对定量荧光测量进行校准。过高增益会引入时钟感应电荷(CIC)噪声和非线性。建议使用荧光珠或标准光源建立增益-信号关系曲线。
FLIR / Teledyne / Blackfly S / Grasshopper3
概述
Quatm 通过 TeledyneSpinnakerCamera 类封装 Spinnaker SDK,支持所有兼容 GenICam/GenAPI 的 FLIR/Teledyne USB3/GigE 相机。
⚙️
Blackfly S / Grasshopper3
FLIR Spinnaker 系列
| 通信 | Spinnaker SDK |
| 接口 | USB3 / GigE |
| 像素格式 | Mono8/16, Bayer |
| 触发 | 硬件/软件 |
| 帧率 | 取决于型号 |
用于实验室通用成像:MOT 监测、对准光束成像、设备状态监控。
驱动模块:TeledyneSpinnakerCamera
初始化
from quatm.drivers.teledyne.spinnaker import TeledyneSpinnakerCamera
# 列出所有可用相机
cam_list = TeledyneSpinnakerCamera.list_cameras()
# 连接指定相机(序列号或索引)
cam = TeledyneSpinnakerCamera(cam_id="serial_xxx")
# 或使用索引
cam = TeledyneSpinnakerCamera(cam_id=0)
# 配置并开始采集
cam.setup_acquisition(
exposure=0.02, # 20 ms 曝光
pixel_format="Mono8",
width=1920, height=1200,
offset_x=0, offset_y=0,
)
关键方法
| 方法 | 说明 |
|---|
list_cameras() | 枚举系统中所有 Spinnaker 相机 |
setup_acquisition(**kwargs) | 配置 ROI、曝光、像素格式等 |
start_acquisition(nframes) | 开始采集指定帧数 |
read_multiple_images(nframes) | 读取已采集图像 |
get_device_info() | 获取相机序列号、型号、固件版本 |
常用属性操作
通过 GenAPI 节点名称直接读写相机参数:
# 设置增益
cam.set_attribute("Gain", 10.0)
# 启用自动曝光
cam.set_attribute("ExposureAuto", "Continuous")
# 获取传感器温度
temp = cam.get_attribute("DeviceTemperature")
设备配置
"monitor_cam": {
"type": "local",
"module": "drivers.teledyne.spinnaker",
"class": "TeledyneSpinnakerCamera",
"arguments": {"cam_id": 0},
}
多相机同步
Spinnaker SDK 支持多相机硬件触发同步。设置 TriggerMode = On 和 TriggerSource = Line0 即可通过外部 TTL 信号实现纳秒级同步曝光。stop(): Stop capturing images.
quatm.drivers.blackfly.bfly.Camserver(name, serial)
class quatm.drivers.blackfly.bfly.Camserver(object):
def __init__(self, name, serial):
pass
def generateImageIndex(self):
pass
def run(self):
pass
def sendimage(self, im):
pass
def updateBusInfo(self):
pass
generateImageIndex(): In the current measurement, count the images. If the next run has started (either task, repetition or run changes), reset the counter (imgindex).
run(): Run loop running forever. Sends images from the camera to the imagestream and initiates reconfiguration of the camera in case properties have changed.
sendimage(im): Send Blackfly camera image via the imagestream. The image is converted to numpy array, additional information like binning, timestamp, etc., is added to a dictionary and both are sent to the imagestream.
- Args:
im - Blackfly image object. - Returns:
None
updateBusInfo(): Detect cameras on the bus and update info in properties if new camera has been found.
quatm.drivers.blackfly.bfly.pc2
class quatm.drivers.blackfly.bfly.pc2(object):
pass
- Dummy class in case driver is not installed.
Function:
Thorlabs TSI / uc480 科学相机
TLCamera ThorlabsTLCamera
⚙️
TSI 系列
Thorlabs 科学相机
| 通信 | TLCamera SDK |
| 接口 | USB3 |
| 传感器 | sCMOS / CCD |
| 支持 | ROI, binning |
适用于 SDK 级控制的高帧率科学成像。
驱动模块:ThorlabsTLCamera
from quatm.drivers.thorlabs.TLCamera import ThorlabsTLCamera
cam = ThorlabsTLCamera(serial="12345678")
cam.setup_acquisition(exposure=0.01, width=1024, height=768)
概述
Quatm 为全球 15 个主流科学相机品牌提供统一的 io.camera 接口封装,覆盖 EMCCD、sCMOS、高速 CMOS 和工业相机。所有驱动通过原生 SDK 实现高性能采集。
Andor 系列:EMCCD / sCMOS / 光谱仪
概述
Quatm 提供两套 Andor 相机驱动,通过原生 SDK 实现高性能成像控制:
| 驱动类 | SDK | 适用型号 | 接口 |
|---|
AndorSDK2Camera | atmcd32d.dll (SDK2) | iXon EMCCD, Luca, Clara | PCIe / USB |
AndorSDK3Camera | atcore.dll (SDK3) | Zyla, Neo, Marana (sCMOS) | USB3 / CameraLink |
ShamrockSpectrograph | ShamrockCIF.dll | SR-303i, SR-500i 等光谱仪 | USB |
所有类继承自 io.camera 接口,支持 ROI、binning、曝光控制和帧缓冲管理。
Andor SDK2 (EMCCD) AndorSDK2Camera
⚙️
iXon EMCCD
Andor SDK2 系列
| 通信 | DLL (atm32cd32) |
| 读出模式 | EM/传统 |
| ADC 频率 | 1/5/10 MHz |
| 像素深度 | 16-bit |
| 制冷 | TEC(≤ -100°C) |
适用于极低光信号场景(单原子/离子荧光),通过电子倍增(EM Gain)实现单光子级灵敏度。
驱动模块:AndorSDK2Camera
初始化
from quatm.drivers.andor.AndorSDK2 import AndorSDK2Camera
# 连接第一台相机
cam = AndorSDK2Camera(cam_id=0)
# 配置采集参数
cam.setup_acquisition(
exposure=0.1, # 曝光时间 (s)
em_gain=200, # EM 增益 (0-1000)
readout_rate="5MHz",# 读出速率
pre_amp_gain=2, # 前置放大增益
hsspeed=0, # 水平转移速率
temperature=-70, # 目标温度 (°C)
)
# 采集单帧
cam.start_acquisition(nframes=1)
image = cam.read_multiple_images(nframes=1)
关键参数
| 参数 | 说明 | 典型范围 |
|---|
exposure | 单帧曝光时长 | 0.001 – 3600 s |
em_gain | 电子倍增增益 | 0 – 1000(线性或真实增益模式) |
readout_rate | ADC 读出频率 | 1MHz / 5MHz / 10MHz |
temperature | 传感器目标温度 | -60 至 -100°C(取决于冷却器) |
pre_amp_gain | 前置放大器增益 | 1× – 4× |
Andor SDK3 (sCMOS) AndorSDK3Camera
⚙️
Zyla / Neo sCMOS
Andor SDK3 系列
| 通信 | DLL (atcore) |
| 传感器 | sCMOS |
| 接口 | USB3 / CameraLink |
| 像素深度 | 12/16-bit |
| 帧率 | 最高 100 fps(全分辨率) |
适用于快速序列成像和需要大视场的场景。基于 GenAPI 属性模型配置曝光、ROI 和触发。
驱动模块:AndorSDK3Camera
初始化
from quatm.drivers.andor.AndorSDK3 import AndorSDK3Camera
cam = AndorSDK3Camera(cam_id=0)
cam.setup_acquisition(
exposure=0.05,
pixel_format="Mono16",
trigger_mode="Internal",
)
Andor Shamrock 光谱仪 ShamrockSpectrograph
控制光栅选择、中心波长和狭缝宽度:
from quatm.drivers.andor.Shamrock import ShamrockSpectrograph
spec = ShamrockSpectrograph(idx=0)
spec.set_wavelength(780.24) # 中心波长 (nm)
spec.set_grating(2) # 选择光栅
spec.set_slit_width(50, port=1) # 入口狭缝 (µm)
设备配置
"emccd": {
"type": "local",
"module": "drivers.andor.AndorSDK2",
"class": "AndorSDK2Camera",
"arguments": {"cam_id": 0},
}
校准提示
EMCCD 增益需针对定量荧光测量进行校准。过高增益会引入时钟感应电荷(CIC)噪声和非线性。建议使用荧光珠或标准光源建立增益-信号关系曲线。
FLIR / Teledyne Spinnaker 系列
概述
Quatm 通过 TeledyneSpinnakerCamera 类封装 Spinnaker SDK,支持所有兼容 GenICam/GenAPI 的 FLIR/Teledyne USB3/GigE 相机。
⚙️
Blackfly S / Grasshopper3
FLIR Spinnaker 系列
| 通信 | Spinnaker SDK |
| 接口 | USB3 / GigE |
| 像素格式 | Mono8/16, Bayer |
| 触发 | 硬件/软件 |
| 帧率 | 取决于型号 |
用于实验室通用成像:MOT 监测、对准光束成像、设备状态监控。
驱动模块:TeledyneSpinnakerCamera
初始化
from quatm.drivers.teledyne.spinnaker import TeledyneSpinnakerCamera
# 列出所有可用相机
cam_list = TeledyneSpinnakerCamera.list_cameras()
# 连接指定相机(序列号或索引)
cam = TeledyneSpinnakerCamera(cam_id="serial_xxx")
# 或使用索引
cam = TeledyneSpinnakerCamera(cam_id=0)
# 配置并开始采集
cam.setup_acquisition(
exposure=0.02, # 20 ms 曝光
pixel_format="Mono8",
width=1920, height=1200,
offset_x=0, offset_y=0,
)
关键方法
| 方法 | 说明 |
|---|
list_cameras() | 枚举系统中所有 Spinnaker 相机 |
setup_acquisition(**kwargs) | 配置 ROI、曝光、像素格式等 |
start_acquisition(nframes) | 开始采集指定帧数 |
read_multiple_images(nframes) | 读取已采集图像 |
get_device_info() | 获取相机序列号、型号、固件版本 |
常用属性操作
通过 GenAPI 节点名称直接读写相机参数:
# 设置增益
cam.set_attribute("Gain", 10.0)
# 启用自动曝光
cam.set_attribute("ExposureAuto", "Continuous")
# 获取传感器温度
temp = cam.get_attribute("DeviceTemperature")
设备配置
"monitor_cam": {
"type": "local",
"module": "drivers.teledyne.spinnaker",
"class": "TeledyneSpinnakerCamera",
"arguments": {"cam_id": 0},
}
多相机同步
Spinnaker SDK 支持多相机硬件触发同步。设置 TriggerMode = On 和 TriggerSource = Line0 即可通过外部 TTL 信号实现纳秒级同步曝光。stop(): Stop capturing images.
quatm.drivers.blackfly.bfly.Camserver(name, serial)
class quatm.drivers.blackfly.bfly.Camserver(object):
def __init__(self, name, serial):
pass
def generateImageIndex(self):
pass
def run(self):
pass
def sendimage(self, im):
pass
def updateBusInfo(self):
pass
generateImageIndex(): In the current measurement, count the images. If the next run has started (either task, repetition or run changes), reset the counter (imgindex).
run(): Run loop running forever. Sends images from the camera to the imagestream and initiates reconfiguration of the camera in case properties have changed.
sendimage(im): Send Blackfly camera image via the imagestream. The image is converted to numpy array, additional information like binning, timestamp, etc., is added to a dictionary and both are sent to the imagestream.
- Args:
im - Blackfly image object. - Returns:
None
updateBusInfo(): Detect cameras on the bus and update info in properties if new camera has been found.
quatm.drivers.blackfly.bfly.pc2
class quatm.drivers.blackfly.bfly.pc2(object):
pass
- Dummy class in case driver is not installed.
Function:
Thorlabs TSI / uc480
Thorlabs 科学相机
Quatm 支持多类 Thorlabs 设备,包含位移台、光学测量仪器与相机。
TLCamera 科学相机 ThorlabsTLCamera
⚙️
TSI 系列
Thorlabs 科学相机
| 通信 | TLCamera SDK |
| 接口 | USB3 |
| 传感器 | sCMOS / CCD |
| 支持 | ROI, binning |
适用于需要 SDK 级别控制的高帧率科学成像。
驱动模块:ThorlabsTLCamera
from quatm.drivers.thorlabs.TLCamera import ThorlabsTLCamera
cam = ThorlabsTLCamera(serial="12345678")
---
## Basler — Pylon SDK 系列
⚙️
Basler ace / dart
Pylon SDK 系列
| 通信 |
Pylon SDK (GenICam) |
| 接口 |
USB3 / GigE |
| 传感器 |
CMOS |
| 像素格式 |
Mono8/16, Bayer |
| 功能 |
ROI, Binning, 硬件触发 |
工业级 CMOS 相机,适合 MOT 荧光监测、对准光束成像等常规实验室成像任务。
驱动模块:BaslerPylonCamera
```python
from quatm.drivers.Basler.pylon import BaslerPylonCamera
# 枚举全部相机
cams = BaslerPylonCamera.list_cameras()
cam = BaslerPylonCamera(cam_id=cams[0])
cam.setup_acquisition(exposure=0.02)
cam.start_acquisition(nframes=1)
Hamamatsu ORCA 系列 sCMOS
⚙️
ORCA-Fusion / ORCA-Flash4.0
Hamamatsu DCAM
| 通信 | DCAM SDK (DLL) |
| 传感器 | sCMOS |
| 像素 | 2048×2048 (Fusion) |
| 帧率 | 最高 100 fps |
| 读出噪声 | < 1.6 e⁻ |
超低噪声 sCMOS,适用于单原子/单离子荧光定量成像。
驱动模块:DCAMCamera
from quatm.drivers.DCAM.DCAM import DCAMCamera
cam = DCAMCamera(idx=0)
cam.setup_acquisition(exposure=0.1, pixel_format="Mono16")
Photometrics Prime / Evolve 系列
⚙️
Prime BSI / Evolve EMCCD
Photometrics PVCAM
| 通信 | PVCAM SDK (DLL) |
| 传感器 | 背照式 sCMOS / EMCCD |
| 接口 | PCIe / USB3 |
| 像素深度 | 16-bit |
背照式 sCMOS 提供高量子效率;EMCCD 型号支持单光子灵敏度。
驱动模块:PVCAMCamera
from quatm.drivers.Photometrics.pvcam import PVCAMCamera
cam = PVCAMCamera(cam_name="Prime_BSI_95B")
cam.setup_acquisition(exposure=0.05)
Princeton Instruments PIXIS / ProEM
⚙️
PIXIS / ProEM / IsoPlane
Princeton PICam
| 通信 | PICam SDK (DLL) |
| 传感器 | CCD / EMCCD |
| 制冷 | 液氮 / TEC |
| 接口 | PCIe / USB |
光谱学级 CCD/EMCCD,常与 Acton/IsoPlane 光谱仪配合使用。
驱动模块:PicamCamera
from quatm.drivers.PrincetonInstruments.picam import PicamCamera
cam = PicamCamera(cam_id=0)
cam.setup_acquisition(exposure=1.0) # 长曝光光谱采集
PCO edge / dimax 高速相机
⚙️
edge / dimax / pco.panda
PCO SC2
| 通信 | SC2 SDK (DLL) |
| 接口 | CameraLink HS / USB3 / GigE |
| 帧率 | 最高数千 fps |
| 传感器 | sCMOS / 高速 CMOS |
适合快速动力学过程:MOT 装载动态、离子晶体重排实时观测。
驱动模块:PCOSC2Camera
from quatm.drivers.PCO.SC2 import PCOSC2Camera
cam = PCOSC2Camera(interface="USB 3.0")
cam.setup_acquisition(exposure=0.001) # 1 ms 高速采集
Allied Vision Alvium / Mako
⚙️
Alvium / Mako / Bonito
Allied Vision Vimba X
| 通信 | VimbaX SDK (GenICam) |
| 接口 | USB3 / GigE / CameraLink |
| 传感器 | CMOS |
紧凑型工业相机,适合空间受限的光路集成。
驱动模块:AlliedVisionVimbaXCamera
from quatm.drivers.AlliedVision.VimbaX import AlliedVisionVimbaXCamera
cam = AlliedVisionVimbaXCamera(cam_id=0)
IDS uEye+ / Ensenso
⚙️
uEye+ / Ensenso 3D
IDS peak
| 通信 | IDS peak SDK |
| 接口 | USB3 / GigE |
| 传感器 | CMOS |
通用 USB/GigE 相机,包括 Ensenso 3D 立体相机。
驱动模块:GenericIDSPeakCamera
from quatm.drivers.IDS.peak import GenericIDSPeakCamera
cam = GenericIDSPeakCamera(cam_id=0)
通用配置范式
所有相机通过 device_db.py 以 type: "local" 注册:
"imaging_cam": {
"type": "local",
"module": "drivers.Basler.pylon",
"class": "BaslerPylonCamera",
"arguments": {"cam_id": 0},
}
帧采集卡
对于 Camera Link 接口的相机,Quatm 还内置 NI IMAQ、BitFlow 和 Silicon Software 帧采集卡驱动,用法与相机驱动一致:所有采集卡同样继承 io.camera 接口。2 - 信号源与射频
Valon 5009、DDS AD9959、Agilent、Rigol 等频率合成器与射频仪器驱动。
概述
Quatm 支持从通用函数发生器到矢量网络分析仪的多种射频仪器,涵盖频率合成、任意波形和 S 参数测量。
Valon 5009 双通道微波频率合成器
概述
Valon 5009 是一款双通道频率合成器(23.5 MHz – 6 GHz),通过串口控制。Quatm 通过 valon 封装,支持独立设置两路输出频率和功率。
⚙️
Valon 5009
Dual RF Synthesizer
| 通信 | 串口 (RS232) |
| 频率范围 | 23.5 MHz – 6 GHz |
| 通道数 | 2 |
| 输出功率 | -30 ~ +10 dBm |
| 频率分辨率 | 0.1 Hz |
广泛应用于离子阱实验中驱动微波跃迁(如 Ba⁺ 9.9 GHz 超精细跃迁)或作为 AOM 驱动源。
驱动模块:valon
初始化
from quatm.drivers.valon.valon_quatm import valon
# 连接 Valon(默认 /dev/ttyUSB0)
valon = valon(port="/dev/ttyUSB0")
# 设置通道 1 频率为 500 MHz
valon.set_frequency(freq=500e6, source=1)
# 设置通道 2 频率为 9.925 GHz(需外部倍频)
valon.set_frequency(freq=9.925e9, source=2)
# 发送原始指令
valon.sendRaw("LOCK 1 ON\r\n")
关键方法
| 方法 | 说明 |
|---|
set_frequency(freq, source) | 设置通道 1 或 2 输出频率 (Hz) |
sendCommand(source, command, value) | 发送格式化 SCPI 命令 |
sendRaw(cmd) | 发送原始字符串命令 |
串口通信
Valon 驱动底层通过 VSerialPort(serial.Serial 子类)通信,典型参数:
# 串口参数(驱动默认)
port = "/dev/ttyUSB0"
baudrate = 115200
timeout = 0.1
使用 Valon 5009 驱动 9.925 GHz 超精细跃迁,扫描频率测量 Rabi 振荡。
关键参数
| 起始频率 | 9.924 GHz |
| 终止频率 | 9.926 GHz |
| 步进 | 10 kHz |
| 每点重复 | 100 次 |
# 实验片段:频率扫描
import numpy as np
frequencies = np.arange(9.924e9, 9.926e9, 10e3)
for f in frequencies:
valon.set_frequency(freq=f, source=2)
# ... 执行探测序列 ...
参考:参见离子阱实验 → 量子态检测
频率精度
Valon 5009 内部参考频率稳定性有限。对于高精度光谱或量子操控实验,建议:
- 外接 10 MHz 铷钟参考信号
- 或使用 HighFinesse 波长计 / 频谱分析仪实时监测输出频率
class quatm.drivers.valon.valon_prog.Valon_Standalone(name='Valon')
Bases: object
Standalone driver for the Valon frequency generator. Commands can be sent via the Commandhub and are processed in parallel to the experiment, thereby the experiment is not delayed by the Valon.
function quatm.drivers.valon.valon_prog.run()
DDS AD9959 四通道直接数字合成
概述
AD9959 驱动封装 AD9959 评估板,通过 SPI 总线控制 4 个独立 DDS 通道,实现精密频率、幅度和相位控制。
⚙️
AD9959 评估板
4 通道 DDS
| 通信 | SPI |
| 通道数 | 4 |
| 频率分辨率 | 32-bit (0.12 Hz @ 500 MHz 时钟) |
| 相位分辨率 | 14-bit |
| 幅度控制 | 10-bit DAC |
广泛应用于冷原子/离子实验中的 AOM 驱动、边带生成和相干操控。
驱动模块:AD9959
初始化
from quatm.drivers.dds import AD9959
dds = AD9959()
# 配置通道 0 — 冷却光 AOM
dds.set_frequency(0, 80e6) # 80 MHz
dds.set_amplitude(0, 0.5) # 50% 幅度
dds.set_phase(0, 0) # 0° 相位
# 配置通道 1 — 再泵浦光 AOM(+0.1 MHz 差频)
dds.set_frequency(1, 80.1e6)
dds.set_amplitude(1, 0.3)
关键方法
| 方法 | 说明 |
|---|
set_frequency(ch, freq_hz) | 设置通道频率 (Hz) |
set_amplitude(ch, amp) | 设置通道幅度 (0–1 分数) |
set_phase(ch, phase_deg) | 设置通道相位 (°) |
update_all() | 一次性更新所有通道 |
同步更新
AD9959 支持同步更新模式:先对 4 个通道分别调用 set_* 方法(缓冲区),再调用 update_all() 统一写入硬件。这确保了多通道之间的相位一致性,对边带冷却等需要精确相位关系的实验至关重要。设备配置
"aom_dds": {
"type": "local",
"module": "drivers.DDS",
"class": "AD9959",
}
dds.set_amplitude(1, 0.5)
## 典型应用
| 应用 | 配置 |
|------|------|
| AOM 驱动 | 单通道固定频率 |
| 拉曼跃迁 | 双通道差频锁定 |
| 阱驱动 | 多通道相位控制 |
| 边带冷却 | 频率调制 |
## 替代驱动
还提供基于串口(AT 命令)接口的 AD9959 板替代驱动:
```python
from quatm.drivers.dds.alibaba import AD9959Board
Rigol DG1020Z 双通道函数发生器
DG1020Z
⚙️
DG1020Z
Rigol 函数发生器
| 通信 | VISA (USB/LAN) |
| 通道数 | 2 |
| 频率范围 | 1 µHz – 25 MHz |
| 幅度 | 1 mVpp – 10 Vpp |
| 采样率 | 200 MSa/s |
用于生成 AOM/EOM 驱动信号、调制波形和自定义任意波形。
驱动模块:RigolDG1020Z
from quatm.drivers.AWG.specific import RigolDG1020Z
fg = RigolDG1020Z(addr="USB0::...")
fg.set_frequency(80e6)
fg.set_amplitude(1.0) # 1.0 Vpp
fg.enable_output(channel=1, enable=True)
fg.set_function(channel=1, function="SIN")
=== Agilent 信号源扩展内容 ===
DDS AD9959
概述
AD9959 驱动封装 AD9959 评估板,通过 SPI 总线控制 4 个独立 DDS 通道,实现精密频率、幅度和相位控制。
⚙️
AD9959 评估板
4 通道 DDS
| 通信 | SPI |
| 通道数 | 4 |
| 频率分辨率 | 32-bit (0.12 Hz @ 500 MHz 时钟) |
| 相位分辨率 | 14-bit |
| 幅度控制 | 10-bit DAC |
广泛应用于冷原子/离子实验中的 AOM 驱动、边带生成和相干操控。
驱动模块:AD9959
初始化
dds = AD9959()
# 配置通道 0 — 冷却光 AOM
dds.set_frequency(0, 80e6) # 80 MHz
dds.set_amplitude(0, 0.5) # 50% 幅度
dds.set_phase(0, 0) # 0° 相位
# 配置通道 1 — 再泵浦光 AOM(+0.1 MHz 差频)
dds.set_frequency(1, 80.1e6)
dds.set_amplitude(1, 0.3)
关键方法
| 方法 | 说明 |
|---|
set_frequency(ch, freq_hz) | 设置通道频率 (Hz) |
set_amplitude(ch, amp) | 设置通道幅度 (0–1 分数) |
set_phase(ch, phase_deg) | 设置通道相位 (°) |
update_all() | 一次性更新所有通道 |
同步更新
AD9959 支持同步更新模式:先对 4 个通道分别调用 set_* 方法(缓冲区),再调用 update_all() 统一写入硬件。这确保了多通道之间的相位一致性,对边带冷却等需要精确相位关系的实验至关重要。设备配置
"aom_dds": {
"type": "local",
"module": "drivers.DDS",
"class": "AD9959",
}
dds.set_amplitude(1, 0.5)
## 典型应用
| 应用 | 配置 |
|------|------|
| AOM 驱动 | 单通道固定频率 |
| 拉曼跃迁 | 双通道差频锁定 |
| 阱驱动 | 多通道相位控制 |
| 边带冷却 | 频率调制 |
## 替代驱动
还提供基于串口(AT 命令)接口的 AD9959 板替代驱动:
```python
Rigol DG1020Z
DG1020Z 双通道函数/任意波形发生器
⚙️
DG1020Z
Rigol 函数发生器
| 通信 | VISA (USB/LAN) |
| 通道数 | 2 |
| 频率范围 | 1 µHz – 25 MHz |
| 幅度 | 1 mVpp – 10 Vpp |
| 采样率 | 200 MSa/s |
用于生成 AOM/EOM 驱动信号、调制波形和自定义任意波形。
驱动模块:RigolDG1020Z
from quatm.drivers.awg.specific import RigolDG1020Z
fg = RigolDG1020Z(addr="USB0::0x1AB1::0x0642::DG1ZA123456789::INSTR")
fg.set_frequency(80e6) # 80 MHz
fg.set_amplitude(1.0) # 1.0 Vpp
fg.enable_output(channel=1, enable=True)
fg.set_function(channel=1, function="SIN")
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 DS 系列示波器兼容 Tektronix SCPI 指令集,通过 ITektronixScope 驱动控制:
from quatm.drivers.tektronix.base import ITektronixScope
scope = ITektronixScope(addr="USB0::0x1AB1::0x04CE::DS123456789::INSTR", nchannels=4)
scope.set_timebase(scale=1e-6) # 1 µs/div
scope.set_vertical(channel=1, scale=0.5) # 0.5 V/div
waveform = scope.acquire(channel=1)
关键方法(信号发生器)
Agilent / Keysight 33500 系列任意波形发生器
⚙️
33500B / 33220A / 33250A
Agilent/Keysight
| 通信 | VISA (USB/LAN/GPIB) |
| 通道数 | 1–2 |
| 频率 | 最高 120 MHz (33500B) |
| 分辨率 | 14-bit |
| 采样率 | 250 MSa/s |
| 波形 | 正弦/方波/锯齿/脉冲/噪声/ARB |
实验室标准信号源,用于 AOM 驱动、调制信号和参考时钟生成。
驱动模块:Agilent33500 / Agilent33220A
from quatm.drivers.awg.specific import Agilent33500
awg = Agilent33500(addr="USB0::0x0957::0x2C07::MY52801234::INSTR")
# 配置 80 MHz 正弦波
awg.set_function(channel=1, function="SIN")
awg.set_frequency(80e6)
awg.set_amplitude(1.0) # 1 Vpp
awg.enable_output(channel=1, enable=True)
# 脉冲串模式 — 生成 N 个周期后自动关闭
awg.enable_burst(channel=1, ncycles=100)
支持型号
| 驱动类 | 适用型号 |
|---|
Agilent33500 | 33500B、33510B、33520B、33522B |
Agilent33220A | 33220A、33250A |
RigolDG1000 | DG1022、DG1032 |
RigolDG1020Z | DG1022Z、DG1032Z |
Instek AFG2000 / AFG2225 双通道
⚙️
AFG-2225 / AFG-2100
Instek
| 通信 | VISA |
| 通道数 | 1 (AFG2000) / 2 (AFG2225) |
| 频率 | 最高 25 MHz |
| 采样率 | 200 MSa/s |
性价比高的双通道任意波形发生器。
驱动模块:InstekAFG2225 / InstekAFG2000
from quatm.drivers.awg.specific import InstekAFG2225
awg = InstekAFG2225(addr="USB0::...")
awg.set_frequency(10e6)
awg.set_amplitude(2.0)
awg.enable_output(channel=1, enable=True)
awg.enable_output(channel=2, enable=True)
Tektronix AFG1000 任意波形发生器
⚙️
AFG1022 / AFG1062
Tektronix
| 通信 | VISA |
| 通道数 | 2 |
| 频率 | 最高 60 MHz (AFG1062) |
| 采样率 | 300 MSa/s |
| 任意波形 | 64 MB 存储 |
双通道高性能 AWG,支持大容量自定义波形。
驱动模块:TektronixAFG1000
from quatm.drivers.awg.specific import TektronixAFG1000
awg = TektronixAFG1000(addr="USB0::...")
awg.set_function(channel=1, function="ARB")
# 加载自定义波形...
Tektronix DPO/MSO 系列示波器
⚙️
DPO2000 / MSO4000 系列
Tektronix 示波器
| 通信 | VISA |
| 带宽 | 100 MHz – 1 GHz |
| 通道数 | 2–4 |
| 采样率 | 最高 5 GS/s |
通过 SCPI 自动化波形采集和参数测量。常用于实验调试和脉冲序列验证。
驱动模块:ITektronixScope
from quatm.drivers.tektronix.base import ITektronixScope
scope = ITektronixScope(
addr="USB0::0x0699::0x0401::C012345::INSTR",
nchannels=4
)
# 配置触发
scope.set_trigger(source=1, level=0.5, slope="POS")
scope.set_timebase(scale=1e-6) # 1 µs/div
scope.set_vertical(channel=1, scale=0.1) # 0.1 V/div
# 采集波形
waveform = scope.acquire(channel=1)
Agilent E5071C 矢量网络分析仪
⚙️
E5071C
Agilent VNA
| 通信 | VISA |
| 频率 | 9 kHz – 20 GHz |
| 端口 | 2–4 |
| 功能 | S 参数、阻抗、史密斯圆图 |
用于 RF 器件特性表征:滤波器、放大器、天线和传输线的 S 参数测量。
驱动模块:AgilentE5071C
from quatm.drivers.Agilent.vna import AgilentE5071C
vna = AgilentE5071C(addr="TCPIP::192.168.1.100::INSTR")
vna.set_frequency_range(start=1e6, stop=1e9, points=1001)
vna.set_if_bandwidth(100) # 100 Hz IFBW
vna.set_averaging(count=10)
# 读取 S21 参数
freq, s21 = vna.read_S_parameters(parameter="S21")
PicoVNA 便携式矢量网络分析仪
⚙️
PicoVNA
Pico Technology
| 通信 | TCP/SCPI (端口 5025) |
| 频率 | 300 kHz – 8.5 GHz |
| 端口 | 2 |
| 动态范围 | 100 dB
|
紧凑型 USB 控制 VNA,适合实验室桌面 RF 调试。
驱动模块:PicoVNA
from quatm.drivers.PicoTech.vna_scpi import PicoVNA
vna = PicoVNA(addr="localhost") # 或 IP 地址
vna.set_frequency_range(start=10e6, stop=500e6)
s_params = vna.read_S_parameters(parameter="S21")
通用 SCPI 设备配置
"function_gen": {
"type": "local",
"module": "drivers.awg.specific",
"class": "Agilent33500",
"arguments": {"addr": "USB0::..."},
}
3 - 激光器与光学
Cobolt、Toptica、Sirah Matisse、M² Solstis、HighFinesse 波长计等激光器与光学测量驱动。
概述
Quatm 支持半导体激光器、泵浦激光器、可调谐环形激光器及光学测量仪器。激光器类设备通过串口控制;SCPI 仪器继承标准接口。
概述
Quatm 支持半导体激光器、泵浦激光器、可调谐环形激光器及光学测量仪器。激光器类设备通过串口和SCPI协议通信。
Hubner Cobolt MLD / DPL 单频激光器
⚙️
Cobolt 06-01 系列
Hubner Cobolt
| 通信 | 串口 (115200 baud) |
| 波长 | 405/445/488/515/532/561/594/633/660/780/1064 nm |
| 功率 | 25–300 mW |
| 调制 | 模拟 + 数字 TTL (高达 5 MHz) |
紧凑型 DPSS/半导体激光器,适合离子/原子冷却光、再泵浦光和荧光激发。
驱动模块:Cobolt
from quatm.drivers.Hubner.Cobolt import Cobolt
laser = Cobolt(conn="/dev/ttyUSB0")
# 开启激光
laser.set_autostart(True)
laser.set_power(50e-3) # 50 mW
# 数字调制(TTL)
laser.set_digital_modulation(True)
laser.set_modulation_power(100e-3) # 调制时的高功率
# 读取运行参数
hours = laser.get_operating_hours()
temp = laser.get_base_temperature()
Toptica iBeam 智能半导体激光器
⚙️
iBeam 系列
Toptica
| 通信 | 串口 (115200 baud) |
| 波长 | 375–1550 nm |
带内置控制器的智能激光头,支持自动电流/功率校准和状态诊断。
驱动模块:TopticaIBeam
from quatm.drivers.Toptica.ibeam import TopticaIBeam
laser = TopticaIBeam(conn="/dev/ttyUSB0")
laser.set_power(channel=0, power=10e-3)
laser.enable(channel=0, enable=True)
Laser Quantum Finesse 泵浦激光器
⚙️
Finesse
Laser Quantum
| 通信 | 串口 (19200 baud) |
| 功率 | 4–16 W (532 nm) |
| 噪声 | < 0.1% RMS |
| 应用 | 钛宝石/染料激光器泵浦 |
超低噪声连续波 DPSS 激光器,用于泵浦 Sirah Matisse 等可调谐环形激光器。
驱动模块:Finesse
from quatm.drivers.LaserQuantum.base import Finesse
pump = Finesse(conn="/dev/ttyUSB0")
pump.set_power(10.0) # 10 W
pump.enable(True)
actual_power = pump.get_power()
Lighthouse Photonics Sprout G
⚙️
Sprout G
Lighthouse Photonics
| 通信 | 串口 (19200 baud) |
| 波长 | 532 nm |
| 功率 | 6–18 W |
| 噪声 | < 0.2% RMS |
高功率 532 nm 固态泵浦激光器,适用于钛宝石激光器和光偶极阱。
驱动模块:SproutG
from quatm.drivers.LighthousePhotonics.base import SproutG
sprout = SproutG(conn="/dev/ttyUSB0")
sprout.set_power(15.0)
sprout.enable(True)
Sirah Matisse 可调谐环形激光器
⚙️
Matisse
Sirah Lasertechnik
| 通信 | VISA 或 TCP/IP |
| 波长范围 | 可见光–近红外 (取决于染料/钛宝石) |
| 线宽 | < 50 kHz (锁定) |
| 调谐元件 | 双折射滤波器 + 薄/厚标准具 + 压电 |
精密可调谐环形激光器系统。
MatisseTuner 协调激光器与 HighFinesse 波长计,实现自动波长调谐和扫描拼接。
驱动模块:SirahMatisse / MatisseTuner
from quatm.drivers.Sirah.Matisse import SirahMatisse
matisse = SirahMatisse(addr="TCPIP::192.168.1.10::INSTR")
# 设置波长
matisse.set_birefringent_filter(wavelength=780.24) # nm
matisse.set_thin_etalon(wavelength=780.24)
matisse.set_thick_etalon(wavelength=780.24)
# 压电扫描
matisse.set_piezo_voltage(50.0) # 0–100 V
# 自动调谐(需配合波长计)
from quatm.drivers.Sirah.tuner import MatisseTuner
tuner = MatisseTuner(laser=matisse, wavemeter=wlm)
tuner.tune_to(wavelength=780.24) # 自动搜索并锁定
tuner.scan(start=780.20, stop=780.30, speed=0.01) # nm/s
M² Solstis 窄线宽可调谐激光器
⚙️
Solstis
M² Lasers
| 通信 | TCP/IP JSON + WebSocket |
| 波长范围 | 700–1000 nm (钛宝石) |
| 线宽 | < 50 kHz |
| 功能 | 标准具锁定、腔参考锁定、波长计反馈 |
全数字可调谐激光系统,通过 TCP/IP JSON 接口完全远程控制。支持 WebSocket 实时状态流。
驱动模块:Solstis (ICE Bloc)
from quatm.drivers.M2.solstis import Solstis
solstis = Solstis(addr="192.168.1.20", port=8080)
# 波长调谐
solstis.set_wavelength(780.24)
# 标准具锁定
solstis.lock_etalon()
# 太赫兹扫描(与 EMM 模块配合)
solstis.set_terahertz_scan(start_freq=0, stop_freq=100e9)
光功率计 & 波长计
Thorlabs PM100/PM400 光功率计
Thorlabs 光功率计详情见本页下方。
Ophir Vega 激光功率/能量计
⚙️
Vega
Ophir
| 通信 | 串口 |
| 探头 | 热电堆/光电二极管/热释电 |
| 功率 | µW – kW |
| 能量 | µJ – J |
多功能激光测量仪,支持连续波功率和脉冲能量测量。
驱动模块:VegaPowerMeter
from quatm.drivers.Ophir.base import VegaPowerMeter
pm = VegaPowerMeter(conn="/dev/ttyUSB0")
power = pm.get_power()
HighFinesse WS6/WS7 精密波长计
⚙️
WS6 / WS7
HighFinesse
| 通信 | 原生 wlmData.dll |
| 精度 | 2–200 MHz (取决于型号) |
| 通道数 | 1–8 |
| 测量速率 | 最高 500 Hz |
| 波长范围 | 350–1120 nm |
用于精密激光频率测量和反馈控制的 Fizeau 干涉仪波长计。多通道型号可同时监测多台激光器频率。
驱动模块:WLM
from quatm.drivers.HighFinesse.wlm import WLM
wlm = WLM(version=7, dll_path="C:\\wlm\\wlmData.dll")
# 读取通道 1 当前频率
freq = wlm.get_frequency(channel=1) # THz
wavelength = wlm.get_wavelength(channel=1) # nm
# 曝光控制(自动适应光强)
wlm.set_exposure(channel=1, mode="auto")
Matisse 自动调谐
HighFinesse 波长计 + Sirah Matisse 的组合是 Quatm 中典型的激光频率反馈控制系统。MatisseTuner 驱动协调两者,实现闭环自动调谐和宽范围无跳模扫描。
Thorlabs 光功率计
光功率计 GenericPM
⚙️
PM100 / PM400 系列
Thorlabs 功率计
| 通信 | VISA (USB) |
| 支持探头 | 光电二极管/热电堆/热释电 |
| 波长范围 | 取决于探头 |
| 功率范围 | nW – W 级 |
通过 SCPI 命令与 Thorlabs 功率计表头通信,支持多种探头类型。
驱动模块:GenericPM
from quatm.drivers.thorlabs.misc import GenericPM
pm = GenericPM(addr="USB0::0x1313::0x8078::P1234567::INSTR")
# 设置工作波长(用于探头校准)
pm.set_wavelength(780.0) # 780 nm
# 读取功率
power = pm.get_power() # 返回当前功率 (W)
TLCamera 科学相机 ThorlabsTLCamera
Thorlabs 光功率计 PM100 / PM400
⚙️
PM100 / PM400 系列
Thorlabs 功率计
| 通信 | VISA (USB) |
| 支持探头 | 光电二极管/热电堆/热释电 |
| 波长范围 | 取决于探头 |
| 功率范围 | nW – W 级 |
通过 SCPI 命令与 Thorlabs 功率计表头通信,支持多种探头类型。
驱动模块:GenericPM
from quatm.drivers.Thorlabs.misc import GenericPM
pm = GenericPM(addr="USB0::0x1313::0x8078::P1234567::INSTR")
pm.set_wavelength(780.0) # 780 nm 校准
power = pm.get_power() # 当前功率 (W)
4 - 运动与定位
PI 纳米定位台、Attocube、Newport Picomotor、Thorlabs APT 等精密运动与定位驱动。
概述
Quatm 支持从压电纳米定位到步进电机长行程的多种运动平台,统一 IMultiaxisStage 接口。
Physik Instrumente (PI) 压电纳米定位
概述
GenericPIController 封装 PI 通用控制器串口通信,通过 ASCII 命令集控制多种 PI 压电定位平台。
⚙️
PI 压电控制器
E-xxx 系列
| 通信 | 串口 (RS232) |
| 协议 | PI ASCII 命令集 |
| 轴数 | 取决于控制器型号 |
| 精度 | 亚纳米级 |
典型应用包括高 NA 物镜精密对焦、光纤耦合自动对准、干涉仪光路调节和光偶极阱束腰位置控制。
驱动模块:GenericPIController
初始化
from quatm.drivers.PhysikInstrumente.base import GenericPIController
# 串口连接
stage = GenericPIController(conn="/dev/ttyUSB0")
# 归零
stage.home(axis=0)
# 绝对定位(µm)
stage.move_to(axis=0, position=50.0)
# 相对移动
stage.move_by(axis=1, delta=10.0)
# 查询当前位置
pos = stage.get_position(axis=0)
关键方法
| 方法 | 说明 |
|---|
home(axis) | 指定轴归零 |
move_to(axis, position) | 绝对定位 (µm) |
move_by(axis, delta) | 相对移动 (µm) |
get_position(axis) | 查询当前位置 |
stop(axis) | 紧急停止 |
设备配置
"objective_z": {
"type": "local",
"module": "drivers.PhysikInstrumente.base",
"class": "GenericPIController",
"arguments": {"conn": "/dev/ttyUSB0"},
}
## 使用示例
```python
# 在 Experiment 类中
self.pi_stage = self.get_device("pi_stage")
# 移动到指定位置 (μm)
self.pi_stage.move_absolute(x=50.0, y=25.0, z=10.0)
# 相对移动
self.pi_stage.move_relative(dx=1.0, dy=0.0, dz=0.0)
注意:压电平移台有行程限制,超出范围会触发硬件保护。使用前请查阅设备手册确认最大行程。
Thorlabs APT/Kinesis 位移台
KDC101 / K10CR1 系列
⚙️
KDC101 / K10CR1 / 滤光轮
Thorlabs APT/Kinesis
| 通信 | 串口 (FTDI) |
| 协议 | APT (二进制) |
| 适用设备 | 直流伺服电机、步进电机、滤光轮、快门 |
统一封装 Thorlabs APT 协议设备。
驱动模块:BasicKinesisDevice
from quatm.drivers.Thorlabs.kinesis import BasicKinesisDevice
stage = BasicKinesisDevice(conn="27200001")
stage.home()
stage.move_to(position=25.0) # mm
Elliptec 压电谐振电机
⚙️
ELLx 系列
Thorlabs Elliptec
| 通信 | 串口 (9600 baud) |
| 行程 | 取决于滑块 |
| 精度 | µm 级 |
紧凑型压电谐振电机,适合空间受限的光学调整架。
驱动模块:ElliptecMotor
from quatm.drivers.Thorlabs.elliptec import ElliptecMotor
motor = ElliptecMotor(conn="/dev/ttyUSB0", addrs=[0])
motor.move_to(axis=0, position=10.0)
电动滤光轮 FW102/FW212
from quatm.drivers.Thorlabs.serial import FW
fw = FW(conn="/dev/ttyUSB0")
fw.set_position(position=2) # 切换到第 2 个滤光片位置
Physik Instrumente (PI)
概述
GenericPIController 封装 PI 通用控制器串口通信,通过 ASCII 命令集控制多种 PI 压电定位平台。
⚙️
PI 压电控制器
E-xxx 系列
| 通信 | 串口 (RS232) |
| 协议 | PI ASCII 命令集 |
| 轴数 | 取决于控制器型号 |
| 精度 | 亚纳米级 |
典型应用包括高 NA 物镜精密对焦、光纤耦合自动对准、干涉仪光路调节和光偶极阱束腰位置控制。
驱动模块:GenericPIController
初始化
from quatm.drivers.PhysikInstrumente.base import GenericPIController
# 串口连接
stage = GenericPIController(conn="/dev/ttyUSB0")
# 归零
stage.home(axis=0)
# 绝对定位(µm)
stage.move_to(axis=0, position=50.0)
# 相对移动
stage.move_by(axis=1, delta=10.0)
# 查询当前位置
pos = stage.get_position(axis=0)
关键方法
| 方法 | 说明 |
|---|
home(axis) | 指定轴归零 |
move_to(axis, position) | 绝对定位 (µm) |
move_by(axis, delta) | 相对移动 (µm) |
get_position(axis) | 查询当前位置 |
stop(axis) | 紧急停止 |
设备配置
"objective_z": {
"type": "local",
"module": "drivers.PhysikInstrumente.base",
"class": "GenericPIController",
"arguments": {"conn": "/dev/ttyUSB0"},
}
## 使用示例
```python
# 在 Experiment 类中
self.pi_stage = self.get_device("pi_stage")
# 移动到指定位置 (μm)
self.pi_stage.move_absolute(x=50.0, y=25.0, z=10.0)
# 相对移动
self.pi_stage.move_relative(dx=1.0, dy=0.0, dz=0.0)
注意:压电平移台有行程限制,超出范围会触发硬件保护。使用前请查阅设备手册确认最大行程。
Thorlabs 位移台与电机
Quatm 支持多类 Thorlabs 设备,包含位移台、光学测量仪器与相机。
APT/Kinesis 位移台 BasicKinesisDevice
⚙️
KDC101 / K10CR1 / 滤光轮
Thorlabs APT/Kinesis
| 通信 | 串口 (FTDI) |
| 协议 | APT (二进制) |
| 适用设备 | 直流伺服电机、步进电机、滤光轮、快门 |
统一封装 Thorlabs APT 协议设备,通过串口(FTDI 芯片)通信。
驱动模块:BasicKinesisDevice
from quatm.drivers.thorlabs.kinesis import BasicKinesisDevice
# 连接指定序列号的设备
stage = BasicKinesisDevice(conn="27200001") # 序列号
# 归零
stage.home()
# 绝对定位(mm)
stage.move_to(position=25.0)
# 读取当前位置
pos = stage.get_position()
Elliptec 压电谐振电机 ElliptecMotor
⚙️
ELLx 系列
Thorlabs Elliptec
| 通信 | 串口 (9600 baud) |
| 行程 | 取决于滑块长度 |
| 精度 | µm 级 |
| 真空兼容 | 可选 |
紧凑型压电谐振电机,适合空间受限的光学调整架。
驱动模块:ElliptecMotor
from quatm.drivers.thorlabs.elliptec import ElliptecMotor
motor = ElliptecMotor(conn="/dev/ttyUSB0", addrs=[0])
motor.move_to(axis=0, position=10.0) # mm
电动滤光轮
from quatm.drivers.thorlabs.serial import FW
fw = FW(conn="/dev/ttyUSB0") # FW102 / FW212
fw.set_position(position=2) # 切换到第 2 个滤光片位置
KDC101 电机平移台
通过 .NET SDK 控制 Thorlabs KDC101/T-Cube 系列电机平移台。
from quatm.drivers.thorlabs.kdc101 import KDC101
stage = KDC101("26001234") # 序列号
stage.home() # 回零
stage.move_absolute(10.0) # 移动到 10.0 mm
pos = stage.get_position() # 读取当前位置
| 功能 | 说明 |
|---|
| 回零 | 自动寻找限位开关 |
| 绝对移动 | 移动到指定位置 (mm) |
| 相对移动 | 相对当前位置移动 |
| 位置读取 | 实时读取当前位置 |
##概述
Quatm 支持从压电纳米定位到步进电机长行程的多种运动平台。所有平台继承 io.stage 接口,提供统一的 move_to / get_position / home API。
Attocube ANC300 / ANC350 纳米定位
⚙️
ANC300
Attocube
| 通信 | TCP/IP (端口 7230) |
| 轴数 | 最多 7 轴 |
| 行程 | mm 级 |
| 精度 | nm 级 |
| 适用 | 低温 / 真空 |
模块化纳米定位控制器,通过 TCP/IP 远程控制。广泛用于低温恒温器内物镜和样品的精确定位。
驱动模块:ANC300
from quatm.drivers.Attocube.anc300 import ANC300
anc = ANC300(conn=("192.168.1.30", 7230))
# 归零
anc.home(axis=0)
# 纳米级步进
anc.move_by(axis=0, delta=0.1) # 100 nm
# 连续扫描模式
anc.set_continuous_mode(axis=1, enable=True)
anc.set_continuous_speed(axis=1, speed=100.0) # nm/s
⚙️
ANC350
Attocube (USB)
| 通信 | USB HID (PyUSB) |
| 轴数 | 最多 3 轴 |
| 控制 | USB 直接连接 |
USB 版本,适合桌面应用。
驱动模块:ANC350
from quatm.drivers.Attocube.anc350 import ANC350
anc = ANC350(conn=0) # 第一台 USB 设备
anc.move_to(axis=0, position=50.0)
Newport Picomotor 8742 4 轴控制器
⚙️
Picomotor 8742
Newport
| 通信 | USB (PyUSB) 或 TCP/IP Telnet (端口 23) |
| 轴数 | 4 |
| 步长 | < 30 nm |
| 真空兼容 | 可选 |
压电惯性电机控制器,支持 USB 直连或网络控制。真空兼容型号可直接用于真空腔内的光学元件调整。
驱动模块:Picomotor8742
from quatm.drivers.Newport.picomotor import Picomotor8742
# USB 连接
pico = Picomotor8742(conn=0)
# 或 TCP/IP
pico = Picomotor8742(conn="192.168.1.40", multiaddr=(0, 1))
pico.move_to(axis=0, position=5.0) # mm
pico.home(axis=0)
SmarAct MCS2 / SCU3D 高精度定位
⚙️
MCS2
SmarAct
| 通信 | 原生 MCS2 SDK |
| 轴数 | 最多 18 轴 |
| 精度 | nm 级 |
| 速度 | 最高 20 mm/s |
| 真空/低温 | 可选模块 |
模块化高精度定位系统,支持多轴协调运动和复杂轨迹。
驱动模块:MCS2
from quatm.drivers.SmarAct.MCS2 import MCS2
mcs = MCS2(locator="usb:sn:12345678")
mcs.move_to(axis=0, position=10.0) # mm
mcs.get_position(axis=0)
⚙️
SCU3D
SmarAct 3 轴
一体化 3 轴控制器,适合紧凑空间。
驱动模块:SCU3D
from quatm.drivers.SmarAct.scu3d import SCU3D
scu = SCU3D(idx=0)
scu.move_to(axis=1, position=25.0)
Standa 8SMC 步进电机控制器
⚙️
8SMC4 / 8SMC5
Standa
| 通信 | 串口 (115200 baud) |
| 轴数 | 1–4 |
| 步进分辨率 | 取决于电机/丝杠 |
| 应用 | 长行程位移台、旋转台 |
经济型步进电机控制器,适合光学平台上的长行程粗定位。
驱动模块:Standa8SMC
from quatm.drivers.standa.base import Standa8SMC
stage = Standa8SMC(conn="/dev/ttyUSB0")
stage.move_to(position=50.0) # mm
stage.home()
⚙️
Performax
Arcus Technology
| 通信 | USB (DLL) 或 RS485 串口 |
| 轴数 | 最多 4 轴 |
| 功能 | 加减速曲线、限位检测 |
高性能步进电机控制器,提供平滑的 S 曲线加减速。
驱动模块:GenericPerformaxStage
from quatm.drivers.arcus.performax import GenericPerformaxStage
stage = GenericPerformaxStage(idx=0, conn="USB")
stage.move_to(axis=0, position=100.0)
stage.set_acceleration(axis=0, accel=50.0) # mm/s²
Trinamic TMCM-1110 一体化步进电机
⚙️
TMCM-1110
Trinamic
| 通信 | 串口 (9600 baud, TMCL 协议) |
| 功能 | StallGuard 失速检测、CoolStep 节能 |
一体化步进电机模块,内置控制器和驱动器。适合简单旋转/平移任务和光路快门。
驱动模块:TMCM1110
from quatm.drivers.trinamic.base import TMCM1110
motor = TMCM1110(conn="/dev/ttyUSB0")
motor.move_to(position=180.0) # 旋转 (°)
motor.set_velocity(500.0) # °/s
Thorlabs Elliptec 压电谐振电机
Thorlabs 位移台详情见本页下方。
通用运动平台配置
"objective_z": {
"type": "local",
"module": "drivers.Attocube.anc300",
"class": "ANC300",
"arguments": {"conn": ("192.168.1.30", 7230)},
}
多轴协调
所有 io.multiaxisstage 驱动支持独立的轴向映射。通过 muxaxis 工具可将物理轴组合为逻辑坐标系,实现倾斜校正、坐标变换等高级功能。5 - 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/O | TTL, 最高 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::..."},
},
6 - 环境监测
Lakeshore、Cryocon、Pfeiffer、Leybold 等温度、真空、低温监测驱动。
概述
实验室环境监测是量子实验稳定性的基础。Quatm 内置温度、真空和低温液位监测驱动,支持实时数据记录和异常告警。
Lakeshore 218 温度监测器
⚙️
218
Lakeshore
| 通信 | 串口 (9600 baud, 7E1) |
| 通道数 | 8 |
| 传感器 | 二极管 (Si/GaAs)、铂电阻 (Pt100/1000)、Cernox、RuO₂ |
| 温度 | 1.4 K – 1500 K (取决于传感器) |
低温物理实验标准温度监测器。8 通道独立配置,支持二极管、电阻温度计和 Cernox 薄膜电阻。
驱动模块:Lakeshore218
from quatm.drivers.Lakeshore.base import Lakeshore218
ls = Lakeshore218(conn="/dev/ttyUSB0")
# 配置通道 1 为硅二极管
ls.set_sensor_type(channel=1, sensor_type="DT-670")
# 读取温度
temp = ls.get_temperature(channel=1) # Kelvin
all_temps = ls.get_all_temperatures() # 全部 8 通道
# 读取传感器原始值(电压/电阻)
raw = ls.get_reading(channel=1)
Cryocon 12C / 14C / 18C 温度控制器
⚙️
12C / 14C / 18C
Cryocon
| 通信 | 串口 (9600 baud) |
| 通道数 | 2–4 (取决于型号) |
| 支持传感器 | 二极管/Pt/Cernox |
带 PID 加热输出的低温温度控制器,用于精密温度稳定。
驱动模块:Cryocon1x
from quatm.drivers.Cryocon.base import Cryocon1x
cryo = Cryocon1x(conn="/dev/ttyUSB0", nchannels=4)
# 读取通道 1 温度
temp = cryo.get_temperature(channel=1)
# PID 设定点
cryo.set_setpoint(channel=1, temperature=4.2) # 4.2 K
cryo.set_heater_range(channel=1, range="low")
cryo.enable_heater(channel=1, enable=True)
Lumel RE72 · Omron E5_C 温控器
⚙️
RE72 / E5_C
Lumel / Omron
| 通信 | RS485 Modbus RTU |
| 功能 | PID 自整定、斜坡/保持程序 |
| 应用 | 光学平台温度稳定、激光晶体温控 |
工业级 PID 温度控制器,通过 Modbus RTU 协议通信。常用于激光器晶体温度控制和光学平台环境温控。
驱动模块:LumelRE72Controller / OmronE5xCController
from quatm.drivers.Lumel.base import LumelRE72Controller
from quatm.drivers.Omron.base import OmronE5xCController
# Lumel RE72
lumel = LumelRE72Controller(conn="/dev/ttyUSB1", daddr=1)
temp = lumel.get_temperature()
lumel.set_setpoint(25.0)
# Omron E5_C
omron = OmronE5xCController(conn="/dev/ttyUSB1", daddr=2)
omron.set_setpoint(30.0)
omron.enable_heater(True)
Pfeiffer TPG2xx 高真空计
⚙️
TPG2xx 系列
Pfeiffer Vacuum
| 通信 | 串口 (9600 baud) |
| 通道数 | 2 |
| 支持规管 | Pirani / Cold Cathode / 复合规 |
| 量程 | 大气压 – 10⁻¹⁰ mbar |
紧凑型双通道真空计控制器,同时支持粗真空(Pirani)和超高真空(冷阴极)规管。
驱动模块:TPG2xx
from quatm.drivers.Pfeiffer.base import TPG2xx
tpg = TPG2xx(conn="/dev/ttyUSB0")
# 读取两路压力
p1 = tpg.get_pressure(channel=1) # mbar
p2 = tpg.get_pressure(channel=2)
# 规管类型识别
gauge_type = tpg.get_gauge_type(channel=1)
Leybold ITR 宽量程真空计
⚙️
ITR 系列
Leybold
| 通信 | 串口 (9600 baud, 二进制协议) |
| 量程 | 大气压 – 5×10⁻¹⁰ mbar |
| 输出 | 持续压力数据流 |
宽量程皮拉尼/冷阴极复合真空计,主动推送压力数据。
驱动模块:GenericITR
from quatm.drivers.Leybold.base import GenericITR
itr = GenericITR(conn="/dev/ttyUSB0")
pressure = itr.get_pressure() # mbar
Agilent XGS-600 多通道真空控制器
⚙️
XGS-600
Agilent
| 通信 | 串口 (RS485) |
| 通道数 | 最多 6 路规管 |
| 规管类型 | Hot Filament / Cold Cathode / Pirani / Convection |
大型真空系统的多规管控制器,通过 RS485 串联地址访问。
驱动模块:XGS600
from quatm.drivers.Agilent.pressure import XGS600
xgs = XGS600(conn="/dev/ttyUSB0", addr=1)
# 读取所有通道压力
pressures = xgs.get_all_pressures()
p1 = xgs.get_pressure(channel=1)
低温液位监测
Cryomagnetics LM500 液氦/液氮液位计
⚙️
LM500 / LM510
Cryomagnetics
| 通信 | 串口 (9600 baud) |
| 功能 | He/N₂ 液位、温度、样品室温度 |
| 通道 | 1–2 液位 + 4 温度 |
超导磁体杜瓦液位监测标准设备。同时监测液氦/液氮液位和样品室温度。
驱动模块:LM500
from quatm.drivers.Cryomagnetics.base import LM500
lm = LM500(conn="/dev/ttyUSB0")
helium_level = lm.get_helium_level() # %
nitrogen_level = lm.get_nitrogen_level() # %
sample_temp = lm.get_temperature()
American Magnetics 1700 液位监测器
⚙️
1700
American Magnetics
| 通信 | 串口或 TCP/IP (端口 7180) |
| 功能 | He / N₂ 液位、继电器控制 |
支持串口和网络双接口的液位监测器。
驱动模块:AM1700
from quatm.drivers.AmericanMagnetics.base import AM1700
am = AM1700(conn="192.168.1.50") # TCP/IP
# 或串口: am = AM1700(conn="/dev/ttyUSB0")
level = am.get_helium_level()
通用环境监测配置
"chamber_pressure": {
"type": "local",
"module": "drivers.Pfeiffer.base",
"class": "TPG2xx",
"arguments": {"conn": "/dev/ttyUSB0"},
},
"cryo_temp": {
"type": "local",
"module": "drivers.Lakeshore.base",
"class": "Lakeshore218",
"arguments": {"conn": "/dev/ttyUSB1"},
},
自动化监控
结合 Quatm 的 DataStreamMonitor 和 UpdatingPlot 组件,可实时可视化真空、温度和液位数据,并设置阈值告警自动暂停实验。7 - 实验控制与其他
ADwin、NI-FPGA、Red Pitaya 等 FPGA 控制器与辅助设备驱动,覆盖从纳秒级实时时序到通用开关逻辑的全谱实验控制需求。
概述
FPGA 控制器和辅助设备是实验自动化的重要组成:从纳秒级实时时序到继电器开关,Quatm 提供统一的控制接口。目前已支持 ADwin、NI-FPGA、Red Pitaya 等多个品牌。
ADwin
概述
ADwin 是 Jaeger Computergesteuerte Messtechnik 公司的实时控制器系列,基于 FPGA/DSP 架构,独立于 PC 操作系统执行实时任务。
⚙️
ADwin
Gold II / Pro II
| 通信 | PCI / USB |
| 处理器 | DSP + FPGA |
| 时序精度 | 纳秒级 |
| 模拟输入 | 16-bit |
| 数字 I/O | TTL (5V) |
| 内存 | 32 MB DRAM |
运行 ADbasic 编译的实时进程,与 Quatm 通过共享内存或寄存器读写通信。典型应用包括激光冷却时序、MOT 磁场开关和光子计数采集。
驱动模块:ADwin
工作原理
PC (Quatm) ADwin (实时)
┌──────────┐ PCI/USB ┌──────────────┐
│ experiment│ ←──────────→ │ ADbasic 进程 │
│ .py │ Par/Data │ 纳秒时序 + 采集 │
└──────────┘ └──────────────┘
Quatm 实验脚本通过 ADwin 驱动读写参数和数据数组,与 ADwin 上运行的 ADbasic 进程交互。时序关键部分在 ADwin 硬件上执行,Python 侧负责参数设置和结果读取。
初始化
from quatm.drivers.fpga import ADwin
# 连接 ADwin(PCI 总线)
adw = ADwin(device_number=1)
# 加载并启动 ADbasic 进程
adw.load_process("experiment_sequence.TB1")
adw.start_process()
# 设置实验参数
adw.set_par(1, 100_000) # Par_1 = 100 µs 冷却时间
adw.set_par(2, 50) # Par_2 = 50 次循环
adw.set_par(3, 10_000) # Par_3 = 10 ms 探测时间
# 启动一次实验序列(ADbasic 中通过事件触发)
adw.trigger()
# 读取采集数据
photons = adw.get_data(1, data_length=1000) # 从 Data_1 读取光子计数
关键方法
| 方法 | 说明 |
|---|
load_process(binary_path) | 加载 ADbasic 编译的二进制进程 |
start_process() | 启动已加载的进程 |
stop_process() | 停止运行中的进程 |
set_par(index, value) | 写入整型参数(1–80) |
set_fpar(index, value) | 写入浮点参数(1–80) |
get_par(index) | 读取整型参数 |
get_data(index, data_length) | 读取数据数组(1–200) |
set_data(index, values) | 写入数据数组 |
trigger() | 发送软件触发事件 |
典型 ADbasic 进程结构
' ADbasic 代码片段 — 实验时序
Init:
Par_1 = 100000 ' 冷却时间 (µs)
Par_2 = 50 ' 循环次数
Event:
For i = 1 To Par_2
P2_DAC(1, 5000) ' 设置 AOM 功率
P2_DAC(2, 800) ' 设置磁场
' ... 等待、采集、切换 ...
Next i
设备配置
"fpga": {
"type": "local",
"module": "quatm.drivers.fpga",
"class": "ADwin",
"arguments": {"device_number": 1},
}
开发调试
开发阶段可使用 FPGADummy 模拟器(无硬件)测试实验逻辑。模拟器提供相同的 API 接口但不执行实际硬件操作,适合在办公电脑上开发和验证实验脚本。Exception:
quatm.drivers.fpga.client module
Class:
quatm.drivers.fpga.units module
NI-FPGA LabVIEW FPGA 模块化仪器
⚙️
PXIe-78xxR / PCIe-78xxR 系列
NI-FPGA
| 通信 | NI-FPGA Interface Python API |
| FPGA | Xilinx Kintex/Virtex |
| 数字 I/O | 最高 1 Gb/s |
| 模拟 I/O | 最高 3.2 GS/s |
| 编程 | LabVIEW FPGA + Python 运行时控制 |
通过
nifpga Python API 在运行时控制 LabVIEW FPGA 位流。适合需要极高吞吐量和确定性时序的自定义数字信号处理。
驱动模块:ni_fpga
from quatm.drivers.NI.ni_fpga import NIFPGA
fpga = NIFPGA(resource_name="RIO0", bitfile="custom_logic.lvbitx")
fpga.run()
fpga.write_control("pulse_width", 100) # ns
fpga.write_control("trigger_delay", 50)
fpga.read_indicator("photon_count")
与 ADwin 的对比
| 特性 | ADwin | NI-FPGA |
|---|
| 编程语言 | ADbasic (类 BASIC) | LabVIEW FPGA (图形化) |
| Python 控制 | 参数/数据数组读写 | 控件/指示器读写 |
| 适用场景 | 纳秒时序、光子计数 | 高速 DSP、自定义协议 |
| 硬件生态 | 独立控制器 | NI PXI 平台集成 |
Conrad 继电器板
⚙️
Relay Board
Conrad
| 通信 | 串口 (19200 baud) |
| 通道 | 8 继电器/板 |
| 支持 | 菊花链扩展 |
经济型多通道继电器控制器,适合磁阱线圈极性切换、设备供电开关和激光快门控制。
驱动模块:RelayBoard
from quatm.drivers.Conrad.base import RelayBoard
rb = RelayBoard(conn="/dev/ttyUSB0", start_addr=0)
rb.set_relay(relay=0, state=True)
rb.set_relay(relay=3, state=False)
rb.write_byte(0b10101010)
开发调试
开发阶段可使用 FPGADummy 模拟器测试实验逻辑,无需连接实际硬件。