本文记录通过Tek visa使得MATLAB调用示波器采集波形的方法,主要作用是记录,方便再次配置。
1 TEK驱动下载和配置
第一步:
在TeK官网下载VISA驱动:(搜索示波器型号即可)
泰克科技有限公司 - 测试、测量、监测行业领导者 | Tektronix
第二步:下载visa按默认安装:
安装后如下:(初始无对应的LAN)
可以在文件->首选项勾住:
(启动时扫描仪器必须开启,建议开启剩余两个)
调试搜索标准
配置所需要的连接方式:
第三步:配置连接,以网线(以太网连接为例)
需配置子网络(此时设备需要与电脑通过网线连接)
查看示波器utility->I/O
如下图:(为了便于后续使用选择Manual手动配置)
可以看到设备IP为192.168.0.5(可自行设置)
子掩码为:255.255.0.0
此时在浏览器中键入设备IP可管理设备(若可访问也说明通讯正常)
以太网配置:
在网络和控制中心设置:(点击以太网)
设置IP为设备IP的附近IP(不可相同)
如192.168.0.10等
子掩码为255.255.0.0
其保持他默认即可,点击确定
可以尝试控制台cmd中尝试
Ping 192.168.0.5 是否传输正常
若出现以上则说明通讯正常
完成以上操作TeKVISA配置完成
附说明书中的配置步骤:
2 MATLAB 的配置
MATLAB中Test & Measurement Tool tmtool)中配置:
首先需要安装tmtool附加内容:
安装后在command命令窗口键入tmtool打卡工具箱
若通过网线通讯则可找到TCPIP中有可选项
调整configure中的参数如图
InputBufferSize和OutputBufferSize控制采样点数(设为所需数目)
增加时延Timeout
SessionLoss中有(创建VISA对象等信息):
3 代码及测试实例(MATLAB)
调用代码(实例):
%将示波器设为对象;返回属性名称和属性值与指定项匹配的串行端口对象数组
obj1 = instrfind('Type', 'visa-tcpip', 'RsrcName', 'TCPIP0::192.168.0.5::inst0::INSTR', 'Tag', '');
% Create the VISA-TCPIP object if it does not exist
% otherwise use the object that was found.
if isempty(obj1)
obj1 = visa('TEK', 'TCPIP0::192.168.0.5::inst0::INSTR');
else
fclose(obj1);
obj1 = obj1(1);
end
fopen(obj1);
%指定获取波形的通道,格式,数据大小,采样长度;
fprintf(obj1,"DATa:SOUrce CH2");
fprintf(obj1,"DATa:ENCdg ASCII");
fprintf(obj1,"WFMOutpre:BYT_Nr 1");
fprintf(obj1,"DATa:STARt 1;STOP 100000");
fprintf(obj1,"WFMOutpre:ENCdg ASCii");
%获取示波器横坐标信息
cen_f = str2num(query(obj1,"WFMOutpre:CENTERFREQuency?"));
f_span = query(obj1,"WFMOutpre:DOMain?");
flushinput(obj1);
flushoutput(obj1);
numb = str2num(query(obj1,"WFMOutpre:NR_Pt?"));
samp_int = str2num(query(obj1,"WFMOutpre:XINcr?"));
h_basis = query(obj1,"WFMOUTPRE:XUNIT?");
flushinput(obj1);
flushoutput(obj1);
% 获取垂直坐标信息
dig_lel = str2num(query(obj1,"WFMOutpre:YMULT?"));
shift_y = str2num(query(obj1,"WFMOUTPRE:YZEro?"));
very_un = query(obj1,"WFMOUTPRE:YUNIT?");
form_wav = query(obj1,"WFMOutpre:ASC_Fmt?");
flushinput(obj1);
flushoutput(obj1);
%从示波器读取波形
R_mes=[];
waveform = str2num(query(obj1,"CURVe?"));
fclose(obj1);
%计算示波器横坐标
fin = samp_int*numb;
tim = [samp_int:samp_int:fin];
%计算电压值
x = waveform*dig_lel+shift_y;