PowerShorter 是为电压短路故障注入定制的一款专用设备,可实现被测设备的瞬时短路,干扰设备正常运行
设备已经上架淘宝啦,直接在淘宝搜索 PowerShorter 就能购买嗷
PowerShorter 具有两路短路引擎,也就是说可以同时拉两个位置的短路毛刺,同时配有两路 GPIO,一路固态继电器,一路电磁继电器
贴两张设备实物图,收纳包中有一个 PowerShorter 本体,一排杜邦线及一根 Type-C 数据线
一侧是 Type-C 接口及杜邦线排针,这一侧主要负责控制 GPIO 输出及触发引脚
其中 E1-Tri 和 E2-Tri 分别对应了短路引擎 E1 和 E2 的触发引脚;IO1 和 IO2 即为 GPIO 输出,可用来作为触发或供电
另一侧中的 Relay1 是固态继电器,Relay2 是电磁继电器,可以用来控制目标设备的重启复位等逻辑;E1 和 E2 是短路引擎做短路的位置;SMA-E1 和 SMA-E2 是用来观察短接毛刺使用的
在实际操作中需要把目标设备的核心供电引脚接到 + 标记的位置,目标设备的 GND 接到 - 标记的位置(当然 - 这个位置和 PowerShorter 的 GND 是相连的,因此目标设备 GND 引脚与 PowerShorter GND 连接后也可以不接这个位置)
其中的插线端子可以取下,这样就可以直接插杜邦线了,省了一个螺丝刀,但遇到质量不好的杜邦线就不如插线端子稳定了,大家看情况选择吧
设备使用 Python 进行控制,控制脚本在 gitee 开源了,地址如下:
https://gitee.com/osr-tech/powershorter
点击此处的发行版就可以下载 .whl 文件,使用 pip 进行安装
对于打故障来说,我更习惯于使用 jupyter lab 这个交互式的运行环境,所以可以再装一下 jupyter
pip install jupyter
安装完成后就可以在终端中输入 jupyter lab
这条命令,正常情况下会自动打开浏览器窗口,如果你电脑做了什么设置无法打开的话可以在浏览器手动访问 URL
点击新建一个 Notebook
然后就可以执行 Python 代码了,首先导入控制代码库,然后初始化设备:
from power_shorter import *
ps = PowerShorter('com92')
因为控制脚本是通过串口与 PowerShorter 进行通信的,因此初始化时需要指定串口号,可以在设备管理器中找到一个 CH340 的串口设备(若识别不到需要安装 CH340 串口驱动:https://www.wch.cn/products/CH340.html)
在 jupyter 网页环境中点击菜单栏的开始按钮就可以一条一条的执行代码,代码前面的中括号如果是星号 [ * ] 表示正在执行,如果是数字表示已经执行过了,如果是空的表示没有执行
可以通过 tab 键查看提示
在函数上按 shift+tab 键查看函数注释
设备经过初始化后就可以做各种操作啦,如果想要控制电磁继电器的话可以使用 RELAY2,执行这两条语句后会听到啪嗒啪嗒的声音,这就是电磁继电器吸合的响动
控制固态继电器通断只需要修改为 RELAY1 即可
同理,控制 GPIO 的方式是:
接下来介绍一下故障注入最重要的参数控制,延时和毛刺宽度的配置,在 PowerShorter 中,使用 engine_cfg 来进行配置
解释一下各个参数,首先需要指定配置的短路引擎,这里配置为 E1
然后通过一个参数列表来配置毛刺的延时和宽度,列表里面元组的第一个值使用 0、1 表示断开、短接;第二个值表示保持时间,单位是 10ns
例如这里的 [(0, 3000), (1, 200), (0, 1)] 就表示收到触发信号后,短路引擎保持断开状态 3000 * 10ns,然后执行短接 200 * 10ns,最后保持断开 1 * 10ns,如果后续不再操作将一直保持断开状态
这背后实际是控制 MOS 管对 E1 的 + 和 - 进行断开或短接,从而实现电压短路故障注入
后面三个参数分别是:
配置触发边沿是上升沿还是下降沿(默认为上升沿触发,可以不填写)
毛刺参数的重复次数,可以重复执行参数列表中配置的毛刺(默认配置为 1,可以不填写)
毛刺边沿检测次数,可以配置检测到多次边沿再触发毛刺(默认配置为 1,可以不填写)
那再回头看我们配置的参数,整体的含义是:配置短路引擎 E1 的触发引脚(E1-Tri)检测到上升沿后先等 3000 * 10ns,再拉一个 200 * 10ns 的短路毛刺,然后保持断开
配置完毛刺的参数后需要使用 arm 函数激活毛刺,可以使用 state 函数查看当前状态,armed 表示毛刺已经被激活了,正在等待触发,同时设备红色的 LED 灯会熄灭
此时如果用杜邦线将设备的 GPIO1 和 E1-Tri 连接,然后将 GPIO1 拉高提供一个上升沿将毛刺触发,再看毛刺的状态就已经是 glitched 表示已经毛刺已经打出去了,E1 的 + 和 - 做了一次 200 * 10ns 的短路,红灯也又亮了起来
对于故障注入来说,统计故障参数及结果是很有必要的,这样我们可以有参考的调整参数,统计结果可以使用 FaultViz 这个库
https://gitee.com/osr-tech/faultviz
这个库的使用需要配置 JAVA 环境,具体配置网上搜吧不细说了,安装完成后直接导入库,启用服务时需要指定端口(默认为 12345,可以不填写)
faultviz.start_view_service(port=12345)
然后通过 faultviz.ViewWidget() 创建一张表
vt.update() 往表里添加数据,这里面的数据完全是由你自己定义的,键值对的形式,键会作为列名,值会放在表中作为数据,执行过第一次 update() 函数后表中才有了实际数据,这时候就可以使用 vt.show() 查看记录了,可以对数据进行筛选、排序、导出等操作