Matlab与数字示波器的通信
2009-02-11
作者:李国治 徐春华 余岳辉 彭昭廉
摘 要: Windows环境下Matlab与TDS系列数字示波器的通信过程,给出了相关的通信程序,并在Matlab中对示波器读取的波形数据进行了频域处理。从而表明它们之间的通信在数字信号处理方面具有重要的实际意义。
关键词: Matlab 串行通信 示波器 数字信号处理
Tektronix公司的TDS系列数字实时示波器在国内已经得到广泛的应用,与其配套的扩展模块TDS2CM和TDS2MM模块具有与外部设备双向通讯的能力,可直接与打印机、微机连接,使波形的存储和打印等工作变得十分方便,其中TDS2MM还具有FFT功能,可以对波形进行实时的频谱分析。同机配送的Wavestar软件提供了PC机与示波器双向通讯的功能,具有良好的用户界面,但其数据处理功能却是很少,仅能对波形的幅值、频率、周期、上升和下降时间等进行测量,并且大多数用户出于价格考虑而配置TDS2CM模块,它不具备TDS2MM模块的频谱分析功能,这就限制了示波器的进一步开发利用。Mathworks公司的著名数值计算软件Matlab具有强大的数值计算功能,它的Instrument Control Toolbox提供了强大的外设控制功能,可以对GPIB、RS-232、VXI、Centronics端口进行控制。用Matlab与TDS2CM模块配合可以实现示波器与微机之间的数据通讯,利用Matlab强大的数值处理、矩阵运算功能可对示波器记录的波形数据进行分析和处理。
1 通信原理
Matlab中的Instrument Control Toolbox包括两大部件:M文件函数和接口驱动适配器。这两部件提供了Matlab与外设的通讯功能,其与串行通讯端口的通讯原理如图1所示。
由图1可见,Matlab的两大部件提供了一条外设与Matlab之间的交互通道,使用户与外设之间进行信息获取和传送。同许多高级语言一样,Matlab通过调用M文件函数来创建设备对象,得到设备的文件句柄,而设备驱动程序作为操作系统中直接控制硬件的模块,是链接操作系统内核与系统外部设备I/O操作的关键模块。它将具体的硬件细节隐藏实现对外设操作的透明,因此Matlab可以象操作文件一样实现对外设的读、写操作。读写时的数据传输格式、输入输出缓冲区大小以及读写溢出时间等由图1中的属性值定义,其根据为具体的通讯端口和通讯方式以及数据大小。示波器所产生的事件和状态被示波器保存在标准事件状态寄存器(SESR)、状态字节寄存器(SBR)和事件队列中,供Matlab回调函数读取。同时用户可以通过设置设备事件状态使能寄存器(DESER)以及事件状态使能寄存器(ESER)、服务请求使能寄存器(SRER)这三个使能寄存器来控制何种事件或状态被保存在状态寄存器和事件队列中。Matlab对示波器的设置和询问命令由fprintf函数以字符串的形式输出。设置和询问命令由具体的示波器厂商定义,其格式为:Header Arguments,多个参数之间由逗号相隔。当以二进制格式对示波器的波形进行数据读写时,读写数据与示波器实际数据换算由下式给出:
Xn=Xzero+Xincr·n
Yn=Yzero+Ymult(yn-Yoff) (1)
其中,yn为输入、输出缓冲区中的数据,n为数据个数,Xn、Yn为示波器中实际采样时间与信号幅值。
2 数据传输
RS-232串行通信接口被广泛应用于近距离的计算机和终端之间的相互通信当中,TDS210示波器也配接有DB9型插件的RS-232接口。当采用硬件握手方式进行通信控制时,示波器使用CD(Carrier Detect)、CTS(Clear To Send)、RI(Ring Indicator)三个控制信号表明其当前状态,而Matlab使用RTS(Request To Send)信号请求数据发送。由于采用异步通信协议对通信双方的时钟同步要求不太严格,由数据的起始位作为双方通信的同步信号,因此Matlab与示波器之间采用异步通信,编制的从示波器读取数据的部分程序如下:
%创造设备对象
g=serial(‘com1’);
%通信初始化g.InputBufferSize=10000;
g.timeout=10;
%设定传输波特率为9600b/s,字符格式为:8位数据位,1位停止位,终止符为LF,没有奇偶校验位,使用硬件握手方式。
g.BaudRate=9600;
g.Parity=‘none’;
g.StopBits=1;
g.Terminator=‘LF’;
g.FlowControl=‘hardware';
%连接到设备对象
fopen(g)
%数据传输
fprintf(g,'select: refa on');
fprintf(g,'data:source refa');
fprintf(g,'data:encdg srib');
fprintf(g,'data:start 1');
fprintf(g,'data:stop 2500');
fprintf(g,'data:width 2');
fprintf(g,'wfmpre:xzero?');
xzero=fscanf(g,'%f');
fprintf(g,'wfmpre:xincr?');
xincr=fscanf(g,'%f');
fprintf(g,'wfmpre:yzero?');
yzero=fscanf(g,'%f');
fprintf(g,'wfmpre:ymult?');
ymult=fscanf(g,'%f');
fprintf(g,'wfmpre:yoff?');
yoff=fscanf(g,'%f');
fprintf(g,'curve?');
out=fread(g,2500,'int16');
┆
%释放设备对象与端口
fclose(g);
delete(g);
freeserial('com1');
用上述程序对示波器进行读取的方波信号如图2所示。
3 数据分析实例
从示波器读取的数据按(1)式转换后就是实际测量所得的波形数据值,相应的采样频率为L1空间的信号满足绝对可积条件,可以用快速傅立叶变换算法直接进行频谱分析。图3为对读取的方波所做的FFT结果。由于对采样信号的截取相当于对信号加矩形窗,不可避免地引起频谱泄漏和混叠,在满足采样定理和保证示波器波形周期完整的条件下,所做的频谱分析结果与示波器所得的波形周期数无关。对于噪声信号可作功率谱估计,上述采样信号的功率谱估计如图4所示。
从上面的数据通信过程和对采样信号频谱分析及功率谱估计实例可以看出:Matlab与示波器组成了一个信号采集及分析系统,示波器在其间起数据采集和存储作用,而Matlab则实现对采样得到的信号进行分析和处理。
参考文献
1 于英民,莫 玮,于佳.计算机接口技术.北京:电子工业出版社,1999.10
2 王炳武, 胥 谞. MATLAB5.3实用教程.北京:中国水利水电出版社, 2000.7
3 Programmer Manual.TDS 200-Serial Digital Real-Time Oscilloscope. Tektronix, Inc.