ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Keysight精密SMU软件控制详解:从SCPI到Python实现高效I-V扫描

Keysight精密SMU软件控制详解:从SCPI到Python实现高效I-V扫描 这几天仪器圈里好几个朋友都在转Keysight是德科技新发的精密SMU系列软件控制选项问的人多了我就把这几年用SMU的经验一起理了理。这个新闻往小了看是一次固件和软件包的更新往大了看它透露出一个趋势精密源表已经不只是台“实验室仪器”它正在变成产线测试、芯片验证、材料研究这些场景里一个高度软件化的数据采集节点。我最早接触SMU是在做半导体器件IV特性测试的时候那时候还在用老式的GPIB线一根根连好再写SCPI命令去控制过程不算复杂但真要做好坑还是不少。所以我这篇就拿这个新发布的软件控制选项当引子把SMU的选型、接线、SCPI/Python控制、I-V扫描这些实操细节一路拆开讲最后再聊聊和示波器测MIPI高速信号、ADS仿真联动这些扩展场景。如果你想在实验室里把一台源表真正用起来该注意什么、该避开什么这篇文章应该够你参考了。1. 这次发布的核心是什么SMU软件控制的进化方向1.1 先弄清楚SMU本身源表是干嘛的SMU的全称是Source Measure Unit中文叫源测量单元也有人习惯叫“源表”。你可以把它理解成一台“既能当电源用、又能当万用表用、还能自己完成电压电流切换和量程切换”的一体化仪器。它的典型工作方式是四象限输出既可以正电压正电流往外送功率也可以正电压负电流吸收功率这让它能支持从简单的二极管正向特性扫描到复杂的电池充放电、太阳能电池板发电曲线、半导体器件击穿特性等测试场景。以Keysight常见的B2900B系列为例单台仪器就集成了电压源、电流源、高精度电压表、高精度电流表、电阻表等功能。你不需要像以前那样把一台稳压电源、一台数字万用表、一台电子负载串在一起再用一堆线缆手忙脚乱地切换量程。一台SMU全部搞定而且测量精度往往比普通分立仪器更高。B2911B这种单通道型号适合移动设备功耗测试场景B2912B双通道更适合差分管脚或传感器对比测试。这次发布会提到的“Precision SMU Series”业内一般理解为是德科技对现有精密SMU产品线涵盖B2900系列、PZ2100系列等在软件控制层进行一次集中升级。Keysight向来是“软件定义仪器”走得比较靠前的厂家B2900系列当年刚推出时就主打“比上一代快10倍的测量速度、支持Windows下直接人机界面控制”现在再加码软件控制选项说明他们很清楚测试设备到了后期拼的不只是ADC精度和高速采样而是怎么让仪器在自动化系统里被更好地“调用”。1.2 “软件控制选项”解决的实际问题很多刚接触SMU的朋友会问为什么电源加万用表不够用为什么非要一个具备完整软件控制生态的SMU答案在于自动化测试场景里软件控制能力直接决定项目的复杂度和交付周期。传统电源和万用表组合最大的问题在于同步性。你需要用GPIB总线把电源的电压切换、万用表的电流读取、继电器开关动作串成一个时序每一步都要写对应的SCPI命令。遇到量程切换还要额外等待一段时间稳定典型的测量一个I-V曲线可能要几秒甚至几十秒。而SMU内部完成了电压设定、电流采样、量程切换、数据缓冲这一整条链路软件只需一条测量指令仪器内部就能按预设好的触发时序完成全流程单点测量时间可以到微秒级扫描一条完整曲线也就毫秒到百毫秒级这对产线节拍和实验室批量数据收集都是本质区别。在软件层面Keysight这次发布的选项说白了就是给了你更多“怎么和仪器说话”的方式。传统控制基本就是SCPI命令加VISA驱动通过GPIB、USB、LAN口下发字符串命令。现在新的软件控制选项则包括了更完整的IVI-COM驱动、IVI-C驱动、针对Python/REST API的直接支持还有PathWave系列软件工具链的深度集成。这意味着你不需要再自己从零封装SCPI命令直接调用驱动API就能拿到数据实现跨平台的自动化测试脚本。1.3 与旧方案的对比PC远程控制、IVI驱动、PathWave回头看看我自己最早用SMU的经历那时候实验室用的是Keysight前辈产品当年还是安捷伦时代控制方式主要就是两条前面板手动按键或者GPIBSCPI。前面板适合临时测一两个点GPIBSCPI适合简单脚本远程控制但缺点也很明显命令集成度低从“设置电压”到“读回电流”要拆成好几条命令忘了设置量程或保护值轻则测量数据异常重则把被测器件烧了。数据处理弱仪器本身只看得到一个数字曲线绘图、统计、异常值标记全都要靠外部软件再做一遍。排查问题难反馈不及时出错了看错误代码再去查几百页编程手册。新的软件控制选项本质就是把这些麻烦事压到驱动层和软件工具层。比如Keysight的PathWave IV Measurement Manager以前叫EasyEXPERT可以直接控制SMU完成自动I-V扫描、数据拟合、参数提取还能一键生成报告。你不再需要写命令界面点几下就得到想要的曲线底层命令由软件自动生成。这种模式对很多刚转入半导体测试的工程师来说学习曲线友好太多。不过我这里也要说句实话越方便的预置方案中间出现问题时越容易黑盒化。我在实际项目中碰过很多次“软件生成的配置看起来没问题但就是测不准”的情况最后还是得回到最底层去分析SCPI命令和量程设置。所以这篇文章我不会只教你怎么用现成工具而是从底层原理把SMU控制的关键点讲清楚这样就算以后换了品牌、换了型号你也能快速上手。2. 从硬件到软件读懂Keysight SMU的控制生态2.1 传统控制方式GPIB/SCPI和前面板SCPIStandard Commands for Programmable Instruments是仪器编程事实上的标准语言。它规定了类似:SOUR:VOLT 1.0;:SENS:CURR:DC;:MEAS:CURR?这样的语法结构带冒号的分层关键字体系问号结尾表示查询。无论你是用Keysight还是别家仪器只要支持SCPI拿到仪器手册查命令表就能写控制程序。GPIBIEEE 488总线则是老一代仪器控制主流的物理接口特点是可靠、抗干扰、适合多设备级联缺点是线缆粗笨、速度上限不高、连接不方便。现在大多数新SMU都标配USB和LANLXIGPIB在实验室里逐渐成了配角。让我印象很深的是有一年我在产线现场调设备临时要用笔记本电脑连一台老SMU笔记本没有GPIB卡找了一晚上才找到一个USB转GPIB的转接线。从那以后我选仪器时优先看它是否原生支持LAN或USB接口能用网线解决的问题别再用转接方案绕。SCPI命令本身不复杂复杂的是命令和仪器状态之间的耦合关系。最常见的坑是“先设源后设保护再开输出”这个顺序问题。有的调试人员习惯先把输出打开再去设限流限压结果一瞬间的浪涌电流直接打坏了被测样品。SMU的内部状态机是很严格的输出OUTP一旦置ON源和测量相关设定就会立即生效如果你没设保护值那就等于裸奔。写程序时顺序一定要固定把保护值放在输出前一行的位置。2.2 新的软件控制选项有哪些回到Keysight这次的软件控制选项我结合公开资料和自己的理解整理了几项IVI-COM/IVI-C驱动这是工业标准的仪器驱动接口适用面比SCPI更广。你不需要关心仪器是通过GPIB还是USB连接驱动内部帮你做掉了。对于使用LabVIEW、C#、Visual Studio等开发环境的团队来说IVI驱动用起来比裸写SCPI简单得多。Python VISA/PyVISA支持出了名的省事装一个pyvisa库几行代码就能连上仪器。配合pandas、matplotlib做数据分析和绘图基本上就是现代测量脚本的标配。REST API和Web接口部分新型SMU内置了Web服务器你可以直接用浏览器访问仪器界面或者通过REST API从任何编程语言发起测量请求。这个方向特别适合跨平台、云原生测试系统。PathWave软件家族集成PathWave是Keysight统一的软件平台涵盖了BenchVue、Command Expert、PathWave IV Measurement Manager等工具。BenchVue可以快速搭建虚拟仪器面板Command Expert可以让你不用编程就生成SCPI命令IV Measurement Manager可以做深度IV分析。我个人的判断是Keysight这个“软件控制选项”更核心的价值在于把上面这些接口整合到“一款仪器可无缝选配”的框架里。以前你买一台SMU拿到手可能只有一个基础驱动要做高级控制得自己找软件包。现在直接在订货时选配好对应的控制选项固件、驱动、许可证一套到位省去部署时的很多时间。2.3 为什么Python/VISA控制成主流近五六年我在行业里看到的最大变化就是Python在测试测量领域的普及程度。以前写自动化测试脚本LabVIEW是主流C#和C也不少但Python因为语法简洁、数据生态强大、上手门槛低现在成了很多研发验证团队的首选。Keysight的官方例子、社区讨论、Github样例也越来越多地用Python。用Python控制SMU的基本流程是本机安装pyvisa库连接仪器USB/LAN/GPIB通过SCPI命令发送测量请求然后获取数据、做分析。别人可能要一上午完成的一次I-V扫描任务用Python脚本十分钟就能建好模型。更重要的是Python在下游数据处理端有天然优势一套脚本可以直接调用SciPy做曲线拟合、用Matplotlib画图、把数据写进CSV或者数据库这在LabVIEW里要做不少额外工作。跑Python控制脚本之前先确认你的VISA后端装好了。Windows系统我一般推荐装Keysight IO Libraries Suite它自带完整的VISA运行时可以自动发现USB和LAN仪器。如果用NI-VISA也没有问题只是要注意不同厂商的VISA资源字符串格式有时候不一样。如果你在Linux下工作推荐安装python3-pyvisa和python3-pyvisa-py纯Python实现的后端这样连Keysight的IO库都不用装直接靠USBTMC、LAN和GPIB协议栈访问仪器。2.4 在产线自动化中的角色专业分工上SMU并不是只待在实验室里的。半导体参数测试机、 电池分选机、传感器调测台这些产线设备里面都有SMU的身影。产线场景对软件控制提出了和实验室完全不同的要求稳定性优先产线工位的软件配置一旦确定尽量不做变动。任何驱动升级都可能影响既有流程所以选配软件控制选项时要和现有MES系统兼容性优先验证。吞吐量敏感产线上每个器件的测试时间直接决定了产能。SMU的软件控制延迟、量程切换时间、数据传输时间都成了瓶颈。这也是为什么现在越来越多产线用LAN直连代替GPIB因为GPIB理论带宽只有1MB/s而LAN是千兆起步一次上万点的扫描数据几秒钟就能传完。权限管理工程师不会把仪器完全开放给操作员。新的Web控制方式可以做到只给操作员一个测试界面真正的高级配置依然锁在管理员权限后面。如果你做的是半导体芯片量产测试建议在选SMU软件控制方式时先画清楚整个数据流从测试工位到数据库再到分析平台。SMU在这条链路里只是数据源之一它能不能稳定输出“干净的数据”直接决定了后面的数据分析有没有意义。3. 实操用Python控制Keysight SMU完成I-V扫描3.1 准备工作环境与仪器这部分我用Keysight B2902B来演示因为我自己手头有这台而且它双通道、最高210V/10.5A的组合在二极管、MOS管、电池测试里都够用。如果你的仪器是别的型号也没关系SCPI命令大体相通查一下对应手册的命令表即可。准备工作分三块连接方式我会优先用LAN口连接因为速度最快、故障率最低。仪器开机后会在屏幕上显示IP地址确保电脑和仪器在同一网段用ping探一下能通。USB连接也可以但要装好USBTMC驱动Windows下一般插上就能看到对应的VISA资源。环境安装电脑上装好Python 3.8以上版本然后执行pip install pyvisa。如果你用纯Python后端再装pip install pyvisa-py。Windows系统建议再装Keysight IO Libraries Suite提供更稳定的VISA运行时。验证资源打开Python交互环境运行以下代码查看仪器是否被识别import pyvisa rm pyvisa.ResourceManager() print(rm.list_resources())如果看到类似TCPIP0::192.168.1.101::INSTR或者USB0::0x2A8D::0x1001::MY********::INSTR这样的字符串就说明仪器已经被找到了。没看到的话优先检查网线/驱动和IP地址。3.2 连接仪器VISA地址与SCPI连接仪器时最常遇到的问题就是资源字符串写错。TCPIP地址的写法有很多种TCPIP0::192.168.1.101::INSTR是通用形式有些型号支持TCPIP0::192.168.1.101::5025::SOCKET这种SOCKET直连方式后者在pyvisa里也是兼容的但我不推荐新手用因为SOCKET模式没有严格的仪器状态机管理容易出一些奇怪问题。用标准的INSTR模式和VISA库打交道是最稳的。建立连接后第一件事是发*IDN?查询仪器身份确认连接无误import pyvisa rm pyvisa.ResourceManager() inst rm.open_resource(TCPIP0::192.168.1.101::INSTR) print(inst.query(*IDN?))返回的字符串应该包含厂商、型号、序列号和固件版本比如Keysight Technologies,B2902B,MY********,A.05.03。这一步花不了十秒钟但能避免后面排查问题时怀疑是不是连错了设备。3.3 一次完整的I-V扫描代码下面这个例子是扫描一个二极管从0V到2V的正向IV曲线步进0.02V每个点间隔10ms采样。我把整个过程拆成“复位-配置-扫描-关输出-读取”五个阶段来写import pyvisa import time import numpy as np rm pyvisa.ResourceManager() inst rm.open_resource(TCPIP0::192.168.1.101::INSTR) inst.timeout 10000 # 10秒超时 # 1. 复位到默认状态 inst.write(*RST) time.sleep(0.1) # 2. 配置源和测量 inst.write(:SOUR1:FUNC VOLT) # 通道1设为电压源 inst.write(:SOUR1:VOLT:MODE SWEEP) # 扫描模式 inst.write(:SOUR1:VOLT:STAR 0.0) # 起始电压0V inst.write(:SOUR1:VOLT:STOP 2.0) # 终止电压2V inst.write(:SOUR1:VOLT:STEP 0.02) # 步进0.02V inst.write(:SENS1:FUNC CURR) # 测量电流 inst.write(:SENS1:CURR:PROT 0.1) # 限流100mA保护器件 inst.write(:SENS1:CURR:RANG 0.1) # 电流量程100mA先于输出设定 # 3. 设置扫描时间间隔和触发 inst.write(:SOUR1:SWE:SPAC LIN) # 线性扫描 inst.write(:SOUR1:SWE:POIN 101) # 扫描点数0到2V步进0.02共101点 inst.write(:TRIG:SOUR AINT) # 自动触发模式 inst.write(:TRIG:COUN 101) # 4. 开启输出等待扫描完成关输出 inst.write(:OUTP1 ON) time.sleep(1.0) # 等扫描完成 inst.write(:OUTP1 OFF) # 5. 读取测量结果 voltages inst.query_ascii_values(:READ:ARR:VOLT?) currents inst.query_ascii_values(:READ:ARR:CURR?) for v, c in zip(voltages, currents): print(f{v:.4f} V, {c:.6e} A)这里有两个细节值得注意一是保护值设定必须在输出电压之前因为一旦OUTP1 ON源就会按配置的电压值生效二是扫描完成后的读取命令最好用query_ascii_values而不是query再去手动解析字符串因为Python VISA会把返回的逗号分隔字符串转成列表省去很多麻烦。如果把上面这段脚本跑通再配合matplotlib画图你就已经具备了一个最基本的半导体IV测试工具。当然后面还可以扩展出自动寻找量程、多通道同步、温度扫描、数据自动存盘等功能我在后面问题章节会提一部分。3.4 实操中常见的坑在我教过的新人里常见问题几乎都集中在三处超时设置太小读取上万点数据时需要几秒到几十秒inst.timeout没调大程序会报超时错误。建议设成10000ms以上或者按数据量估算。忽略源和测量量程的先后顺序我记得有次帮同事排查问题二极管I-V曲线前半段总是平白多出一个台阶折腾了半天最后发现是电流量程设得太细小电流区数值溢出需要等量程自动切换。后来我改成先设一个较宽的初始量程扫描结束后再用量程检测指令去做精测。输出忘记关脚本异常中断后如果程序没处理finally语句把输出置OFFSMU会保持在输出ON状态。这对二极管还好对低功耗芯片可能就是灾难。建议在脚本里用try/finally包住整个测量流程确保无论报错还是正常结束最后都执行OUTP OFF。4. 延伸场景软件生态中的SMU、示波器与ADS4.1 Keysight示波器测试解析MIPI高速信号有了SMU控制经验后很多工程师会发现自己桌上另一台常见的Keysight设备是示波器。热词里“keysight示波器如何测试解析mipi高速信号”这个搜索热度挺高其实它和SMU软件控制属于同一个思路仪器不是独立工作的要结合协议分析、模板测试和软件解码才能发挥最大价值。MIPI是移动设备里用的高速串行接口标准D-PHY、C-PHY、M-PHY各有不同的物理层特性。用Keysight示波器测试MIPI信号通常分三步使用高带宽示波器至少6GHz以上加差分探头获取MIPI高速信号波形。低速的LPLow Power信号可以用单端探头高速的HSHigh Speed信号必须用差分探头否则信号质量分析没有意义。在示波器里启用MIPI一致性测试软件或协议解码功能。Keysight的Infiniium系列示波器支持MIPI D-PHY/C-PHY/M-PHY的自动一致性测试模板、眼图、抖动分析一套流程下来比手动测量快得多。把波形导出到PathWave软件或ADS中进行深入的眼图和均衡分析。这个流程里面有不少是和SMU控制类似的思维范式比如模板测试前要设定好阈值电压、切换电压这些参数不设好就测不出准确结果再比如解码时信号速率要和示波器采样率匹配采样率不足会导致码型误判。搞过SMU以后你会习惯这种“先配参数再跑测试”的节奏面对示波器的高级分析功能时也不至于一头雾水。4.2 ADS与实测数据配合仿真-测试工作流ADSAdvanced Design System是Keysight旗下EDA软件在高频、射频、信号完整性领域用得非常广泛。很多做高速数字设计的人会问ADS仿真和实测到底怎么配合我的经验是“先仿真定位后实测验证”而这个工作流里SMU和示波器都可以是数据源。以电源完整性为例你用ADS做一块PCB的电源分配网络PDN仿真时需要输入去耦电容的寄生参数这些参数从哪儿来除了数据手册最可靠的办法就是用SMU实测电容的阻抗-频率曲线然后导入ADS模型。先用SMU的IV扫描功能测出电容的漏电流、等效串联电阻再用网络分析仪或阻抗分析仪测高频阻抗把这些实测曲线带入仿真模型仿真结果才更贴近实际电路。反过来ADS仿真也能指导测试。我做过一个LED驱动电路的功耗优化项目先在ADS里搭建了完整的电池-开关转换器-LED负载的仿真模型仿真中确定了最优的开关频率和电感值再去实际电路上用SMU测电池输入功率和LED电流两边数据的误差小于3%。这种做法最大的好处是仿真里可以建模不同温度、不同负载下的行为帮你缩小测试范围而不是盲目去测一堆无关组合。4.3 BenchVue/Command Expert这类工具怎么用如果你不写代码也不想记住SCPI命令Keysight的BenchVue和Command Expert是很好的跳板。BenchVue是一个虚拟仪器面板工具把SMU、示波器、电源、万用表等设备拖到一个界面里直接可视化采集数据。Command Expert则可以让你通过图形界面设定命令序列并生成SCPI代码一键生成代码后粘到你的Python或LabVIEW程序里。我个人的建议是日常快速验证可以用BenchVue但要交付一个可复用的自动化方案时还是要把核心逻辑移植到Python脚本里。原因很简单BenchVue的操作记录和复用性确实不如脚本文件团队协作时别人拿到你的Python脚本就能跑拿到你的BenchVue工程文件还得有一台装了BenchVue的电脑。5. 经验与避坑控制SMU时最该注意的几件事5.1 量程设置顺序为什么重要SMU的量程决定测量分辨率和最大可测范围。你设置100mA量程ADC的分辨率可能就到1uA而设置1uA量程分辨率可能到pA级。但量程设得太小测量信号超限就会报错或钳位。更关键的是量程设置会直接影响源的输出精度和稳定时间尤其在低电流测量场景量程切换后需要等待一定时间让内部电路稳定否则测出来的数据漂移非常明显。经验法则先根据预计最大电流设置一个较宽的保护量程确保测试安全扫描过程中如果需要高精度小信号测量再在数据后处理时用量程回读的数据做校准而不是一开始就赌一个很窄的量程。测试脚本里可以用:SENS:CURR:RANG:AUTO ON让仪器的自动量程功能介入但要注意自动量程会带来额外的切换时间不确定时宁可先用固定量程跑一遍摸底。5.2 地环路与线缆补偿SMU精度再高也怕外部噪声。我后来给SMU配了专用的三同轴triax测试线而不是随便拿一对香蕉头线就是因为在低电流测试中普通的BNC线/鳄鱼夹线带来的漏电流和线缆电容拖累了整个测试。三同轴线缆的内层屏蔽和外部屏蔽可以分别接到不同的地能有效减小地环路引起的交流噪声。如果你测的是高电阻材料比如绝缘薄膜、陶瓷电容漏电流我建议在接触被测样品前先测一遍不带样品的开路基线看看环境本底噪声水平。我在做纳米材料导电性测试时本底电流只有几十pA但一旦换了环境就涨到nA级这时候必须检查探头台、静电消除器和桌面的接地状态。5.3 数据记录与采样率SMU本身有数据缓冲功能比如B2900B系列可以存储多达10万个测量点。但如果你用软件逐点查询每一条SCPI命令都有往返延迟采样率可能就被压到几百赫兹以下。要得到SMU真正的最大采样率你需要用INIT:TRAN触发一次预定的扫描让仪器自己完成批量测量然后一次性读回所有缓冲数据而不是一点一点去问。另外数据记录时推荐同时记录时间戳和仪器状态字。很多次排查问题都是靠时间戳看出“数据在第几秒开始漂移”又靠状态字发现“当时仪器其实进入了超限保护状态”。如果只记录电压电流两个数字后面想复盘就很难了。5.4 快速排查表现象可能原因排查方法读数一直为0输出没开或源量程和测量量程不匹配检查OUTP?查询输出状态打印所有配置数据跳变严重地环路、线缆接触不良、被测件接触电阻大换三同轴线重新夹紧测开路基线低频漂移环境温度变化、仪器未充分预热开机预热30分钟再测必要时恒温环境报“超限”错误保护值设置过小或量程设置过窄查错误代码适当放宽保护值扫描速度慢自动量程模式开启或GPIB传输太慢改用LAN连接固定量程用缓冲读取这个表格是我在实际调试时常用的一张速查表不一定覆盖所有情况但至少能帮你快速定位80%的常见问题。最后说一点我个人用了这么多年SMU的真实体会仪器越智能、软件选项越丰富越要把底层原理搞清楚。Keysight这次发布新精密SMU系列的软件控制选项本质上是为了让工程师更高效地把SMU集成到自动化系统里但你要是连SCPI命令的基本结构、保护值设置的顺序、量程和地线的影响都没概念那再好的软件也帮不了你。我自己踩过的这些坑花在排查上的时间比真正写代码的时间多得多。希望大家看完这篇文章能少走这些弯路把精力放在更有价值的测试设计和数据分析上。
返回列表