资讯中心

联系我们

深圳市维立信电子科技有限公司
地址:深圳市福田区红荔路第一世界广场A座8D-E
咨询电话:0755-83766766
E-mail:info@welissom.com

如何通过SCPI指令实现泊松分布电压序列输出时,同时控制其他参数(如电流)?

2026-01-15 09:27:59  点击:

要通过SCPI指令实现泊松分布电压序列输出同时控制其他参数(如电流),需利用电源的序列编程(Sequence)列表模式(List Mode)功能,在每个序列点中定义电压和电流的组合。以下是详细实现方案:


1. 关键思路

  • 双向直流电源需支持多参数序列输出(如Keysight E36000、Keithley 2600系列)。
  • 在每个序列点中,同时指定:
    • 目标电压(泊松分布生成)
    • 电流限制(或固定电流值)
  • 若电源不支持多参数序列,需通过外部触发软件循环实现(但时序精度较低)。

2. SCPI指令实现步骤

步骤1:初始化电源

scpi*RST                          ; 复位仪器SYST:REM                      ; 远程控制模式
SOUR:FUNC VOLT                ; 设置为电压源模式
SOUR:VOLT:RANG MAX            ; 电压范围最大
SOUR:CURR:RANG MAX            ; 电流范围最大

步骤2:生成泊松分布电压序列

假设生成 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)

步骤3:编程序列(电压 + 电流)

方法1:使用序列模式(Sequence Mode)

如果电源支持多参数序列(如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")

方法2:使用列表模式(List Mode)

某些电源(如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, ...  ; 持续时间列表

步骤4:添加噪声(可选)

若需在电压上叠加噪声(如高斯噪声):

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}")

步骤5:启动序列输出

scpiSOUR:SEQ:STAT ON               ; 启用序列模式OUTP ON                        ; 开启输出

3. 完整SCPI指令示例

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

4. 注意事项

  1. 电源支持情况
    • 并非所有电源都支持多参数序列(如Keithley 2600支持,Keysight E36000部分型号支持)。
    • 若不支持,需改用外部触发软件循环(但时序精度较低)。
  2. 电流控制模式
    • 可设置为电流限制(Current Limit)固定电流(Current Mode)
      scpiSOUR:FUNC CURR               ; 切换到电流源模式(可选)SOUR:CURR 0.1                ; 固定电流输出(若需恒流)
  3. 双向控制
    • 若需负电压,设置极性:
      scpiSOUR:POL REV                 ; 反向电压(负)
  4. 安全限制
    • 设置合理的电压/电流范围,避免损坏设备:
      scpiSOUR:VOLT:PROT 20           ; 过压保护(V)SOUR:CURR:PROT 1            ; 过流保护(A)

5. 替代方案(若电源不支持多参数序列)

方法1:软件循环控制(低精度时序)

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)  # 等待稳定

缺点:时序精度较低,不适合高速切换。

方法2:外部触发 + 多个电源

  • 使用两个电源(一个控电压,一个控电流),通过触发信号同步。

6. 总结

方法适用场景时序精度复杂度
多参数序列支持序列模式的电源(如Keysight/Keithley)
软件循环无序列支持的电源
外部触发高速同步控制

推荐方案
✅ 优先使用电源的序列模式,在每个序列点中同时定义电压和电流。
✅ 若需动态调整电流,可结合
SOUR:CURR:LIM或切换至SOUR:FUNC CURR模式。

通过上述方法,可实现泊松分布电压序列电流参数的联合控制。