基于DSP的 USB 口数据采集分析系统(共5篇)
摘要:介绍了一种基于DSP的USB口振动、噪声信号采集分析系统构造方案,并对其各模块进行了分析,该方案完全实现了在系统编程和配置。针对USB模块详细介绍了CYPRESS公司的EZUSB芯片,说明了其固件(Firmware)和驱动程序框架。
关键词:DSP USB FPGA CPLD Firmware 驱动程序
随着DSP芯片功能越来越强,速度越来越快,性价比的不断提高以及开发工具的.日趋完善,广泛用于通信、雷达、声纳、遥感、生物医学、机器人、控制、精密机械、语音和图像处理等领域。作为计算机接口之一的USB(Universal Serial Bus)口具有势插拔、速度快(包括低、中、高模式)和外设容量大(理论上可挂接127个设备)的特性,使其成为PC机的外围设备扩展中应用日益广泛的接口标准。本文设计并实现了基于DSP的USB口数据采集分析系统,该系统的DSP负责数据的采集和运算处理,处理结果通过USB口送计算机显示分析,其结构如图1所示。
该结构图中,CPLD和FPGA实现模块接口,包括串并转换、8位和32位数据总线间的转换、SRAM等功能。采样结果经过CPLD送至DSP运算处理(FFT变换、相关分析、功率谱分析等)后,由FPGA和USB接口送至主控计算机存储和显示。计算机应用程序易于实现丰富的图形界面,具有良好的人机接口。
1 模数模块
本系统主要用于振动信号和噪声分析,要求采样精度高,采样频率不超过100kHz。根据要求选用CRYSTAL公司的CS5396。该芯片原本用于立体声采样,基于∑-Δ结构,采样精度高,24位分辨率,120dB的动态范围;采样频率32kHz、44.1kHz、48kHz、96kHz可选;内部集成采样保持器、模拟低通滤波器、数字滤波器,同时还具有时采样功能;两路同时采样,串行输出,串行数据由CPLD转换成24位并行数据;由于该芯片量程是4V,差分输入,所以模拟部分只需再加上简单量程放大电路即可。这样模拟电路十分简单,抗干扰能力强、精度高。
2 DSP处理器
选择DSP处理器时主要考虑其运算速度、总线宽度和性价比。本系统采样结构24位,最好选用32位DSP;系统要进行实时信号分析、模态分析等,要求有较高运算速度,所以选用TI公司的32位浮点DSP――TMS320VC33。该芯片采用哈佛结构,6级流水线操作,指令执行周期7ns,外设包括一个DMA控制器和一个缓冲串口。
N点复数FFT变换约做2N×Log2N次实数乘法运算和3N×Log2N
由于DSP芯片的不断发展, 以及它处理数据速度快、处理数据量大的优势, 已经广泛应用到数字信号处理的许多领域。在CT图像重建系统中, DSP处理的数据需要上传到PC机进行存储、显示或进行数据分析等, 这就产生了PC机和DSP的数据传输问题。USB总线具有传输速度高, 以及即插即用等特点, 得到越来越广泛的应用, 利用USB总线实现DSP和PC机的通信, 从而解决图像信号的实时传输问题。Cypress公司生产的CY7C68001通用USB 2.0接口控制器是基于应用层编程的接口器件, 使用简单, 开发方便。
在此, 以TMS320C6416为例, 讨论如何使用CY7C68001对TMS32OC6416进行USB接口设计, 实现DSP和PC机通信, 将DSP处理过的图像信号实时传到计算机中。
1 DSP与USB接口的硬件设计
TMS320C6416是TI的高性能32位定点DSP, 内核采用超长指令字 (VLIW) 体系结构, 有8个功能单元、64个32 b通用寄存器。一个时钟周期同时执行8条指令, 主频可达1 GHz, 处理性能高达8 000 MIPS, 支持8/16/32/64 b的数据类型[1]。
CY7C68001用来连接微处理器或DSP的DMA从装置, 内部不含微处理器;支持高速 (480 Mb/s) 或全速 (12 Mb/s) USB 数据传输;提供USB 2.0协议要求的全部4种传输方式 (控制传输、中断传输、批量传输和同步传输) [2], 可以满足用户对各种类型数据传输的需求。
1.1 接口的硬件设计
在该设计方案中, CY7C68001通过EMIFB与TMS320C6416进行异步通信, 各个引脚的连接如图1所示。DSP控制CY7C68001完成DSP与PC之间的异步通信。CY7C68001的相关引脚在接口中的作用: INT:表明CY7C68001有数据将要被读出, 或者有中断事件发生;READY:通知TMS320C6416可以对CY7C68001进行读写;FLAGA, FLAGB, FLAGC:反应由FAIFOADR[2:0]选择的FIFO的状态;FLAGD:为片选信号;SLOE为CY7C68001驱动数据总线;SLRD:并口读有效信号, 在SLRD有效且同步通信时, FIFO指针在每个IFCLK的上升沿递增;PKTEND:总是高电平, 将当前的缓冲区提交给USB;FD[15:0]:数据总线;FIFO[2:0]:提供与TMS320C6416接口的FIFO地址选择。
1.2 接口的访问
CY7C68001提供给DSP两种软件接口:
(1) 命令接口:用来访问CY7C68001寄存器、Endpoint0缓冲器及描述表;
(2) FIFO数据接口:用来访问4个1 KB的FIFO中的数据。通过编程直接作为FIFO分配给EP2, EP4, EP6, EP8。这两个外部接口均可以通过同步或异步方式进行访问[3]。在此均采用异步的方式进行访问, 命令口的命令字如下:
在表1中, A/D用于地址/数据的选择, 当其为0时, 表示本操作为数据读或写;当其为1时, 表示本操作为地址写。R/W用于读/写操作的选择, 当其为0时, 进行写, 当其为1时, 进行读。A[5:0]用于地址/数据的选择, 当Bit7=0时, D[3:0]为数据半字节;D[5:4]为未用, 命令字为8位, 故命令字数据分二次读出或写入;当Bit7=1时, D[5:0]包含将要寻址的命令寄存器地址[4]。
2 USB软件设计
USB的软件设计包括三方面[5]:固件设计、驱动程序设计和主机端应用程序设计。
2.1 固件设计
所有基于微控制器及外围电路功能设备的正常工作都离不开固件的参与, 固件的作用就是辅助硬件工作。没有固件的参与和控制, 硬件设备无法实现预期的功能。USB设备也不例外, 必须编写固件程序来辅助硬件完成USB的通信任务[6]。由于采用不带MCU内核的USB接口芯片, USB的应用层协议应该通过对TMS320C6416的编程来实现, USB固件的加载必须靠DSP的控制CY7C68001来完成。在CCS中用C语言完成固件程序的编写, 程序流程图如图2所示。
根据程序流程图, 固件设计思路如下:
(1) 初始化工作。包括设置一些特殊功能寄存器的初值, 以实现所需的设备属性或功能, 例如:配置端口、使能端点、开中断。该设计中, 使CY7C68001工作于异步FIFO模式, 将4 KB的FIFO对应到两个端点 (Endpoint) , 即Endpoint2和Endpoint6。
(2) 辅助硬件完成设备的重新列举过程。包括模拟设备的断开与重新连接, 对接收到的设置包进行分析判断, 从而对主机的设备请求做出适当的响应, 完成主机对设备的配置任务。
(3) 对中断的处理。CY7C68001有6个中断源, 可以分别通过中断使能对寄存器的各位进行设置。一旦中断事件发生, CY7C68001的INT引脚就被置低, 并且置中断使能寄存器的相应位 (即中断使能寄存器同时充当中断标志寄存器, 中断使能寄存器具有读写属性) 。当中断发生时, 中断标志寄存器的状态字映射到FD[7:0];中断发生后, DSP对CY7C68001简单的一次读操作即可获取中断信息, 识别中断源并进行相应处理。相对于中断标志寄存器的读操作, 其他对CY7C68001寄存器的读操作通常要先发送一次请求, 并且收到READY响应后, 才可以读取数据。
(4) 数据的接收与发送。在读数据时, 应首先判断CY7C68001的FIFO2 是否为空, 如果不为空, 才将数据读进来。在写数据时, 还要判断要写的数据个数是否为512 B的整倍数, 如果不是, 则使用PKTEND信号来标识数据包的结束[7]。EP2和EP6分别对应存放USB需要上传与接收的数据。其中, EP2为OUT型, 负责从主机接收数据;EP6为IN型, 负责向主机发送数据[8]。EP2和EP6均采用批量 (BULK) 传输方式, 这种传输方式具有数据可靠, 传输速率高等特点, 特别适合大批量数据传输。部分关键代码如下:
DSP读端点2中的数据:
2.2 驱动程序
在Windows平台下, USB驱动程序由三部分组成:USB设备驱动程序、USB总线驱动程序和USB主控制器驱动程序。它们必须遵循Win32驱动程序模型 (WDM) 。其中, Windows操作系统已经提供了处于驱动程序栈底的USB主控制器驱动程序和USB总线驱动程序 (USBD.SYS) 。USB设备的驱动程序主要是通过调用USBD.SYS来实现PC机与USB总线的数据交换[9]。USB驱动程序主要完成以下功能:
(1) 发现、配置、关闭USB设备。通过一系列有关即插即用 (Plug and Play) 的派遣函数来完成。例如Ezusb_PnPAddDevice () , Ezusb_DispatchPnp () 等函数。
(2) 驱动程序与应用函数的接口。像Ezusb_Creat () , Ezusb_Close () 等函数。应用程序调用Ezusb_Create () 后, 返回惟一的Windows句柄后, 才能调用驱动程序的其他函数, 完成驱动程序对CY7C68001的一系列操作和数据传送。应用程序通过调用API函数CreateFile () 来实现对Ezusb_Create () 的访问。
(3) 控制与数据传送接口。这是驱动程序的主要部分。它是Windows的异步I/O操作。应用程序使用标准Win32API函数DeviceIoControl () 来执行这样的操作。在驱动一方, 这个DeviceIoControl () 调用被转化成一个带IRP_MJ_DEVICE_CONTROL功能码的IRP。像读取与写入FIFO数据、endpoint0的操作均是通过异步I/O的方式来完成的。
2.3 主机应用程序
USB主机应用程序是计算机中完成特定功能的程序, 其关键是实现从USB外设读取或发送特定数量的数据、USB标准设备请求和特定的命令等。另外, 可以对数据做进一步的处理, 如:存储、显示、快速傅里叶变换等。主机应用程序的编写使用VC编译环境中的API函数实现。应用程序的编程方法与串口编程类似。首先必须查找设备, 调用Win32函数CreateFilea () 打开设备的句柄;然后调用Win32函数DeviceloControl () 就可以进行数据读写和控制操作;最后关闭设备句柄[10]。在VC++6.0中用C++编写简单的上位机测试程序, 得到测试结果如图3所示。
3 结 语
在CT图像重建系统中, 高性能的DSP芯片具有高速的数据处理能力, 利用设计的USB接口, 能够快速方便地实现实时传输。经测试, 该设计的USB接口传输速度可达35 Mb/s以上, 具有较高的实用价值和良好的应用前景, 而且对于使用其他微处理器开发基于CY7C68001的USB 2.0接口也有很好的借鉴作用。
参考文献
[1][美]Texas Instruments Incorporated.TMS320 C6000系列DSP的CPU与外设[M].北京:清华大学出版社, 2007.
[2]袁海强, 徐宏海, 李娟.基于CY7C68001的数据采集系统USB接口设计[J].2008, 37 (2) :48-50.
[3]TEXAS INSTRUMENTS MARCH.TMS320C6000 EMIFto USBInterfacing Using Cypress EZ-USB SX2[Z].2004.
[4]陈刚, 张帅.基于DSP和USB 2.0高速数据传输系统的设计[J].长沙通信职业技术学院学报, 2007, 6 (4) :73-76.
[5]万佑红, 冯炜.基于DSP的USB数据传输方法研究与实现[J].计算机工程与设计, 2007, 28 (12) :2 896-2 897, 2 901.
[6]王成儒, 李英伟.USB 2.0原理与工程开发[M].北京:国防工业出版社, 2004.
[7]戴小俊, 丁铁夫, 郑喜凤.基于DSP和USB的数据采集系统的设计[J].电子技术应用, 2007 (1) :84-86.
[8]微红昀, 张志俊, 朱宗晓.DSP高速数字语音系统的USB接口设计[J].中南民族大学学报, 2007, 26 (1) :40-43.
[9]北京合众达公司.SEED-DEC6416用户指南 (Rev.B) [Z].2005.
摘要:文章介绍了一种利用基于USB的快速读数系统的设计方法。该系统利用CY7C68013实现,文章给出了系统的硬件设计方案、FPGA内部集成FIFO的软件实现方法以及GPIF与FLASH握手信号的设计。通过此USB数据传输模块,实现了FLASH存储器与计算机之间的数据高速传输。应用结果表明,此数据通信系统是可靠有效的,具有一定的通用性,可用于其它类似的测试存储系统中。
关键词:USB;GPIF;数据传输;FPGA
中图分类号:TP274.2 文献标识码:A文章编号:1006-8937(2009)20-0101-01
文章USB传输系统采用微处理器CY68013实现。文章给出了此数据传输系统的硬件设计方案,着重介绍了FPGA控制模块中内部集成FIFO的实现方法,以及GPIF与FLASH通信时握手信号的设计方案。
1系统硬件方案设计
CY68013 是Cypress公司推出的 EZ-USB FX2系列产品之一,内部集成了 USB 2.0 收发器、智能串行引擎(SIE)、增强型8051控制器、通用可编程接口(GPIF)、8.5KB的RAM 和FIFO存储器,最大限度的满足了USB2.0的总线带宽。FX2最常用的数据传输方式就是GPIF。GPIF是一种快速的数据传输方式,时序简单。它可以很容易的从RAM中读取数据。但是,由于FLASH存储器的读数操作是以页为单位,读数时页与页之间有一小段时间间隔,数据输出不是连续的。为解决此问题,实现FX2GPIF方式读取FLASH中的数据,需要使用FIFO作为数据过渡,先将FLASH中的数据读到FIFO中,USB控制器再从FIFO中读取数据。
2FPGA内部集成FIFO的软件设计
2.1内部集成FIFO的结构
FIFO的本质是一种特殊的双口RAM,由于大部分FPGA内部就有双口RAM资源。因此在这里选用合适的FPGA芯片来编写FPGA内部集成FIFO。FIFO结构的特点是先进先出,对外它是一种没有地址控制的特殊缓存。只要给一个FIFO提供读、写使能信号就能使其工作,不同的是FIFO对外不显示地址,只是给出表现内部状态的满、半满和空信号,用户根据这些信号对FIFO进行操作。
FIFO设计时最重要的就是怎么给出这些信号。本设计中FIFO产生满、半满以及空状态标志信号采用如下方法:用读地址和写地址相减结果来判断FIFO的满空状态;此外还可以据此得到FIFO的半满状态信号。这种方法可以容易的控制FIFO满、半满、空的深度。
2.2FIFO标志信号的产生
FIFO满、空、半满标志信号的生成过程是一样的,只不过判断比较的差值不一样。FIFO满时差值为1023,空为1。为了避免时序错误,还可以设定一定的满空深度。例如,当地址差大于1000时认为FIFO已满,不再向FIFO中写入数据,这样可以避免错误的出现。
3GPIF与FLASH握手信号设计
满、空信号主要是在读数时使用,用作GPIF与FLASH读数时的握手信号,以保证读数的稳定可靠。读数时数据要先存到FIFO中,然后USB再从FIFO中读取数据。对于FIFO来说,读取和写入的速度是不同的,可能读比写快,也可能写比读快。因此,我们需要设计读数握手信号,以防读数时丢失数据。信号的握手过程是:对于读数控制模块来说,只要FIFO不满它就向FIFO中写入数据。对于FX2GPIF来说,只要FIFO不空它就从FIFO中读取数据。这样对于FIFO的读写就组成了一个闭环,保证了读数的完整准确。
读数握手方式确定以后可能出现两种情况:①FIFO的写数速度大于读数速度,这样写地址慢慢就追上读地址了,这时的总的读数速度就由读数速度决定。②FIFO的写数速度大于读数速度,这样读地址慢慢就追上写地址,这时的总的读数速度就由写数速度决定。
4结 语
文章设计的基于EZ-USB FX2微处理器的数据通信系统,实现了利用USB端口从FLASH存储器种快速读取数据。此数据通信系统应用在了某型号车载测试存储系统中。存储的数据通过此传输模块快速地读入计算机,根据上位机数据恢复的信号与原始信号比较,失真较小,噪声水平低取得了良好的效果。此设计具有一定的通用性,对于一般基于USB的高速数据传输系统设计具有一定的应用参考价值。
参考文献:
[1] 钱峰.EZ-USB FX2单片机原理、编程及应用[M].北京:北京航空航天大学出版社,2006.
摘要:本文主要介绍支持USB2.0高速传输的EZ-USB FX2单片机CY7C68013,并详细说明用此芯片实现高速数据采集系统和相应的Windows驱动程序及底层固件程序的开发过程。
关键词:CY7C68013 USB2.0 数据采集 固件
1 引言
现代工业生产和科学研究对数据采集的要求日益提高,在瞬态信号测量、图像处理等一些高速、高精度的测量中,需要进行高速数据采集。现在通用的高速数据采集卡一般多是PCI卡或ISA卡,存在以下缺点:安装麻烦、价格昂贵;受计算机插槽数量、地址、中断资源限制,可扩展性差;在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,导致采集的数据失真。
通用串行总线USB是1995年康柏、微软、IBM、DEC等公司为解决传统总线不足而推广的一种新型的通信标准。该总线接口具有安装方便、高带宽、易于扩展等优点,已逐渐成为现代数据传输的发展趋势。基于USB的高速数据采集卡充分利用USB总线的上述优点,有效解决了传统高速数据采集卡的缺陷。
2 硬件设计
2.1支持USB2.0高速传输的CY7C68013
Cypress Semiconductor公司的EZ-USB FX2是世界上第一款集成USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的外围接口。FX2这种独创性结构可使数据传输率达到56Mbytes/s,即USB2.0允许的最大带宽。在FX2中,智能SIE可以硬件处理许多USB1.1和USB2.0协议,从而减少了开发时间和确保了USB的兼容性。GPIF(General Programmable Interface)和主/从端点FIFO(8位或16位数据总线)为ATA、UTOPIA、EPP、PCMCIA和DSP等提供了简单和无缝连接接口。
CY7C68013的GPIF引擎具有自动传输数据结构的特性,这种特性使得外围设备和主机通过CY7C68013可以无缝的、高速的.传输数据。为了实现高速的数据传输,CY7C68013CPU不会直接参与数据的传输,而是直接利用GPIF的自动传输数据模式。图1和图2说明了主机IN和OUT数据传输过程。
2.1.1 端点缓冲区
FX2包含3个64字节端点缓冲区和4K可配置成不同方式的缓冲,其中3
个64字节的缓冲区为EP0、EP1IN和EP1OUT。EP0作为控制端点用,它是一个双向端点,既可为IN也可为OUT。当需要控制传输数据时,FX2固件读写EP0缓冲区,但是8个
SETUP字节数据不会出现在这64字节EP0端点缓冲区中。EP1IN和EP1OUT使用独立的64字节缓冲区,FX2固件可配置这些端点为BULK、INTERRUPT或ISOCHRONOUS传输方式,这两个端点和EP0
一样只能被固件访问。这一点与大端点缓冲区EP2、EP4、EP6和EP8不同,这四个端点缓冲区主要用来和片上或片外进行高带宽数据传输而无需固件的参与。EP2、EP4、EP6和EP8是高带宽、大缓冲区。它们可被配置成不同的方式来适应带宽的需求。
2.1.2 接口信号
在利用GPIF进行高速数据传输系统设计时,GPIF waveforms的编辑是非常重要的,它控制着整个数据传输过程的读写时序。此时CPU的作用已经非常小了,它只起着下载代码到内部RAM以及在固件中如何触发GPIF waveforms的作用。FX2专门为GPIF提供了外围接口信号,如8位或16位的数据线、控制信号、Ready信号以及地址线。
IFCLK(双向时钟信号):IFCLK是一个参考时钟,可以配置成输入或输出。当配置为输出时,IFCLK被FX2驱动为
30MHz或48MHz;当配置为输入时,时钟范围为5-48MHz。
GPIFADR[8:0](输出):GPIF使用GPIFADR信号为外部设备提供地址线,在总线上地址值是自增的。
FD[15:0](双向):这是USB主机通过FX2和外部设备进行数据传输的数据线,它可配置成8位或16位。当16位时,FD[7:0]代表端点FIFO
中的第一个字节,FD[15:8]代表第二个字节。
CTL[5:0](输出):FX2为外部设备提供了几个控制信号,如读写选通、使能等。
RDY[5:0](输入):FX2提供了几个状态检测信号,它可以检测外部设备的状态,如FIFO的空、满、半满等。
GSTATE[2:0](输出):这是调试信号,表示GPIF波形执行的状态,通常连接到逻辑分析仪上。
2.2 AD9238
AD9238是一个双通道的12位
A/D转换器,采用单3V供电,速度可以是20MSPS、40MSPS和65MSPS;低功耗,工作在20MSPS时,功耗为180mW,40MSPS时,功耗为330mW,65MSPS时,功耗为600mW;具有500MHz 3dB带宽的差分输入;片上参考源及SHA;灵活的模拟输入范围:1Vp-p~2Vp-p;适用于:超声波设备,射频通讯,电池电源仪器,低价示波器等。本系统采用20MSPS的AD9238,可充分发挥USB在高速传输模式下的数据传输优势。
2.3 数据采集系统
该数据采集系统整个框图如图3所示,该系统由以下几部份组成:USB控制器、FIFO、CPLD、AD9238以及数据采集前端电路。
图3 数据采集系统框图
CPLD主要是控制时序,时钟分频等。FIFO主要是起着高速数据缓冲作用,当FIFO半满时,数据开始向USB主机发送。我们采用的是同步FIFO,时钟信号接IFCLK,当FIFO的/RD信号和/OE信号有效时,每个IFCLK上升沿就输出一个数据;当FIFO的/WR信号有效时,IFCLK上升沿就读进一个数据。AD9238的20MHz时钟信号是通过CPLD分频所得。当程序使能AD9238的/OEB_A和/OEB_B信号时,AD9238双通道开始进行数据采集并向FIFO写数据。
系统前端的调理电路采用的是AD公司的AD8138,该放大器具有较宽的模拟带宽(320MHz,-3dB,增益1),而且可以实现将单端输入变成差分输出的功能。此项功能在现代高速模数变换电路中非常有用,因为几乎所有的高速A/D芯片都要求模拟信号为差分输入,虽然部分芯片的手册中提到对于单端输入信号也可使用,但这样一来会使A/D转换结果的二次谐波增大,降低信噪比(SNR)。AD8138很好的解决了这个问题,用户可以很容易的将单端信号转换成差分输出而不必使用变压器,并且它的输入阻抗高达6MΩ,可以直接与输入信号相连而省略隔离放大器,大大精简了电路结构。图4为AD8138的典型应用电路。
图4 AD8138典型应用电路
3
; 软件设计
3.1 Windows驱动程序设计
USB设备驱动程序基于WDM。WDM型驱动程序是内核程序,与标准的Win32用户态程序不同。采用了分层处理的方法。通过它,用户不需要直接与硬件打它道(在USB驱动程序中尤为明显),只需通过下层驱动程序提供的接口号访问硬件。因此,USB设备驱动程序不必具体对硬件编程,所有的USB命令、读写操作通过总线驱动程序转给USB设备。但是,USB设备驱动程序必须定义与外部设备的通讯接口和通讯的数据格式,也必须定义与应用程序的接口。
Cypress公司提供了完整的CY7C68013驱动程序源码、控制面板程序及固件的框架,这大大提高了用户开发的进度。用户只需稍加修改或不需任何修改即可使用所带驱动程序,软件开发者大量的时间主要集中在应用程序和固件的开发。本文所述的数据采集系统驱动程序就在原来的基础上进行了简单的修改来满足我们的需要。根据我们自己的需求,一般只需修改DeviceIoControl例程,如我们主要增加了控制数据传输函数、启动和停止AD、复位FIFO等,即IOCTL_START_AD、IOCTL_STOP_AD、IOCTL_RESET_FIFO。
3.2 底层固件设计
要实现USB2.0的高带宽数据传输,必须使用它特有的GPIF特性,在开发固件前,首先必须根据实际需要对GPIF waveform进行编辑。CY7C68013开发工具中带有一个GPIF Designer,如图5所示,编辑完waveform后,选择Tools->Export to GPIF.c File来输出GPIF.c文件,然后将该文件加入keil c工程进行编译。
由于CY7C68013的EP2、EP4、EP6、EP8四个端点共享4K FIFO缓冲区,所以在该系统中,我们将EP2配置成4K的缓冲区,并设置为IN。用EP1OUT作为AD的控制参数传递,如启动和停止AD数据输出、复位FIFO等。在固件程序中,最重要的就是TD_Init和TD_Poll()两个函数。
图5 GPIF Designer
在TD_Init()中主要完成GPIF相应寄存器的初始化,如下:
void TD_Init(void) // Called once at startup
{
// set the CPU clock to 48MHz
CPUCS = ((CPUCS & ~bmCLKSPD) | bmCLKSPD1);
SYNCDELAY;
EP2CFG = 0XE8; // EP2IN, bulk, size 1024, 4x buffered
SYNCDELAY;
EP4CFG = 0x00; // EP4 not valid
SYNCDELAY;
EP6CFG = 0x00; // EP6 not valid
SYNCDELAY;
EP8CFG = 0x00; // EP8 not valid
SYNCDELAY;
FIFORESET = 0x80; // set NAKALL bit to NAK all transfers from host
SYNCDELAY;
FIFORESET = 0x02; // reset EP2 FIFO
SYNCDELAY;
FIFORESET = 0x00; // clear NAKALL bit to resume normal operation
SYNCDELAY;
EP2FIFOCFG = 0x01; // allow core to see zero to one transition of auto out bit
&
nbsp;SYNCDELAY;
EP2FIFOCFG = 0x11; // auto out mode, disable PKTEND zero length send, word ops
SYNCDELAY;
EP6FIFOCFG = 0x09; // auto in mode, disable PKTEND zero length send, word ops
SYNCDELAY;
GpifInit ; // initialize GPIF registers
SYNCDELAY;
EP2GPIFFLGSEL = 0x02; // For EP2IN, GPIF uses FF flag
SYNCDELAY;
// global flowstate register initializations
FLOWLOGIC = FlowStates[19]; // 0011 0110b - LFUNC[1:0] = 00 (A AND B), //TERMA/B[2:0]=110 (FIFO Flag)
SYNCDELAY;
FLOWSTB = FlowStates[23]; // 0000 0100b - MSTB[2:0] = 100 (CTL4), not //used as strobe
SYNCDELAY;
GPIFHOLDAMOUNT = FlowStates[26]; // hold data for one half clock (10ns) assuming //48MHz IFCLK
SYNCDELAY;
FLOWSTBEDGE = FlowStates[24]; // move data on both edges of clock
SYNCDELAY;
FLOWSTBHPERIOD = FlowStates[25]; // 20.83ns half period
SYNCDELAY;
// reset the external FIFO
OEA |= 0x07; // turn on PA0、 PA1、 PA2 as output pin
IOA |= 0x07; // pull PA0、 PA1、 PA2 high initially
IOA &= 0xFB; // bring PA2 low
EZUSB_Delay (1); // keep PA2 low for ~1ms, more than enough time
IOA |= 0x04; // bring PA2 high and exit reset
IOA &= 0xFC; // bring PA0、 PA1 low and enable AD
}
在TD_Poll()中主要完成外部FIFO状态的检测和数据的传输,主要程序部分如下:
void TD_Poll(void)
{
在工程应用中数据采集是最为常见和重要的一环,数据采集系统的优劣在很大程度上影响了工业系统的性能。尤其在对虚拟仪器的研究不断深入的过程中,作为虚拟仪器数据输入的前端,数据采集系统也越来越凸显其重要的作用。目前对于高速的数据采集系统,数据接口采用PCI、ISA等高速通信接口居多,但是这些接口的安装成本高,结构复杂,不利于工业现场的应用[1]。在高频信号采集的数据量不是很大的情况下采用高速接口不仅增加了系统的成本同时也使得系统结构变得复杂,不利于系统的大规模应用。
USB接口具有即插即用、传输速率快、可扩展等特点,并且其标准的USB2. 0 规范了和各种不同的PC外部设备的接口,在工业现场的数据传输中有着广泛的应用前景[2]。
现介绍了一种基于USB2. 0 接口的高速数据采集系统,系统采用Xilinx 500E FPGA为核心,通过FPGA上的高速I / O将AD的采样数据读取并存入FPGA内部的BRAM和外部的SDRAM中,并且能够通过低速的串行总线将数据传输给计算机进行相应的数据处理。
1 采集系统的硬件构成
该数据采集系统主要包括两个部分,一部分是采用ADS807 数模转换芯片搭建的模数转换电路,用来完成模拟信号到数字信号的转换; 另外一部分是采用FPGA为核心搭建的数据存储和数据发送电路,完成数字信号的处理、编码。在完成数据的初步处理和编码之后,通过USB2. 0 串行总线将数据发送给PC机。
测试系统的结构框图如图1 所示,模拟信号在经过高速AD转换芯片ADS807 构成的高速数模转换电路后输出转换后对应的数字信号,系统的采样时钟通过FPGA内部的PLL电路产生。FPGA可以根据不同的输入信号设置采样频率,最大可以设置到50MHz的采样频率。模拟信号经过AD转换电路后,FPGA将采集到的数字信号存入内部的BRAM或外部的SDRAM。存储的数据在接收到传输指令之后,经过串口通信模块将数据传输给PC机,由PC对数据进行进一步的处理和计算。
1. 1 模数转换电路
数模转换电路采用ADS807 为转换芯片,ADS807 是一款高速模数转换芯片,这是一款低功耗( 335m W) ,高精度( 12 - Bit) 的高速AD转换芯片,最高能够实现53MHz的转换速率,并且有良好的信噪比。在10MHz的输入信号情况下,能够提供82d B的信噪比。AD转换模块的电路如图2 所示,其中VCM为ADS807 芯片提供的一个精确的参考电压,AD转换芯片和VCM进行比较实现模拟量到数字量的转换。通过芯片TH5401 将输入信号抬升一个固定的电压值,从而将一个交流信号叠加上一个直流信号,便于AD转换芯片对模拟信号的采样。另外可以通过设置ADS807 的VEN引脚的不同电压值来定义不同的电压输入范围以及模拟信号的输入形式。在本系统中,将AD的采样模式设置为3VP - P的差分输入,能够实现较大的采样范围和较高的采样精度,并且能够抑制输入信号带来的共模干扰。
1. 2 数据存储和发送电路
FPGA( Field-Programmable Gate Array) ,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路( ASIC) 领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 Xilinx公司出品的XC3S500E型号的FPGA是其SPARTAN - 3 系列产品中应用最为广泛的FPGA型号之一,具有低成本,多电压模式,复合标准接口,多种IO接口等特点。XC3S500E具有符合IEEE1149. 1 /1532 JTAG接口,360KBit的BRAM,232 个用户可用的IO引脚,资源丰富。
如图3 所示,XC3S500E产生的CLK信号用于给AD提供可变的时钟信号,通过I/O对ADS807 转换的结果进行读取操作并且出入BRAM/SDRAM。USB串口模块采用从机工作模式和FIFO的数据操作模式。
FPGA通过对其外部I / O的数据读取,在每一个时钟周期的上升沿到来时将I/O引脚上的数据读取并按照顺序存入BRAM中,当BRAM中内存空间存满之后,可用将读取的数据存入外部扩展的SDRAM,大大扩展了系统的数据缓存能力。另外可以通过软件的方式使得FPGA对读取的数据进行简单的压缩和处理,进一步提高系统的利用率。
串行数据通信接口采用USB2. 0 专用芯片CY7C68013 为核心搭建而成,它集成了USB2. 0 收发器、SIE、增强型8051 微控制器和可编程外围接口,能够使数据传输速率达到56MB /S,从而快速的将FPGA中存储的数据上传至计算机。在采样率在1M以下的情况下完全可以实现实时的数据传输,通过这种方法,系统不仅能够实现数据的离线分析,也能在低速采样率的情况下进行在线分析。
2 软件程序设计
2. 1 FPGA程序设计
该系统的采样模式有两种,在高速模式下采用离线采样模式,在低速模式下可以采用在线采样模式。系统的软件框图如图4 所示,在接收到的指令中包含了启动信号、采样频率设置、采样模式选择信息。在离线采样模式下,采样的数据通过FPGA的处理和编码形成固定的数据帧存放在FPGA内部的BRAM和外扩的SDRAM中。在需要发送数据的时候,将数据从存储器传送到USB的FIFO中,完成数据的发送。在线采样模式下,完成数据的采集之后将数据直接存入USB的FIFO中,从而可以实现不间断采样,实时将数据传送给上位机。
2. 2 USB程序设计
USB的软件系统的设计包括3 个方面: 固件设计、驱动设计和应用程序设计。其中固件设计主要为了完成初始化以及一些端口的配置和使能; 驱动的设计为了能够使得操作系统识别USB设备,并且建立起主机和设备之间的通信; 应用程序完成对USB设备进行命令控制和接收的数据进行[2]。
其中固件和驱动都已经被Cypress FX2 开发包提供,在使用过程中将对应的固件包和驱动包写入对应的设备端即可。本系统的应用程序采用MAT-LAB编写而成,能够完成对上传的数据进行波形显示和频谱分析。通过Mex文件可以完成MATLAB对USB数据的操作,其中Mex文件包括两个部分:控制实现部分和入口程序部分,分别负责程序的功能实现和MATLAB的数据连接[3]。下面是Mex的入口程序的接收数据代码[4],通过VC生成的. DLL文件可以被MATLAB调用从而实现MATLAB对USB数据的读写操作。
3 系统测试
为了测试系统的数据采集性能,采用DG4102型信号发生器产生三个正弦信号进行叠加,其中正弦信号的频率分别为2MHz,5MHz和10MHz,幅值为2V,系统经过对混合信号的采集将数据回传至PC,MATLAB接受来自数据采集系统的数据并将数据做快速傅里叶变换( FFT) ,得到如图5 所示的频谱图。可以看出该系统能够将10MHz以下的信号进行很好的采样,同时回传给PC,完成数据传输。
4 结束语
本系统通过ADS807 高速AD转换完成模数转换,通过FPGA完成数据的存储、采样模式的控制以及数据的发送,通过USB2. 0 与计算机进行通信,能够方便地将数据信号接入PC计算机,便于上位的MATLAB或者LABVIEW进行数据调用和处理。在实际的使用过程中该系统能够方便地用于高速信号的采集和分析,灵活的USB接口拓展了高速数据采集系统在工程领域的应用。
参考文献
[1]黄大勇,李鉴,张建正.基于USB2.0接口的高速数据采集系统设计[J].现代电子技术,2007(24):69-72.
[2]向文芳,邢涛,曹红兵,等.高速数据采集系统的USB接口设计[J].计算机测量与控制,2011,19(10):2567-2570.
[3]张聪慧,郑正奇.基于MATLAB的USB数据采集卡上位机处理系统[J].电子设计工程,2011(11):75-77.
【基于DSP的 USB 口数据采集分析系统】推荐阅读:
基于数据库的自动测试系统(ATS)软件10-09
基于大数据的精准营销10-16
基于MODIS数据的金塔绿洲地表温度反演01-25
基于数据库的地形图符号化12-03
基于基础地理信息数据库的制图设计与实现11-11
论创新教育基于PBL的数据库课程教学论文07-02
基于大数据时代下的智慧图书馆服务模式研究12-25