基于FIFO存储的高速脱机波形记录系统

2014-03-22 01:50贺有智王大正刘福才
仪表技术与传感器 2014年9期
关键词:管脚时钟波形

贺有智,王大正,吴 晨,刘福才

(燕山大学,工业计算机控制工程河北省重点实验室,河北秦皇岛 066004)

0 引言

在实验中,经常需要观察一个短暂的波形,如电容、电感放电信号等等,这类波形有作用时间短和发生时刻相对不确定两个共同的特点。在以往的观察实验中,通常是在PC计算机上使用PCI接口的数据采集卡,利用高级语言程序控制记录,由于高级语言程序运行时的不确定性,并不能准确地记录下所需要的波形,为了保证数据的完整性,只能连续采集并筛选,这样浪费了大量的系统资源,而且计算机的处理能力直接限制采样周期和数据精度[1]。从实现的角度来分析,PC计算机波形记录系统又有成本高,体积大,在相对恶劣的条件下不能连续工作等缺陷,不利于实际应用。

文中以在2.4 ms的时间内使用FIFO记录8路0~5 V的电压信号为例,设计了数字波形记录系统,其中每路存储1000组12bit精度的数据。系统把数据采集和数据上传分成了2个独立的过程,实现了脱机数据采集,数据最终可以通过USB总线传至上位计算机系统,用于分析和处理。系统受外信号触发,在触发之后的2.4576ms内以300ns为一个采样周期连续记录8 000组数据,其中每路1 000组数据,多出的数据用于弥补系统延时从而保证波形的完整性。

1 系统总体结构方案

系统总体结构方案如图1所示。8路模拟量通过多路复用器ADG608按顺序循环进入模数转换器AD9220,CPLD负责提供多路复用器的3bit选路信号(地址信号),与此同时,为模数转换器提供与选路信号有一定相位差的时钟信号,以确保采集到准确的模拟量[2]。模数转换器输出的12 bit数据与3 bit选路信号组成15 bit数据包被动存入FIFO,其中低12 bit为数据,13~15 bit为地址。FIFO芯片选用CY7C6255,由CPLD控制读取15 bit数据包,存入自身RAM序列。

图1 系统总体框图

CLPD负责整个系统的数据采集与存储过程,数据的采集随系统的上电而开始,掉电而结束;数据的存储则受FIFO的状态影响,即存满为止。外界触发信号经过CLPD间接连至FIFO的复位管脚,当满足特定的外界触发条件(由CPLD配置决定)时,FIFO被复位,之后在2.4576 ms内存满8 192组数据,实现了一次8路波形记录过程。当多次触发时,FIFO记录的是最后一次触发时的波形。

数据的上传,采用EZ-USB FX2方案实现[3],芯片CY7C68013A收到上位PC计算机经过USB总线发送的数据请求时,会通过GPIF方式从外FIFO中读取数据并上传到上位PC计算机。

上位机使用了相对成熟和稳定的通用驱动ezusb.sys作为USB的硬件驱动程序,Visual C++程序可以像打开读取文件一样借助驱动程序经过USB总线读取波形数据信息,之后对所得波形数据进行拆分处理、绘图显示和数据保存。

2 波形采集与存储的实现

2.1模拟通路的设计

8路模拟信号经过ADG608的通道选择,经过集成运算放大器的调整进入模数转换芯片AD9220,其结构如图2所示。

图2 模拟通路示意图

AD9220模数转换芯片在同一时刻只能转换一路的模拟量,为了处理8路模拟量的输入,需要多路复用器以一定时序对不同的模拟通道分别选通。

模拟多路复用器选用的ADG608是一个由8个单通道构成的独立的CMOS模拟多路复用器,它可以根据A0、A1、A2管脚上的3位地址来选择8路模拟输入其中相应的一路作为输出,ADG608具有低导通电阻(最大30 Ω)、高速换路(ton最大75 ns,toff最大45 ns)、低功耗、换路前自动关断(Break-Before-Make Switching Action)、TTL/CMOS电平兼容等特点,其工作电压和导通模拟信号的电压范围满足设计要求[7]。

模拟多路副复用器相比机械开关有很大的导通电阻Ron,最大可以到30 Ω,而机械开关的导通电阻一般在“mΩ”级别,导通电阻对模拟信号传输精度以及放大器的增益倍数都会有影响,在实际使用中应当设法减小其值。根据ADG608的典型特性,在一定范围内导通电阻Ron与电源电压成反比,与温度成正比,特性曲线如图3所示。

图3 ADG608导通电阻随电源电压及温度变化曲线

ADG608的换路行为受CPLD驱动,由于ADG608在换路前自动关断模拟通路,CPLD只需发送新的地址,而不需要特意控制关断模拟通路。

在一般情况下,模数转换芯片的电压输入信号符合输入电压范围的要求,但是通常需要一个集成运算放大器来提高某些弱信号的驱动能力,减小这些信号受多路复用器导通电阻Ron以及模数转换器的输入电阻的影响。

模数转换芯片选用的AD9220为新一代高性能、12位模数转换器,采用单电源供电。具有真12位线性度和温度漂移性能(不包括内部基准电压),以及11.5位或更佳的交流性能(取决于模拟输入配置)。AD9220采用高速、低成本的单CMOS工艺及新颖的架构,器件为完整的单芯片ADC,内置片内高性能、低噪声采样保持放大器和可编程基准电压源,也可以选用外部基准电压,以满足应用的直流精度与温度漂移要求。器件采用多级差分流水线架构,内置数字输出纠错逻辑,在额定数据速率时可提供12位精度,并保证在整个工作温度范围内无失码[6]。其差分输入结构使单端输入和差分输入采样接口均支持各种输入范围。采样保持(SHA)放大器既适用于在连续通道中切换满量程电平的多路复用系统,也适合采用最高Nyquist速率及更高的频率对单通道输入进行采样。AD9220采用一个单时钟输入来控制所有内部转换,数字输出数据格式为标准二进制,超量程(OTR)信号表示溢出状况,可由最高有效位来确定是下溢还是上溢。

AD9220的配置如图2所示,集成运算放大器在同相增益流入VINA的电压信号的驱动能力;内置参考电压VREF驱动VINB管脚;在VINA和VINB上串联一个30~50 Ω的电阻可以从一定程度上减小噪声带宽或者限制过电压时的灌入电流。

AD9220模数转换器的内部是将VINA与VINB做差得到电压VCORE送入模数转换核心,VCORE的取值范围在+VREF到-VREF之间,即:

-VREF

在图3的配置中,SENSE接地启用内置2.5 V参考电压,即VREF管脚的输出电平为2.5 V,则VINB管脚的输入电压也为2.5 V.根据上述公式

-2.5 V

求得输入电压VINA的范围为0~5 V,符合设计要求。

AD9220的工作时钟信号CLK由CPLD提供。

2.2CPLD协调电压波形记录系统的实现

逻辑可编程器件CPLD负责协调整个波形记录系统的工作,其选用Max 7000系列逻辑可编程器件EPM7604,EPM7064 CPLD基于先进的多阵列矩阵第二代MAX架构,为大量应用提供了世界级的高性能解决方案。基于电可擦除可编程只读存储器(EEPROM)的EPM7064采用先进的CMOS工艺制造,具有64个宏单元的密度范围,速度达3.5 ns的管脚到管脚延迟。EPM7064支持在系统可编程能力(ISP),并具有调试接口(JTAG),可以在现场轻松进行重配置。

EPM7064 CPLD对录波系统的控制包括为FIFO提供读数据控制信号,对模数转换器提供时钟信号,对多路复用器提供选路地址信号,同时选路地址信号也将作为数字量的地址一同被存入FIFO中。其连接如图4所示。

图4 CPLD与各录波功能模块连接图

为了波形能够正确的记录,CPLD的协调工作需要做到以下几点:

(1)多路复用器换路完成后模数转换器锁存模拟信号。

(2)模数转换器数字量输出信号稳定后FIFO读取数据。

(3)FIFO读取数据时不能改变地址信号。

其中各功能模块的相关工作时序如图5~图7所示。

图5 ADG608换路时序

图6 AD9220模数转换时序

图7 CY7C4255V-15写操作时序

为了满足要求,将CPLD的控制输出波形设计如图8所示。

图8 CPLD输出驱动信号时序图

外部时钟信号源的频率为20MHz,AD时钟信号为外部时钟信号的二分频(10 MHz)。实验证明换路之后的第一次AD转换值不准确,这里我们取第三次的转换值,与此同时也可以使FIFO记录的地址与实际地址相同。这样每路转换需要6个时钟周期,一共8路,可用cnt信号来计数6个时钟周期,用adrCnt来计数8路。

程序定义了cnt和adrCnt两个计数器。受时钟信号上升沿的驱动和条件语句的控制,cnt的值以000→001→010→011→100→111→000依次循环,adclk取cnt的最低位,实现了对时钟信号的二分频。在cnt信号一次循环结束之后,地址信号递增1,并输出。需要注意的是由于VHDL程序是并行执行的,所以语句的先后顺序并非执行顺序。

FIFO的复位信号为FIFO的复位管脚保持低电平最少10~25 ns(CY7C4255V-15为15 ns),在该设计中外部触发信号可以满足这个要求,所以在CLPD内部将其直接连接。

3 数据上传与处理的实现

3.1CY7C68013AUSB2.0从接口模块

EZ-USB FX2系列芯片是世界上第一个集成USB2.0协议的微处理器,它支持12Mb/s的全速传输和480Mb/s的高速传输,可以使用4种USB传输方式:控制传输、中断传输、批量传输和同步传输;完全使用USB2.0,并向下兼容USB1.1。

EZ-USB FX2主要包括USB2.0收发器、串行接口引擎(SIE)、增强型8501、16KB的RAM、4KB的内部FIFO存储器、I/O接口、数据总线和通用可编程接口(GPIF)[4-5]。

设计采用GPIF接口方式从外部FIFO CY7C4255中读取数据,在GPIF方式中,GPIF作为CY7C68013A的端点(EP6)FIFO的内部控制器[8],在这种方式下,CPU不会干涉数据的传输,从而提高了传输效率,降低了程序开销。其硬件连接方式如图9所示。

图9 GPIF方式下EZ-USB FX2与FIFO连接图

固件采用官方例程FX2_to_extsyncFIFO,其方便之处在于可以只修改GPIF波形图(该设计不需要修改)便能实现功能,如果不需要特殊功能,则不需要修改固件,GPIF读取外FIFO的波形如图10所示。

图10 GPIF方式读取外FIFO波形图

3.2下位机固件程序分析

固件程序为官方提供的例程,未经修改,所以包含了一些未使用的功能,例如对外FIFO写入等等。

程序在初始化之后进入无限循环状态,在循环中依次判断是否有来自上位机的命令和是否满足对外FIFO读写的条件,一旦接到命令或满足条件便执行相应的代码。其流程图如图11所示。

图11 下位机固件程序流程图

由流程图可知对外FIFO的写入操作主要取决于EP2端口是否有数据包;对外FIFO的读取操作则主要取决于in传输标志是否为真。由于只需要读取外FIFO中的数据,所以上位计算机需要向下位机发送B3命令(启动in传输),随后外FIFO的数据会被读取到EP6 FIFO中,上位计算机程序通过USB总线读取EP6 FIFO中的数据便可获得录波系统记录的波形信息。

3.3上位机数据读取

上位机采用Windows平台PC计算机,界面程序使用Microsoft Visual C++开发。由于系统的数据上传负荷较小,这里使用相对成熟和稳定的通用驱动程序ezusb.sys与硬件通讯。

通俗的讲,通用驱动是将EZ-USB设备被当作一个路径为.EZUSB-x的文件(其中x为阿拉伯数字形式的设备编号,按EZ-USB设备连接顺序从0开始由小到大排列),界面应用程序只需以特定的方式打开这个“文件”,并对这个“文件”进行特定的操作,便能获得相关外部设备中的数据,在本设计中,读取到的是外部FIFO CY7C4255中的数据。

打开文件(设备)使用API函数CreateFile(),该函数返回被打开的文件句柄,用于将来读取文件(设备)。

定义函数返回值传递给hDevice,那么当hDevice !=INVALID_HANDLE_VALUE时设备打开成功。打开失败的原因主要是设备没有正确连接或者失去响应,断开重连便能解决。(注!之后代码使用的hDevice句柄为上述设备正确打开之后的句柄,不再重复说明)

为了进入外FIFO读取状态,设备打开之后需要启动IN传输,即通过API函数DeviceIoControl()函数向EZ-USB设备发送一个特定命令(0xB3)。

当DeviceIoControl()返回值为0时说明IN传输没有成功启动,失败原因主要为固件程序错误。停止IN传输的代码类似,只是命令代码为0xB4。

数据的读取依然采用DeviceIoControl()函数,读取上来的数据将存在outBuffer中,512个数值,每个数值16位,读取32次便可获得全部8K的波形数据。如果DeviceIoControl()返回0,说明读取失败,原因主要是EZ-USB芯片与外FIFO连接错误,多出现在间接连接的系统中。

在实际界面程序中,数据的读取在CreatThread生成的独立的线程中进行,读取成功后用SetEvent设置事件通知主线程,并通过全局数组将数据共享给主线程;在触发之后需要进行33次读取操作,并丢弃第一次读取到的数据,因为该数据为EP6 FIFO中的陈旧数据,这是由固件程序的特殊性造成的。

数据经过一定的运算可以分离地址和数据并进行相应的处理,其中通道编号channel =(dat>0x0fff)+ (dat>0x1fff)+ (dat>0x2fff)+ (dat>0x3fff)+ (dat>0x4fff)+ (dat>0x5fff)+ (dat>0x6fff)+ (dat>0x7fff),dat为原始数据,原始数据的量的部分可以通过与运算屏蔽地址部分获得;波形的绘制通过MFC中CDC的LineTo函数实现;数据的保存与读取可以通过文件操作的相关函数实现。界面运行效果如图12所示。

图12 上位机界面

4 结论

文中的设计实现了独立的波形记录系统,克服了传统基于PCI总线+数据采集卡的波形记录系统的不方便部署、成本高等缺陷。考虑到实验要求并不严峻,设计降低了工作性能以降低成本和提高精度,系统还有一定的升级空间,即使用更高速的A/D;使用更大的FIFO,如CY7C4285;利用ADG726实现16路差分信号的输入等。

参考文献:

[1]刘昌伟,邵左文,毕文.基于LABVIEW的USB接口多路高速数据采集系统的设计.世界电子元器件,2008(12):85-88.

[2]刘静.某雷达A/D转换器AD9220及其应用.火控雷达技术,2003,9:26-28;50.

[3]李英伟.USB2.0原理与工程开发.北京:国防工业出版社,2007.

[4]EZ-USB FX2 Technical Reference Manual.Cypress Semicondctor,2003.

[5]EZ-USB® FX2TMGPIF Primer.Cypress Semiconductor Corporation,2003.

[6]Complete 12-Bit 1.5/3.0/10.0 MSPS Monolithic A/D Converters.Analog Devices,2003.

[7]3 V/5 V,4/8 Channel High Performance Analog Multiplexers.Analog Devices,1995.

[8]32 K/64 K×18 Low Voltage Deep Sync FIFOs.Cypress Semiconductor Corporation,2008.

猜你喜欢
管脚时钟波形
别样的“时钟”
古代的时钟
一种异步FIFO的Read/Write Data Flow Through功能测试方法∗
用于SAR与通信一体化系统的滤波器组多载波波形
有趣的时钟
基于图像处理的异型电子元器件管脚偏移误差检测方法研究
Pareto最优稀疏频率雷达波形设计
CMOS数字IC管脚电容的估算与测量
时钟会开“花”
基于ARM的任意波形电源设计