要通过SCPI指令实现泊松分布电压序列输出并同时控制其他参数(如电流),需利用电源的序列编程(Sequence)或列表模式(List Mode)功能,在每个序列点中定义电压和电流的组合。以下是详细实现方案:
scpi*RST ; 复位仪器SYST:REM ; 远程控制模式
SOUR:FUNC VOLT ; 设置为电压源模式
SOUR:VOLT:RANG MAX ; 电压范围最大
SOUR:CURR:RANG MAX ; 电流范围最大
假设生成 N 个电压点,均值 λ(单位:V),并固定电流限制为 I_limit(如 0.1A):
pythonimport numpy as npN = 100 # 序列长度lambda_poisson = 5.0 # 泊松均值(V)voltages = np.random.poisson(lambda_poisson, N) # 生成泊松电压序列current_limit = 0.1 # 固定电流限制(A)
如果电源支持多参数序列(如Keysight E36000):
scpiSOUR:SEQ:LENG 100 ; 序列长度100点
逐点设置电压和电流限制:
scpiSOUR:SEQ:ELEM1:VOLT 3.2 ; 第1点电压SOUR:SEQ:ELEM1:CURR:LIM 0.1 ; 第1点电流限制
SOUR:SEQ:ELEM1:TIME 0.1 ; 持续时间(s)
SOUR:SEQ:ELEM2:VOLT 4.8 ; 第2点电压
SOUR:SEQ:ELEM2:CURR:LIM 0.1 ; 第2点电流限制
SOUR:SEQ:ELEM2:TIME 0.1 ; 持续时间(s)
; ... 重复设置所有点
Python自动化示例:
pythonfor i, v in enumerate(voltages): power_supply.write(f"SOUR:SEQ:ELEM{i+1}:VOLT {v}") power_supply.write(f"SOUR:SEQ:ELEM{i+1}:CURR:LIM {current_limit}") power_supply.write(f"SOUR:SEQ:ELEM{i+1}:TIME 0.1")
某些电源(如Keithley 2600)支持列表模式,可同时定义电压和电流:
scpiSOUR:LIST:VOLT 3.2, 4.8, 6.1, ... ; 电压列表(泊松序列)SOUR:LIST:CURR 0.1, 0.1, 0.1, ... ; 电流限制列表(固定或变化)
SOUR:LIST:TIME 0.1, 0.1, 0.1, ... ; 持续时间列表
若需在电压上叠加噪声(如高斯噪声):
pythonnoise = np.random.normal(0, 0.1, N) # 均值为0,标准差0.1Vvoltages_noisy = voltages + noise
然后在序列中更新电压值:
pythonfor i, v in enumerate(voltages_noisy): power_supply.write(f"SOUR:SEQ:ELEM{i+1}:VOLT {v}")
scpiSOUR:SEQ:STAT ON ; 启用序列模式OUTP ON ; 开启输出
scpi*RSTSYST:REM
SOUR:FUNC VOLT
SOUR:VOLT:RANG MAX
SOUR:CURR:RANG MAX
; 设置序列长度
SOUR:SEQ:LENG 100
; 定义序列点(示例:前3点)
SOUR:SEQ:ELEM1:VOLT 3.2
SOUR:SEQ:ELEM1:CURR:LIM 0.1
SOUR:SEQ:ELEM1:TIME 0.1
SOUR:SEQ:ELEM2:VOLT 4.8
SOUR:SEQ:ELEM2:CURR:LIM 0.1
SOUR:SEQ:ELEM2:TIME 0.1
SOUR:SEQ:ELEM3:VOLT 6.1
SOUR:SEQ:ELEM3:CURR:LIM 0.1
SOUR:SEQ:ELEM3:TIME 0.1
; ... 继续设置剩余点
; 启用序列并输出
SOUR:SEQ:STAT ON
OUTP ON
scpiSOUR:FUNC CURR ; 切换到电流源模式(可选)SOUR:CURR 0.1 ; 固定电流输出(若需恒流)
scpiSOUR:POL REV ; 反向电压(负)
scpiSOUR:VOLT:PROT 20 ; 过压保护(V)SOUR:CURR:PROT 1 ; 过流保护(A)
pythonimport pyvisaimport timerm = pyvisa.ResourceManager()psu = rm.open_resource("TCPIP0::192.168.1.100::inst0::INSTR")for v in voltages: psu.write(f"SOUR:VOLT {v}") psu.write(f"SOUR:CURR:LIM {current_limit}") time.sleep(0.1) # 等待稳定
缺点:时序精度较低,不适合高速切换。
| 方法 | 适用场景 | 时序精度 | 复杂度 |
|---|---|---|---|
| 多参数序列 | 支持序列模式的电源(如Keysight/Keithley) | 高 | 低 |
| 软件循环 | 无序列支持的电源 | 低 | 中 |
| 外部触发 | 高速同步控制 | 高 | 高 |
推荐方案:
✅ 优先使用电源的序列模式,在每个序列点中同时定义电压和电流。
✅ 若需动态调整电流,可结合SOUR:CURR:LIM或切换至SOUR:FUNC CURR模式。
通过上述方法,可实现泊松分布电压序列与电流参数的联合控制。