从Python到TSP:快速上手MP5000自动化测试系统

描述

验证工程师、生产测试工程师和系统集成商经常负责开发自动化测试设备(ATE)系统,该系统被广泛应用于各种半导体器件的测试,如晶体管、二极管、MOSFET和ASIC等。

自动化测试有助于识别缺陷、验证器件性能并确保元件质量——尤其是在半导体、航空航天和国防等对可靠性要求极高的行业中。

MP5000系列是Tektronix推出的模块化ATE系统,目前配备有直流电源(DC Power Supply)和源测量单元(SMU)模块。这些模块可自由组合,以满足各种测试应用需求。与Keithley 26xx系列源测量单元(SMU)类似,MP5000系列主机与模块支持 TSP(Test Script Processor)命令集。

TSP是一种灵活的软硬件架构,允许基于消息的编程。它类似于SCPI,但增加了更强的控制能力,用于测试顺序/流程控制、逻辑决策以及仪器的自主运行。启用TSP的仪器可以像传统的SCPI仪器一样运行,通过响应由PC发送的一系列命令完成控制。

在本指南中,我们将介绍以下内容:

■ 1. 熟悉仪器的TSP命令集

■ 2. 如何进行命令序列化

■ 3. 构建测试流程

■ 4. 将测试集成到您的测试环境中

 

学习TSP命令

在实现MP5000系列自动化之前,首先要熟悉仪器及其TSP命令集

TSP命令集是一组预定义的函数与属性,用于控制仪器操作。它们的功能类似于某些仪器中使用的SCPI命令。与SCPI一样,TSP命令也可分为多个类别,但并非所有类别都适用于所有仪器。以下示例展示了传统SCPI命令与TSP命令在语法上的区别(以2461型SMU为例):

SCPI示例 TSP示例
*RST reset()
SOURce: FUNCtion VOLTage smu. source. func =  smu. FUNC_DC_VOLTAGE

用于控制MP5000系列的TSP命令可在《MP5000系列编程手册》中找到。MP5000系列的命令结构要求用户在命令中明确指定目标仪器在MP5103主机中的槽位(slot)和通道(channel)

TSP MSMU60-2示例

reset()

slot[1]. smu[2]. source. func = slot[1]. smu[2]. FUNC _ DC _ VOLTAGE

这些命令可以通过别名(aliasing)进行缩写,以提高速度与可读性。别名是一个包含命令表结构中部分路径的变量。通过创建别名,可以根据应用需求简化并自定义TSP命令。

别名示例

gateSMU = slot[1].smu[2]

gateSMU. source. func = gateSMU. FUNC _ DC _ VOLTAGE

命令顺序化

自动化新的MP5000模块化精密测试系统的第一步,是通过将一系列TSP命令按顺序组合,来创建一个简单的测试程序。这可以通过任何程序或语言逐条发送TSP命令来实现,方式与使用SCPI命令类似。常用的编程语言包括PythonC#

首先,需要与仪器建立通信连接。这可以通过VISA实现,如下Python示例所示:

import pyvisa

rm = pyvisa.ResourceManager()

inst = rm. open _ resource ('TCPIP0 :: 192. 168. 0. 2 :: hislip0 :: INSTR')

接下来,发送必要的命令以配置测试设置。在设置完参数后,可以开启仪器输出,并通过编程逻辑实现所需的测试行为。

下面的Python示例展示了如何向MP5000 MSMU60-2发送TSP命令以执行一个简单的电流扫描(Current Sweep):

inst.write('reset()')

#Source Settings

inst.write('slot[1].smu[2].source.func = slot[1]. smu[2]. FUNC_DC_CURRENT')

inst.write('slot[1].smu[2].source.rangei = 1000e-3')

inst.write('slot[1].smu[2].source.leveli = 0')

inst.write('slot[1].smu[2].source.limitv = 6')

#Measure Settings

inst.write('slot[1].smu[2].measure.rangev = 6')

inst.write('slot[1].smu[2].measure.rangei = 1000e-3')

inst.write('slot[1].smu[2].measure.nplc = 1')

inst.write('slot[1].smu[2].measure.autorangei = 1')

#Sense Mode

inst.write('slot[1].smu[2].sense = slot[1]. smu[2]. SENSE _ 2WIRE')

#Calculate stop current / (number of sweep points -1)

delta=300e-3/ (31-1)

#Turn Output On

inst.write('slot[1].smu[2].source.output = 1')

inst.write('reset()')

#for each sweep point, calculate the source level and then take an iv

Measurement

For j inrange(1, 31):

       inst.write('slot[1].smu[2].source.leveli ='str((j-1) * delta))

       inst.write('slot[1].smu[2].measure.iv(slot[1].smu[2].defbuffer1,

slot[1].smu[2].defbuffer2)')

#Turn Output Off

inst.write('slot[1].smu[2].source.output = 1')

对于希望在编程中进一步抽象化TSP命令或需要使用多种仪器的用户而言,驱动程序能显著简化代码编写过程。Tektronix为MP5000提供了Python驱动程序IVI驱动程序,这些驱动程序可在任意IDE或代码编辑器(如Visual Studio Code)中使用。


 

Tektronix Python驱动库:tm_devices

tm_devices是Tektronix提供的设备管理包,包含大量命令与函数,可帮助用户轻松通过Python自动化控制Tektronix各类仪器。它支持代码自动补全功能,使具有不同软件经验水平的工程师都能轻松实现测试自动化。安装非常简单,可通过Python的包管理系统pip完成:

pip install tm_devices

以下为使用tm_devices Python驱动自动化控制MP5000 MPSU50-2ST的示例:

From typing importcast, TYPE_CHECKING

From tm_devices import DeviceManager

From tm_devices.drivers import MP5103

If TYPE_CHECKING:

From tm_devices.commands import PSU50STCommands

With DeviceManager(verbose=True) as device _ manager: 

# Add a mainframe to the device manager and access its commands. 

mainframe: MP5103 =device_manager.add_mf("0.0.0.0") 

# Some examples demonstrating the usage of mainframe level commands. 

mf_model=mainframe.commands.localnode.model 

value=mainframe.commands.eventlog.count

# Get access to the psu module command object available in third slot of 

the mainframe. 

modular_psu=cast("PSU50STCommands", 

mainframe.get_module_commands_psu(slot=3))

# Some examples demonstrating the usage of module level commands.

# Get the psu model and version 

psu_model=modular_psu.model 

psu_version=modular_psu.version 

modular_psu.firmware.verify()

# Some examples demonstrating the usage of channel level commands.

# Set the measurement aperture in seconds 

modular_psu.psu[1].measure.count=5 

# Enable the source output 

modular_psu.psu[2].source.output=1 

# Set the offset value used for voltage measurements 

rel_value=modular_psu.psu[1].measure.rel.levelv 

# Create a reference to the default buffer 

my_buffer=modular_psu.psu[1].defbuffer1 

# Read the value in the specified reading buffer 

# Measure the voltage on channel 1 of the PSU 

voltage_value=modular_psu.psu[1].measure.v()

构建测试

在使用MP5000进行测试开发时,有两种选择:

  传统测试开发 —— 由PC软件控制测试执行;

  完全利用TSP —— 同时作为命令集和编程语言,通过编写TSP脚本实现。

脚本是TSP的核心功能之一,它允许用户在无需外部计算机处理的情况下,直接自动控制仪器,类似于嵌入式设备的脚本执行方式。TSP脚本可完成多种复杂任务,例如:根据最近一次测量动态调整源输出值;在多台仪器间同步触发扫描;或执行简单任务,如对缓冲区读数应用数学公式。通过脚本,仪器成为一个功能强大的“边缘计算解决方案”,可即时做出决策,减少通信开销并简化数据分析。

自动化测试系统

图1:传统PC测试开发与在仪器上运行的TSP脚本的可视化对比

TSP脚本可使用文本编辑器编写,也可通过Tektronix提供的TSP Toolkit(Visual Studio Code扩展)实现。该扩展为开发者提供了:

  语法高亮

  内联命令提示与自动补全

  完整调试器

  其他丰富功能,显著提升TSP脚本开发体验。

TSP脚本可以保存到MP5000系列仪器中在本地运行,也可以通过TSP Toolkit终端以SocketsVISA连接方式从外部运行。

自动化测试系统

图2: 在TSP Toolkit终端中运行的TSP脚本、函数调用及命令

 

关于TSP脚本的重要规则

  每个脚本必须具有唯一名称,且名称不能以数字开头

  脚本名称不能包含空格

  脚本名称必须保持唯一。
若加载一个与现有脚本同名的新脚本,系统将生成错误事件信息。
用户必须在创建同名新脚本之前删除原有脚本。

■  若对现有脚本进行修改并以新名称保存,则原始脚本仍会以旧名称保留在仪器中。

  用户可将脚本保存到仪器的非易失性存储器中。
将脚本保存到非易失性存储器可确保仪器在断电后不会丢失脚本。


 

以下是一个简单的TSP脚本示例

使用MP5000 MSMU60-2模块执行一个基本的电流扫描(Current Sweep):

reset()

-- Source Settings

slot[1].smu[2].source.func=slot[1].smu[2].FUNC_DC_CURRENT

slot[1].smu[2].source.rangei=1000e-3

slot[1].smu[2].source.leveli=0

slot[1].smu[2].source.limitv=6

-- Measure Settings

slot[1].smu[2].measure.rangev=6

slot[1].smu[2].measure.rangei=1000e-3

slot[1].smu[2].measure.nplc=1

slot[1].smu[2].measure.autorangei=1

--Sense Mode

slot[1].smu[2].sense=slot[1].smu[2].SENSE_2WIRE

--Calculate stop current / (number of sweep points -1)

localdelta=300e-3/ (31-1)

--Turn Output On

slot[1].smu[2].source.output=1

--for each sweep point, calculate the source level and then take an iv

Measurement

forj=1, 31 , 1do

slot[1].smu[2].source.leveli= ((j-1) *delta)

slot[1].smu[2].measure.iv(slot[1].smu[2].defbuffer1,

slot[1].smu[2].defbuffer2)

end

TSP命令可以组合在一起,并与其他编程逻辑结合,创建一个函数(function)

这类函数即称为脚本(script),仪器可将其解释为一个单独的TSP命令来执行。

将测试集成到测试环境中

可以使用Python或其他编程语言来调用TSP脚本。这种能力意味着用户可以复用部分或全部现有的编程代码,无需完全重构代码库,同时利用TSP提供的更高吞吐量、更好的同步性与触发控制。TSP脚本使用TSP Toolkit编写和调试非常方便,而测试框架的其余部分可通过相应的VS Code扩展轻松编辑,以提升开发效率。

一个加载到仪器内存中的TSP脚本可以通过一行Python代码执行:

import pyvisa

rm = pyvisa.ResourceManager()

inst = rm.open_resource('TCPIP0::INSTR')

inst.write('SimpleIVTest()')

另一个需要考虑的方面是如何从仪器中获取数据。用户可以使用TSP命令直接在TSP Toolkit终端中打印缓冲数据:

--for each sweep point, calculate the source level, take an iv measurement, and then print the values to the terminal

print("Current Voltage")

for j = 1, 31 , 1 do

    slot[1].smu[2].source.leveli = 0 + ((j-1) * delta)

    slot[1].smu[2].measure.iv(slot[1].smu[2].defbuffer1,

slot[1].smu[2].defbuffer2)

    print(slot[1].smu[2].defbuffer1[j],slot[1].smu[2].defbuffer2[j])

end

这些命令同样可以在Python中执行,以实现相同的功能。

#for each sweep point, calculate the source level, take an iv measurement, and then print the values to the terminal

print("Current Voltage")

for j in range(1, 31):

    inst.write('slot[1].smu[2].source.leveli =' str((j-1) * delta))

    inst.write('slot[1].smu[2].measure.iv(slot[1].smu[2].defbuffer1,

slot[1].smu[2].defbuffer2)')

inst.query('print(slot[1].smu[2].defbuffer1[j],slot[1].smu[2].defbuffer2[j])')

|结论|

MP5000模块化精密测试系统(MP5000 Modular Precision Test System)结合TSP脚本的灵活性驱动程序支持,为工程师提供了一个功能强大且可扩展的平台,用于自动化测试开发。通过学习TSP命令结构、编排命令序列、构建可复用脚本,并将其集成到现有测试环境中,用户可以:

  优化测试流程;

  减少通信开销;

  实现更快、更可靠的测试结果。

无论是利用Python驱动实现简洁控制,还是全面采用嵌入式TSP脚本实现高效率执行,MP5000都能帮助工程师构建高效、灵活、并面向未来的自动化测试解决方案,以支持广泛的半导体电子器件验证需求。

我们提供专业的测量洞见信息,旨在帮助您提高绩效以及将各种可能性转化为现实。

泰克设计和制造能够帮助您测试和测量各种解决方案,从而突破复杂性的层层壁垒,加快您的全局创新步伐。我们携手共进,一定能够帮助各级工程师更方便、更快速、更准确地创造和实现技术进步。

我们隶属于锐联特(Ralliant)公司。锐联特在精密技术领域拥有值得信赖的测试与测量(Test and Measurement)、传感器与安全系统(Sensors and Safety Systems)等行业标杆品牌,汇聚全球精英团队,共同护航客户关键应用,携手缔造未来科技图景。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分