pymeasure程控Keithley 2450时apply_current无法正常施加电流
Keithley 2450 程控无法输出设定电流问题修复
核心问题点
- 测量模式配置逻辑错误:Keithley 2450 同一时间仅能激活一个主测量功能,你在电流源配置完成、输出使能后连续调用
keithley.measure_resistance()、keithley.measure_voltage(),会直接覆盖之前的电流源配置,将设备切换到单独测电阻/单独测电压的模式,源输出自然会被切断,无法输出设定的5mA电流。 - 异常捕获逻辑失效:使用裸
except会吞掉配置阶段所有真实报错(比如参数超范围、指令执行失败、输出锁存报错),统一抛出连接错误,完全无法定位实际故障点。 - 缺少安全收尾逻辑:程序运行结束后不会自动将电流置0、关闭输出,存在烧坏待测器件的风险。
- 测量参数配置缺失:电阻测量未提前指定二线/四线接线模式,读数会出现偏差甚至无法返回有效值。
- 计时逻辑存在误差:循环判断用
int(tempsreel)做截断,会丢失采集窗口最后1秒内的有效数据。
修正后可运行代码
from pymeasure.instruments.keithley import Keithley2450 import time import openpyxl import pyvisa # 采集参数配置 T_ACQUISITION = 10 TARGET_CURRENT = 5e-3 CURRENT_RANGE = 10e-3 COMPLIANCE_VOLTAGE = 10 NPLC = 1 # 测量积分周期,越大读数越稳、速度越慢 rm = pyvisa.ResourceManager() print("已识别设备列表:", rm.list_resources()) wb = openpyxl.Workbook() sheet = wb.active sheet.append(["时间(s)", "电压(V)", "电阻(Ω)"]) keithley = None data = [] try: keithley = Keithley2450('USB0::0x05E6::0x2450::04490659::0::INSTR') keithley.reset() # 先复位设备到默认状态,清除之前的配置残留 # 配置电流源模式 keithley.apply_current() keithley.source_current_range = CURRENT_RANGE keithley.compliance_voltage = COMPLIANCE_VOLTAGE keithley.source_current = 0 # 配置测量参数:不要调用单独的measure_*切模式,直接配置并行测量功能 keithley.write(":SENS:FUNC:ON 'VOLT','RES'") # 同时开启电压、电阻测量 # 电阻测量模式:二线测用"RES",四线测用"FRES",根据实际接线修改 keithley.write(":SENS:RES:MODE RES") keithley.voltage_nplc = NPLC keithley.resistance_nplc = NPLC keithley.enable_source() time.sleep(0.2) # 等待输出电路稳定 keithley.ramp_to_current(TARGET_CURRENT, steps=10, pause=0.05) # 缓升电流避免冲击待测件 time.sleep(0.3) # 开始定时采集 start_time = time.time() while True: now = time.time() elapsed = now - start_time if elapsed > T_ACQUISITION: break # 同步读取测量值 volt = keithley.voltage res = keithley.resistance data.append([elapsed, volt, res]) print(f"采集时间: {elapsed:.2f}s, 电压: {volt:.4f}V, 电阻: {res:.2f}Ω") # 控制采集间隔,可按需调整 time.sleep(0.1) except Exception as e: print(f"程序运行出错: {str(e)}") finally: # 安全收尾:不管程序正常/异常退出,都将电流降到0、关闭输出 if keithley is not None: keithley.ramp_to_current(0, steps=5, pause=0.05) keithley.disable_source() keithley.shutdown() # 保存采集数据 for row in data: sheet.append(row) wb.save('Data_sourcemetre.xlsx') print('数据已保存到Data_sourcemetre.xlsx')
调试注意事项
- 如果用四线法测低阻,把代码里的
:SENS:RES:MODE RES改成:SENS:RES:MODE FRES即可,同时确保设备端接线符合四线制要求。 - NPLC参数可按需调整:追求高速采集就设到0.1甚至更小,追求高精度读数就设到5或10。
- 如果仍有异常,可暂时跳过pymeasure的封装方法,直接用
keithley.write()/keithley.ask()发送原生SCPI指令调试,可直接读取设备返回的具体报错码定位问题。
内容的提问来源于stack exchange,提问作者Fake47
相关产品推荐
相关产品推荐

