《电子技术应用》
您所在的位置:首页 > 可编程逻辑 > 设计应用 > 基于FPGA的USB接口数据采集系统设计
基于FPGA的USB接口数据采集系统设计
来源:电子技术应用2011年第5期
张思杰, 赵 泰, 汪振兴, 石 岭
重庆大学 通信工程学院, 重庆 400030
摘要: 介绍了一种高速实时数据采集系统的设计。该系统以FPGA作为逻辑控制的核心,以USB2.0作为与上位机数据传输的接口,能同时支持单端16路和差分8路模拟信号输入,最大采样率为200 kHz,12位的转换精度。描述了系统的主要组成和FPGA模块化设计的实现方法,并给出了其核心模块的时序仿真波形图。
中图分类号: TP274
文献标识码: A
文章编号: 0258-7998(2011)05-0098-03
Design of data acquisition system based on USB and FPGA
Zhang Sijie, Zhao Tai, Wang Zhenxing, Shi Ling
Institute of Communications Engineering, Chongqing University, Chongqing 400030, China
Abstract: This paper introduces a high-speed and real-time data acquisition system. The system can support both single 16-route and differential 8-route analog signals input, with 200 kHz of maximal frequency and 12 bit of conversion accuracy, using FPGA as the core logic control and using USB2.0 as the interface of data transmission with the host computer. The main component of the system and the implementing method of FPGA are described and the simulation waveforms of main modules are presented.
Key words : FPGA; USB2.0; data acquisition; conversion accuracy


    传统的数据采集系统中通常采用单片机或DSP作为控制模块,控制A/D转换、存储和其他外围电路的工作,利用PCI、ISA等接口与上位机进行通信。随着数据采集对速度、实时性、简易性的要求越来越高,传统数据采集系统的弊端也日趋明显。近年来随着FPGA技术和USB技术的应用深度和广度的不断加大,利用FPGA芯片和USB接口设计高速数据采集系统成为新的研究热点。FPGA芯片不仅体积小、功耗低、时钟频率高、内部时延小,而且能够使用VHDL语言来编程实现程序的并行执行,配置灵活,开发周期短,性能可靠。USB是一种高效、快速、价格低廉、体积小并支持热插拔的新型串行通信接口,目前USB2.0的高速传输速率能够达到480 Mb/s,能够实现数据的高速传输。
1 系统总体结构
    本设计采用FPGA+USB的设计思路,利用FPGA芯片作为系统的逻辑控制核心,通过USB 2.0接口与上位机通信,实现单端16路/差分8路模拟数据的高速、实时、便携式的采集。本文设计的数据采集系统划分为A/D转换电路、FPGA采集控制和USB传输控制器等若干部分。如图1所示。

    本数据采集系统支持单端16路和差分8路模拟信号输入,每路12 bit的转换精度,最高采样率为200 kHz。主机应用程序首先向USB控制器发出采样时控包,在时控包中设置采集通道及其采样频率。进而USB控制器触发FPGA采集信息,FPGA根据时控包开始启动A/D进行模数转换,转换结束后,FPGA接受A/D输出的12 bit串行数据,并通过串并转换将它转换成16 bit并行数据输出。然后将采集到的数据信息通过USB控制器发送给主机,最后由主机做进一步信息处理。
2 主要芯片选型
    本数据采集系统用到的主要芯片包括FPGA芯片、A/D转换芯片和USB传输控制芯片。
2.1 FPGA芯片的选取
     依据本系统设计的需要选用Altera公司的Cyclone II系列EP2C8Q208C8。该芯片内部逻辑单元8 256个,有165 888个RAM位,182个可用I/O口,系统时钟频率高于260 MHz,只需要3.3 V和1.2 V的工作电压,完全能够满足设计的要求。
2.2 ADC转换芯片的选取
    考虑到系统的采样率、分辨率、通道数等要求,本系统选用德州仪器公司(TI)的ADS7817模数转换器。该器件是12位的低功耗、高阻抗全差分模拟输入、具有串行输出接口的模数转换器,内部基准电压范围为100 mV~2.5 V,最高采样率200 kHz,相应输入分辨率范围49 μV~1.22 mV。
2.3 USB传输控制芯片的选取[1]
    本系统选用CYPRESS公司的USB2.0外设控制器EZ-USB FX2 CY7C68013-56。该芯片包括带8.5 KB片上RAM的高速8051单片机、4 KB FIFO存储器以及通用可编程接口(GPIF)、串行接口引擎(SIE)和USB2.0收发器,可与任何ASIC或DSP进行接合,并且还支持所有通用总线标准,性价比较高。USB2.0协议提供480 Mb/s的传输速度,因此CY7C68013是USB2.0的完整解决方案。
3 系统硬件设计方案实现
3.1 FPGA与ADC及模拟多路开关的电路设计

    系统选用8通道模拟多路开关CD4501和SN74LS174集成D触发器组合构成FPGA信号采集控制的输入通道。本系统要求支持单端16路和差分8路模拟信号输入,因此使用2片CD4501来实现最大16路模拟输入通道的多路复用。在选择单端或差分输入时,通过硬件开关来实现。在一个采样周期内,选择哪路模拟信号进行A/D转换由FPGA控制D触发器SN74LS174其中的5个D输入端的电平高低来选择通道实现。每路模拟信号都要经过多路模拟开关选择通道后,再送入A/D芯片的输入端,如图2所示。本方案中,FPGA为采样通道SN74LS174提供30 MHz的时钟CLK1及复位信号CLR,为A/D芯片提供3 MHz的同步时钟信号DCLK和片选信号CS,从而使A/D芯片对相应的通道进行数据转换。

 

 

3.2 FPGA与USB芯片的连接设计
    当EZ-USB FX2LP工作于Slave FIFO模式时,外围电路可以像普通FIFO一样对EZ-USB FX2LP中的端点数据缓冲区进行读写[2]。本系统采用FPGA作为主控制器,因而,对USB控制采用Slave FIFO模式,FPGA通过控制CY7C68013内4 KB的FIFO进行与上位机之间的数据传输。FPGA与USB芯片的硬件连接如图3所示。

4 系统软件设计
    系统软件设计主要包括FPGA控制逻辑设计、USB固件程序设计、USB设备驱动程序和上位机应用程序。
4.1 FPGA设计
    FPGA程序的设计是整个采集系统的关键,整体分成三大模块:分频采样控制模块、通道选择模块和USB传输控制模块。以下是各个模块设计的具体介绍。
4.1.1 分频采样控制模块
    本系统中,FPGA的主时钟m_clk由USB芯片输出的30 MHz频率提供,由于A/D采样需要3 MHz的时钟频率,因此首先模块对主时钟进行10分频得到3 MHz同步时钟信号o_clk。同时,该模块还要控制数据采样、A/D转换以及数据的串并转换。在采样时刻到来时,在同步脉冲o_clk和片选信号cs(低电平有效)的控制下,依据ADS7817转换时序图进行采样、转换。转换过程中计数o_clk脉冲,每12个脉冲置位cs为高电平,使结果仅输出一次,否则在DOUT端继续从最低位到最高位依次输出转换结果。in_data是A/D转换后的串行输出数据,o_Para是对in_data经过串并转换后输出的并行16 bit数据。
4.1.2 USB传输控制模块
     该模块主要负责对USB芯片端点的读写控制。USB芯片端点FIFO用于数据的缓存,一方面存储上位机发出的采集参数信息,另一方面存储FPGA输出的并行16 bit采集数据。该模块通过判断端点FIFO的空、满标志位来对USB端点2、4、6、8进行读写控制。本系统采用异步FIFO读、写控制模式,该模块用状态机来实现,将读、写过程分别分成5个状态,异步FIFO读状态机如图4所示。

    IDLE:当“写”事件发生时,转到状态1。
    状态1:指向OUT FIFO,激活FIFOADR[1:0],转向状态2。
    状态2:激活SLOE,如果FIFO空标志为“假”(FIFO 不空),则转向状态3;否则停留在状态2。
    状态3:激活SLOE,SLRD,传送数据到总线上;撤销激活SLRD(指针加1)和SLOE,转向状态4。
    状态4:如果有更多的数据要求,则转向状态2;否则转向IDLE。
4.1.3 通道选择模块
    该模块主要负责系统通道的选通,根据得到的采集参数信息选择相应的通道进行数据采集[3]。该模块通过产生不同的电平,来控制集成D触发器SN74LS174的其中5个输入端,从而达到选择通道的目的。
4.2 USB固件程序设计
    本系统中数据通道分为采集数据上传通道和控制字下传通道。根据设计需要进行配置,配置端点4、6、8为采集数据上传通道,用于从FPGA向主机传输采集数据,采用块传输模式,512 B 2重缓冲,16 bit数据自动输入模式;配置端点2为控制字下传通道,用于传送主机控制字到FPGA,采用块传输模式,512 B 2重缓冲,16 bit自动输出模式。固件程序采用Cypress公司提供的固件程序框架,在其初始化函数中添加了用户配置代码。改动部分代码如下所示:
    void TD_Init(void)
    {...
         EP2CFG=0xA2;
         EP4CFG=EP6CFG=EP8CFG=0xE2;
        EP2FIFOCFG=0x15;
        EP4FIFOCFG=EP6FIFOCFG=EP6FIFOCFG=0x0D;
     ...
    }
4.3 USB设备驱动程序设计
    Cypress为其EZ-USB系列USB接口芯片提供了一个完整的开发包,其中包括通用USB驱动程序。本系统按照设计要求,在DDK平台上修改通用USB驱动程序代码,生成本系统的驱动程序代码。
4.4 上位机应用程序设计
    上位机应用程序的作用就是提供一个人机交互的显示界面,体现系统的运行状态。这里采用Microsoft Visual C++ 6.0进行上位机应用程序的设计,程序中采用CYAPI控制函数类。CyAPI控制函数类为EZ-USB FX2LP系列USB接口芯片提供了十分精细的控制接口[4]。在使用Cypress公司提供的驱动程序基础上,只需在主机程序中加入头文件CyAPI.h和库文件CyAPI.lib即可调用相应的控制函数。
5 FPGA核心模块仿真
    图5是针对分频采样控制模块的仿真时序。波形结果显示该模块在一个采样周期内能够准确产生同步时钟信号o_clk和片选信号cs,并且串行输入数据in_data经过串并转换后能够准确无误地并行输出。

    本文创新点是设计了一款同时支持单端16路和差分8路模拟信号输入、FPGA为核心控制和USB2.0为接口传输的多通道、实时、高速、便携式数据采集系统。本系统在Altera公司提供的Quartus II 8.0 集成开发环境下进行设计、编译、综合、优化、布局布线、验证和仿真,并成功下载到FPGA芯片中。经过长时间的测试,系统工作稳定、性能可靠,说明了设计结构的合理性,比较适合野外现场数据采集的场合。
参考文献
[1] 刘福奇.FPGA嵌入式项目开发实战[M]. 北京:电子工业出版社,2009.
[2] 薛园园.USB应用开发技术大全[M]. 北京:人民邮电出版社,2007:190-191.
[3] 李艳军,郭正刚,张志新,等.基于FPGA多通道同步数据采集系统设计[J].微计算机信息,2007,23(2-2):212-213.
[4] 戴小俊,丁铁夫,郑喜凤. 基于USB和DSP的数据采集系统设计[J].电子技术应用,2007,33(1):84-86.

此内容为AET网站原创,未经授权禁止转载。