摘要:Windows环境下Matlab与TDS系列数字示波器的通信过程,给出了相关的通信程序,并在Matlab中对示波器读取的波形数据进行了频域处理。从而表明它们之间的通信在数字信号处理方面具有重要的实际意义。
关键词:Matlab 串行通信 示波器 数字信号处理 Tektronix公司的TDS系列数字实时示波器在国内已经得到广泛的应用,与其配套的扩展模块TDS2CM和TDS2MM模块具有与外部设备双向通讯的能力, 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'); fprinft(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'); |