电脑连接示波器读取数据

示波器型号:北京普源的RIGOL MSO4034

首先连接示波器:
在这里插入图片描述
连接线与示波器相连的端口如上图USB DEVICE所示,是一个比较奇怪的方形接口。连接线的另一端是标准的USB typeA接口,可以直接插在电脑上,当示波器和电脑连接时,电脑会提示安装驱动。

该型号示波器端口是业界通用的标准驱动VISA设计,可以使用SCPI命令控制。

首先下载NI的Ultra Sigma软件,安装,启动。下载链接:https://pan.baidu.com/s/1K8u5ZoB2D31aix76tGqZcg
提取码:ngr7

如果和示波器的连接正常,就如下图显示:
在这里插入图片描述
可以打印当前示波器屏幕。右键型号,操作,打印,步骤如下图所示:
在这里插入图片描述
打印出来的是个bmp图片,存在电脑的硬盘中。
在这里插入图片描述

在打印步骤的菜单中,选择复制地址“Copy address”,可以把仪器的地址复制到剪切板中,例如我的示波器地址为:USB0::0x1AB1::0x04B1::DS4C193400320::INSTR

用matlab编写程序,通过发送SCPI命令控制示波器,具体的编程手册可以在普源官网找到,这里就简单的读取数据并做个FFT吧。

clear all

%创建设备。第一个参数为销售商参数,可以为agilent、NI或tek,第二个参数为资源描述符。创建后需要设置设备的属性,本例中设置输入缓存的长度为2048。
mso4000 = visa( 'NI','USB0::0x1AB1::0x04B1::DS4C193400320::INSTR' );
mso4000.InputBufferSize = 2048;

%打开设备。
fopen( mso4000 );

%请求数据。
% fprintf(mso4000, ':WAVeform:POINts?');%查询采样总点数
% [data1,len1]= fread( mso4000, 2048 );%返回的是1400的ascii码
fprintf(mso4000, ':WAVeform:DATA?');
[data,len]= fread( mso4000, 2048 );
fprintf(mso4000, ':WAVeform:XINCrement?');%查询时间刻度
[taudata,~]= fread( mso4000, 2048 );
tau=str2double(char(taudata)');%字节转换成数字

fprintf(mso4000, ':WAVeform:YINCrement?');%查询电压刻度
[Vscaledata,~]= fread( mso4000, 2048 );
Vscale=str2double(char(Vscaledata)');%字节转换成数字

fprintf(mso4000, ':WAVeform:YREFerence?');%查询电压参考线位置
[Vrefdata,~]= fread( mso4000, 2048 );
Vref=str2double(char(Vrefdata)');%字节转换成数字

fprintf(mso4000, ':WAVeform:YORigin?');%查询电压偏移
[Vbiasdata,~]= fread( mso4000, 2048 );
Vbias=str2double(char(Vbiasdata)');%字节转换成数字

%关闭设备。
fclose( mso4000 );
delete(mso4000);
clear mso4000;

%数据处理。读取的波形数据含有TMC头,对于MSO4000/DS4000/DS6000其长度为11个字节,其中前2个字节分别为TMC头标志符#和宽度描述符9,接着的9个字节为数据长度,然后是波形数据,最后一个字节为结束符0x0A。所以,读取的有效波形数据点为12到倒数第2个点。
wave = data(12:len-1);
wave = wave';
wave=wave-Vref-Vbias;%减去参考线的位置再减去偏移
wave=wave.*Vscale;%幅度乘以电压刻度
wavelen=length(wave);
t=0:tau:(wavelen-1)*tau;

subplot(211);
plot( t,wave );
title("示波器上的数据")
xlabel("时刻/s")
ylabel("电压/v")
grid on

fs=1/tau;%采样速率
f=(0:wavelen-1)*fs/wavelen; %真实频率
X=abs(fft(wave));
subplot(212);
plot(f(1:wavelen/2),X(1:wavelen/2)*2/wavelen);%单边频谱 
xlabel("f/Hz")
ylabel("幅度")
xlim([-fs/20,fs/2])%显示出0频
grid on

代码第三行的visa函数的第二个参数应该用自己的示波器地址。

这是运行后的结果:
在这里插入图片描述
可以看出,拿示波器实现了频谱仪的效果。方波是1kHz的,频谱图显示信号包含直流、1kHz频率及其高次谐波,与实际情况吻合。

如果有警告:
警告: The EOI line was asserted before SIZE values were available.
‘visa’ unable to read all requested data. For more information on possible reasons, see VISA Read
Warnings.
不用担心,这是因为我们请求了2048字节的数据,但是返回的数据没那么长导致的。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值