当前位置:首页 > 测试测量 > 测试测量
[导读]产线测试、实验室老化、器件筛选——这些场景里,"手动点按钮→读数据→记 Excel"的方式已经跟不上节奏了。Python + PyVISA 是目前最通用的仪器控制方案,支持 Keysight、R&S、Tektronix、Keithley 等主流品牌的万用表、示波器、电源、电子负载。下面以一个实际案例——用 Keithley 2400 源表批量采集 100 个点的 IV 曲线——演示完整流程。

产线测试、实验室老化、器件筛选——这些场景里,"手动点按钮→读数据→记 Excel"的方式已经跟不上节奏了。Python + PyVISA 是目前最通用的仪器控制方案,支持 Keysight、R&S、Tektronix、Keithley 等主流品牌的万用表、示波器、电源、电子负载。下面以一个实际案例——用 Keithley 2400 源表批量采集 100 个点的 IV 曲线——演示完整流程。

一、环境搭建

pip install pyvisa pyvisa-py

PyVISA 是抽象层,后端可以用 NI-VISA(需安装 NI 驱动)或纯 Python 实现的 pyvisa-py。对于大多数 USB/GPIB 仪器,pyvisa-py 够用,无需安装 NI 庞大的驱动包。

连接仪器前,先用 pyvisa-info 查看可用资源:

$ pyvisa-info

Available resources:

TCPIP0::192.168.1.100::inst0::INSTR

USB0::0x05E6::0x2400::123456::INSTR

GPIB0::24::INSTR

二、基本读写

以 Keithley 2400 为例,SCPI 命令控制:

import pyvisa

rm = pyvisa.ResourceManager()

# 通过 USB 地址连接

inst = rm.open_resource('USB0::0x05E6::0x2400::123456::INSTR')

inst.timeout = 5000  # 超时 5 秒

# 复位仪器

inst.write('*RST')

# 设置为电压源模式,输出 5V

inst.write(':SOUR:FUNC VOLT')

inst.write(':SOUR:VOLT 5')

# 开启输出

inst.write(':OUTPUT ON')

# 读取电流值

current = inst.query(':MEAS:CURR?')

print(f'Current: {float(current):.6f} A')

# 关闭输出

inst.write(':OUTPUT OFF')

inst.close()

query() 等价于 write() + read(),自动处理结束符。

三、批量采集:IV 曲线

下面的脚本对 DUT 施加 0–10V 步进 0.1V,每步测量电流,保存到 CSV:

import pyvisa

import csv

import time

rm = pyvisa.ResourceManager()

inst = rm.open_resource('USB0::0x05E6::0x2400::123456::INSTR')

inst.timeout = 10000

# 仪器配置

inst.write('*RST')

inst.write(':SOUR:FUNC VOLT')

inst.write(':SENS:FUNC "CURR"')

inst.write(':SENS:CURR:RANG:AUTO ON')

inst.write(':FORM:ELEM VOLT,CURR')  # 返回格式:电压,电流

results = []

voltages = [v * 0.1 for v in range(0, 101)]  # 0.0V ~ 10.0V

inst.write(':OUTPUT ON')

time.sleep(0.1)  # 等待继电器稳定

for v in voltages:

   inst.write(f':SOUR:VOLT {v:.3f}')

   time.sleep(0.005)  # 5ms 建立时间

   data = inst.query(':READ?').strip().split(',')

   results.append({

       'voltage_set': v,

       'voltage_meas': float(data[0]),

       'current_meas': float(data[1])

   })

   print(f'{v:.1f}V -> {float(data[1]):.6f}A')

inst.write(':OUTPUT OFF')

inst.close()

# 保存 CSV

with open('iv_curve.csv', 'w', newline='') as f:

   writer = csv.DictWriter(f, fieldnames=['voltage_set','voltage_meas','current_meas'])

   writer.writeheader()

   writer.writerows(results)

四、多仪器协同

有时需要同时控制电源和万用表,可以用两个 open_resource 实例:

psu = rm.open_resource('TCPIP0::192.168.1.10::inst0::INSTR')  # 电源

dmm = rm.open_resource('TCPIP0::192.168.1.11::inst0::INSTR')  # 万用表

psu.write(':OUTPUT ON')

for v in [3.3, 5.0, 12.0]:

   psu.write(f':APPL {v}')

   time.sleep(0.1)

   reading = dmm.query(':MEAS:VOLT:DC?')

   print(f'Supply {v}V, measured {float(reading):.4f}V')

psu.write(':OUTPUT OFF')

五、错误处理与重试

仪器通信偶尔会超时,加入重试机制:

def query_with_retry(inst, cmd, retries=3):

   for attempt in range(retries):

       try:

           return inst.query(cmd)

       except pyvisa.errors.VisaIOError as e:

           print(f'Attempt {attempt+1} failed: {e}')

           time.sleep(0.5)

   raise Exception('Max retries exceeded')

六、实用技巧

• timeout 设置:批量采集时每个点的测量时间可能不同,设一个合理的超时(如 10 秒),避免单点卡死整个流程。

• *OPC? 同步:有些仪器需要等待操作完成,*OPC? 返回 1 表示就绪。

• 格式化输出::FORM:ELEM VOLT,CURR 让仪器返回简洁的数字,减少解析工作量。

• 关闭连接:inst.close() 释放资源,尤其是在循环中频繁开关仪器时。

Python + VISA 把仪器控制变成了"写脚本"的工作,而不是"动手点"的工作。无论是 100 个点的 IV 扫描,还是 24 小时的老化数据记录,只要 SCPI 命令能做的,脚本都能自动化。关键是先写好一个稳定的基础读写函数,再在上面搭业务逻辑。这套流程上手后,产线测试效率能提升 5–10 倍,而且数据零差错。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

我通过SSH连接到树莓派,并运行了两个自行编写的Python脚本:一个用于测试IMX500+CPU推理和USB摄像头+CPU推理,另一个用于测试IMX500+传感器内推理。同时,我还测试了reCamera。

关键字: 树莓派5 eCamera Python 传感器

本项目是一款基于Python和Pygame开发的完整功能门将游戏,可通过键盘或使用MPU6050传感器(加速度计+陀螺仪)实时身体动作进行控制。游戏可在Windows和树莓派(支持I²C接口)上运行,是学习硬件接口、游戏...

关键字: Python 加速度计 陀螺仪 树莓派

请注意,对于单一输入流,增加AIPU核心并不会提高吞吐量,而只会降低每帧的延迟。当只有一个流提供数据时,这些核心是通过降低延迟来工作的,而不是提升带宽。

关键字: OpenCL Python INA228

原始版本被设计为一款网络应用程序,以最大化可访问性。通过浏览器,用户可以在任何计算机上配置硬件,无需安装专用软件或管理复杂的驱动程序。这种“零安装”的体验使其成为社区内的事实标准。

关键字: 人工智能 Web 应用 Python

Soan Papdidi 改变了这种体验。它是一款紧凑、易于上手的纯FPGA开发板——无需MCU,也无隐藏式微控制器,只需掌握原始的FPGA功能即可。该板配备8个DIP开关、8个LED灯和10个I/O引脚,非常适合用于学...

关键字: FPGA 开发板 数字电路 Python

在搭建显示屏(使用Arduino和硬件)时,我常常感到沮丧:需要刷写程序、线缆可能损坏、导线松脱,或者板子突然烧坏。最终我可能只能花10到20秒(如果运气好)来测试一下,把字体向左移动三个像素是否“感觉正确”。

关键字: 显示屏 Arduino Python

工程团队日常会产生海量的测量数据。然而,现在市场上常用的数据分析工具并非专为工程工作流设计的工具,往往会拖慢从这些数据集中提炼可靠洞见的进程:

关键字: 数据分析 Python MATLAB

多色 FDM 打印通常意味着每一层都需要更换材料,并且需要一个比零件本身还要大的清理装置。而 PLA 则完全避免了这些繁琐步骤。通过将打印过程视为一个具有可变厚度的整体——先是一个深色的底色,然后是上面一层由半透明亮色材...

关键字: 3D 打印机 熔丝 Python

如今,穿孔卡片已几乎被人遗忘,使用这种卡片的最后一批机器早在 80 年代就已退役。不过也有一些例外情况,一些工业设备至今仍得以保留,并且在小范围内仍在使用这种卡片。

关键字: OpenCV 读取器 Python

对于既失明又失聪的人来说,他们对世界的感知几乎完全依赖于触觉。传统的盲文学习工具通常依靠声音提示来补充触觉反馈,这使得失聪失明的学习者处于劣势。我的项目是作为我 EDES 301 课程的一部分而开发的,旨在填补这一差距,...

关键字: 微处理器 Python 电路板
关闭