作者 | Stuart Cording(Elektor)
译者 | 禾沐
测试有时是一件单调和枯燥的事情,寻找故障也十分具有挑战性。那么,为什么不利用测试和测量仪器上的通信接口来简化我们的测试过程呢?本文中我们将探索用Python进行控制,不需要昂贵的软件和授权的工具。
对于大多数开发者而言,测试和测量设备在工作台上只是静静地在等待任务。不过你把设备转到背面时,往往会看到通信接口。只要有合适的软件,我们就可以控制测量过程,并收集结果以供事后分析。寻找偶发事件和故障,或者在测试应用的多个系统参数时,这会非常有帮助。产品下线测试和元件的分级也可以用类似方式进行自动化测试。
1 实验室电源设备的远程控制
电源控制是一个很好的起点。大多数应用的硬重置都需要一次电源重启,更进阶的测试可能包括极端电源输入,甚至是过电压测试。这类测试在汽车中很常见,系统需要能承受400ms的87V输入(ISO 7637-2)。另一种和电源相关的常见故障模式是电压逐渐升高或降低。此时电路往往会进入欠压状态,不能自行恢复。最后,自动测试系统中的设备应该能够设定电压和最大电流,特别是系统会用于不同产品时。
近年来,实验室电源设备的价格大幅下降,面对大量低价的设备,知名厂商往往不愿意(或者无法)在价格上竞争,而是增加更多功能。我们不知道英国剑桥的Aim and Thurlby Thandar Instruments(Aim-TTi)是不是也是如此,但他们的产品确实无愧于公司口号“测得到的好价值”。在他们的直流电源产品中,入门级的EL-R系列(见图1)值得关注,特别是如果你想要试着搭建自动测试系统时。该系列的设备使用低噪音线性调节提供单、双和三输出,设备散热不使用风扇,输出范围是30到130W。设备上有一个或两个LED显示和模拟控制,一些型号还包括遥感终端。单输出的EL302P(支持RS-232接口)和EL302P-USB(支持USB接口)是值得关注的两个型号,它们的输出功率为60W,输出电压0-30V,电流0-2A。
图1 EL-R系列直流电源通过串行接口(RS-232或通过USB)实现的虚拟COM)支持测试自动化(来源:Aim-TTi)
这两个型号的设备包括软件驱动,厂家网站上还提供PSU Sequencer工具,帮助用户通过手动或者自动的方式逐步调整电压/电流设定(见图2)。软件还可以从数据表中引入预先准备好的序列。
图2:通过Aim-TTi的PSU Sequencer软件可以简单地进行电压/电流的重复设定(来源:Aim-TTi)
2 用Python进行电源控制
根据你的测试需要开发控制软件也不困难。设备的硬件RS-232接口的波特率为600到9600,USB接口则会以一个虚拟COM口的形式出现。用户手册中给出了全部的命令,稍做规划就可以开发一个将每个命令单独包装为函数/方法的软件库。一种方法是运用Arduino和一个RS-232收发器来控制电源供应,这种做法还有可以和其他测试功能结合的优势,例如信号传输中继或是捕捉模拟/数字信号。
或者,Python提供pySerial模块,利用它可以很容易地编写一个Python命令接口模块(见例1),实现自动控制机制。对文档稍加研究,还可以实现TCP/IP到串口的接口;实验性的RFC2217备忘录中定义了这一功能,让用户可以在远程PC上配置串口接口并实现通信。
例1:通过pySerial获取PSU ID的Python代码
3 示波器和自动化
示波器也能够远程控制。示波器有许多功能,从捕获模拟/数字信号到快速傅里叶变换,我们可以在多种自动测试中使用示波器。例如,一些故障需要一系列复杂事件以特定顺序出现才会发生。如果你的团队发现了触发故障的方法,下一步就是配置示波器捕获相关的信号,帮助寻找故障的原因。
Arduino和树莓派等开发板可以通过模拟输出和数字信号很快变成触发故障的工具,需要时还可以增加信号中继或是场效应管。这些开发板还能向示波器提供准确的触发信号,帮助采集分析故障所需的数据。
大多数示波器上有USB和LAN接口,但是一些型号只支持私有软件或是只能从浏览器上进行配置。好消息是,我们已经有了一个基于USB的测试和测量类规格(USBTMC)。类似于存储设备类(闪存盘等)和人机接口设备类(键盘、鼠标等),这一USB类预先定义好了与测试和测量设备交互的命令。
一些示波器支持USBTMC,像是200MHz、2GSa/s(GSa/s:每秒千兆采样)的B&K Precision 2567B混合信号示波器(见图3)。该设备上搭载4个模拟频道,有一个16频道的数字接口,内置50MHz随机波形产生器,支持高级触发方式。虽然它10.1寸的触摸屏让手动配置变得十分简单,我们同样可以很容易地通过USB进行配置。
图3 B&K Precision 2560B系列混合信号示波器的USB接口兼容USBTMC规格,
可以很容易地用Python进行自动化(来源:B&K Precision)
4 示波器的远程配置
多亏了Alex Forencich在GitHub上的USBTMC开源项目,Python是进行示波器远程配置的最佳编程语言。在Linux上使用这一模块需要适当的权限,在Windows上则需要先安装PyUSB和libusb。
首先,你需要指定用于识别USB设备的厂商(VID)和产品(PID)信息。在Linux上,你可以连接你的设备,然后在命令行运行lsusb,命令的结果会包括这些信息。在Windows上,你可以从设备管理器的设备属性中找到必要的信息。在两种系统中VID和PID都应该是16位的16进制数值。
然后,需要在Python代码中引入usbtmc模块,并使用其中的接口(API)。代码基本上就是在屏幕上打印文字,并读取键盘输入。USBTMC的本质就是和测试/测量仪器进行通信的包装层,控制命令是根据示波器的编程指南实现的ASCII字符串,其中包含设备支持的选项。如果设备支持,也可以使用VISA资源字符串。
设备的VID和PID是针对产品,而不是特定单元的。因此,如果有两台以上同型设备,可以用它们的序列号作为第三个参数。一般可以从设备的标签上获得序列号,或者通过“*IDN?”命令查询(见例2)。
例2:通过usbtmc控制B&K Precision示波器的Python代码
示波器间的主要区别是带宽、取样速度和存储容量。有时候,一些型号上会搭载实用的小功能。B&K系列支持矮脉冲触发(见图4),即一个信号跨过一个阙值,但是并未达到另一个阙值(例如,负矮脉冲跨过了较高的电平,而没有越过较低的电平)。分析故障时,设备上的小功能有时会非常有帮助。
图4 矮脉冲触发可以帮助寻找没有完全升起或降低的脉冲(来源:B&K Precision)
5 无显示的测试设备
Red Pitaya的测试设备让我们产生了疑问,每个工具都需要自己的显示器吗?强大的FPGA和以太网接口能够让你的PC/笔记本电脑成为用户界面。Liquid Instruments的Moku:Lab也采用了类似的思路,只有餐盘大小的设备上有一系列模拟输入和输出接口,让Moku:Lab成为了盒子里的实验室。
Moku:Lab的正面有四个BNC接头(见图5),右边的一对提供模拟输出,支持1GSa/s(每秒10亿)采样率,分辨率为16位,带宽大于300MHz(3dB衰减)。左边的一对是模拟输入,带宽为200MHz(3dB衰减),输入阻抗50Ω,12位分辨率下采样率为每频道500MSa/s(每秒5亿)。设备内部的时基精度好于500ppb。设备支持触发输入,提供同步多个单元用的接头。有线连接通过以太网和USB接口实现,第二个USB口还可以用来给平板电脑充电。最后,还有一个SD卡槽和直流电源接口。
图5 餐盘大小的Moku:Lab是一台12合一的仪器,可以通过Python API进行配置(来源:Liquid Instruments)
尽管Moku:Lab上搭载了有线接口,它的设计主要是通过Wi-Fi(802.11b/g/n)配合iPad上配套的应用使用。在应用的用户界面上可以选择12种不同的仪器,从我们熟悉的示波器和频谱分析器,到少见的PID控制器和激光锁盒。设备还可以用作数据记录仪,采样率不到100kSa/s(每秒10万)时,存储上限由插入的SD卡决定(即直接写入SD卡);采样率较高时,可以以最高1MSa/s(每秒百万)的速率在内部存储中进行记录。
与其他现代的工具类似,Moku:Lab提供Python API,支持MATLAB和LABVIEW,并附带数个样例(例3)。设备可以很快地整合到一个自动测试系统中,也非常适合射频设备的大规模测试和元件的分级。
例3:在Moku:Lab上生成随机波形的Python代码
6 节省时间、提升准确性
在复杂系统中,测试设备就是工程师的眼睛,但它们也不是万能的。偶发事件很难进行跟踪,只有知道故障成因时才能提出解决方案。虽然复杂度各不相同,如今很多测试和测量仪器都提供编程API,而易于学习的Python往往是首选的编程语言。如果你想要的测量场景很难触发,需要多组操作来完成一轮测试,或者需要大量重复操作,那么实现自动化是解决之道,也许并没有你想的那么困难。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !