《电子技术应用》
您所在的位置:首页 > 测试测量 > 设计应用 > 基于FPGA的数据采集系统的设计
基于FPGA的数据采集系统的设计
刘 军,岳兴莲,何国国,罗 石,吴硕开
摘要: 介绍了一种用于汽车姿态测量的数据采集系统的设计,该系统基于FPGA+USB架构,采用FPGA控制整个系统的采集时序, USB芯片作为数据采集通道,上位机完成姿态解算和数据显示功能。
Abstract:
Key words :

  摘 要: 介绍了一种用于汽车姿态测量的数据采集系统的设计,该系统基于FPGA+USB架构,采用FPGA控制整个系统的采集时序, USB芯片作为数据采集通道,上位机完成姿态解算和数据显示功能。
    关键词: FPGA;USB;数据采集

   现代化生产和科学研究对采集系统的要求日益提高。传统的采集卡速度慢、处理功能简单、采用分立元件、电路非常复杂;而且可靠性差、不易调试、不能很好地满足特殊要求。现场可编程门阵列(FPGA)是专用集成电路中集成度最高的一种,用户可对FPGA内部的逻辑模块和I/O模块重新配置,以实现用户所需逻辑功能。用户对FPGA的编程数据放入芯片,通过上电加载到FPGA中,对其进行初始化;也可在线对其编程,实现系统在线重构[1]。本系统设计采用USB2.0 CY7C68013通信接口芯片作为数据采集通道,由FPGA芯片EP1C6Q240C8N作为采集设备的控制单元,由PC机完成姿态的解算及结果的显示。
1 系统的组成及原理
  该采集系统主要由前端调理模块、A/D转换控制模块、SRAM存储模块及USB接口模块组成,系统框图如图1所示。

 

 

2 FPGA主控器内部模块
2.1 A/D转换控制模块

  A/D转换模块选用AD7685芯片。AD7685是Analog Device公司生产的一款16位、电荷再分配、高速、低功耗的逐次逼近型模数转换器(ADC),具有250 kS/s采样速率。芯片在Verilog编程语言的控制下,完成模拟信号到数字信号的转换。
2.2 FIFO缓存
  调用FPGA片上资源实现片上FIFO缓存,由于A/D采样频率与SRAM的读写频率不一致,所以采用读写时钟不同的FIFO,达到数据缓存和转换时钟域的双重目的。
2.3 SRAM乒乓缓存模块
    选用2片IS61LV25616存储芯片,该芯片存储容量为256K×16,采用Verilog硬件描述语言控制实现乒乓缓存,控制过程如图2所示。从片上FIFO输出的数据经选择开关后,分别进入缓冲模块1和缓冲模块2。当数据写入缓冲模块1时,USB模块从缓冲模块2读取数据;当数据写入缓冲模块2时,USB模块从缓冲模块1读取数据以传到上位机进行处理。

 


2.4 USB控制模块
    USB接口芯片采用EZ-USB FX2(CY7C68013),FX2作为USB2.0数据通道来实现与主机的高速通信。FPGA能够满足Slave FIFO要求的传输时序[2]作为Slave FIFO主控制器。图3分别给出了FX2与FPGA的接口图和状态转换图。

 


    同步Slave FIFO写时序如下:
    IDLE:当写事件发生时,转到状态1。
    状态1:指向IN FIFO,激活FIFOADR[1:0],转向状态2。
    状态2:如果FIFO满标志为“假”(FIFO不满),则转向状态3;否则停留在状态2。
    状态3:传送总线驱动数据,为1个IFCLK激活SLWR,转向状态4。
    状态4:如果有更多的数据要写,则转向状态2;否则转向IDLE。
3 USB芯片固件程序及驱动程序
3.1 FX2的固件程序设计

    CY7C68013芯片固件程序负责处理PC机发来的各种USB请求,以完成主机与外围电路间的数据传输。写固件程序是比较复杂的,需要用到大量的函数,但其基本结构却相对简单,包括下面3个过程[3]:
    (1)初始化:处理器和外围电路的初始化。
    (2)主函数:完成符合设备特定要求的代码。
    (3)中断处理:处理各种中断的程序代码。
    Cypress公司的EZ-USB FX2开发套件提供给用户1个固件函数库(Ezusb.lib)和固件框架(Framework),两者均是基于KEIL C51进行开发的。固件函数库提供了一系列的函数来加速USB固件程序的开发,使用时只需在程序中包含EZUSB.H和EZREGS.H两个头文件,并在项目中链接Ezusb.lib,就可以直接使用固件库中的各个函数[4]。
    在程序起始时,固件框架将执行如下步骤:
    (1)首先设置所有的内部状态变量,即设置起始的初值。
    (2)调用用户的初始设置函数TD_Init(),待返回后,固件框架会设置USB为未配置的状态,并且使能中断。
    (3)紧接着在1 s的间隔内,开始重新列举设备,并直到设置(SETUP)封包收到端点0为止。
    (4)一旦SETUP包被检测到,固件程序结构框架就开始进行任务分配。任务分配就是依次重复地执行下面的过程:
   ①调用用户函数TD_Poll()。
   ②检测是否有标准的设备请求,如果有,则执行指令并做出相应的操作。
    ③检测USB核是否有USB挂起信号,如果收到,则调用用户程序TD_Suspend(),从该函数成功返回后(返回值为TRUE),再检测是否发生USB唤醒事件。如果未检测到,则处理器处于挂起方式;如果检测到,则调用用户程序TD_Resume(),程序继续运行。如果从TD_Suspend()返回为FALSE时,则程序继续进行。
    标准请求和vendor专用请求由框架分析和执行。默认情况下,对标准请求执行USB规定的响应,无论如何,框架提供交互的连接,以允许用户程序处理或覆盖指定的设备请求。EZ-USB中断也交给框架进行处理,任务循环的流程图如图4所示。

 


    在FX2芯片的固件程序设计中,最关键的就是系统初始化TD_Init(void)[3-5],下面是其部分代码。

void TD_Init(void)    
{
    CPUCS=((CPUCS & ~bmCLKSPD)|bmCLKSPD1);
                  //设置CPU时钟频率为48 MHz
    SYNCDELAY;  
                  //设置68013工作于Slave FIFO模式
    REVCTL=0x03;      
                  //必须设置REVCTL.0和REVCTL.1为1
    SYNCDELAY;
    IFCONFIG=0x43;     //工作于同步FIFO模式
    SYNCDELAY;         //配置各个端点的工作状态
    EP2CFG=0xE8;       //端点2,IN,块传输,1 024 B,4倍缓冲区
    SYNCDELAY; 
    EP2FIFOCFG=0x09;     //配置端点2工作于16位模式,自动接收IN令牌包
    SYNCDELAY; 
    PINFLAGSAB=0x00;   //定义FLAGA为可编程级标志,FLAGB:FIFO满标志位
    SYNCDELAY;         //定义FLAGC为满标志,
    PINFLAGSCD=0x00;
    SYNCDELAY;         //一般不需要FLAGD
    PORTACFG=0x00;    //用PA7/FLAGD作为端口引脚,不作为FIFO标志
    SYNCDELAY;
    FIFOPINPOLAR=0x00;      //设置所有FIFO接口引脚为低电平有效
    SYNCDELAY;
    EP2AUTOINLENH=0x02;    //端点2自动接收512B数据
    SYNCDELAY;
    EP2AUTOINLENH=0x00;
    SYNCDELAY;
                           //复位EP2的FIFO缓冲区
    FIFORESET=0x80;       //不接收主机发出的命令
    SYNCDELAY;
    FIFORESET=0x02;       //复位EP2的FIFO缓冲区
    SYNCDELAY;
    FIFORESET=0x00;              //恢复正常工作
    SYNCDELAY;
    Rwuen=TRUE;              //使能远程唤醒功能 
}
3.2 USB设备驱动程序
    USB设备驱动程序的主要功能是使Win32应用程序能正确访问本数据采集卡的硬件设备。本设计中将CY7C68013的固件代码存放在上位机上,当系统上电或USB连接时,再将它下载至芯片的RAM中,由增强型8051执行。这一过程需要使用2个驱动程序:1个用于下载芯片的固件程序,另1个用于实现本数据采集卡的具体功能。也可以使用EZ-USB的通用驱动程序,很多USB芯片的厂商都为其USB芯片提供了通用驱动程序,可以满足大部分系统的需求,用户可在此基础上直接进行固件程序的开发[6]。
4 主机应用程序
  应用程序主要负责读取系统硬件所输出的数据采集结果,并实时显示波形,所使用的编程语言为微软的Visual C++6.0语言编写的Win32应用程序。
  主要控件包括:采集控制组按钮,USB组按钮。采集控制组按钮负责控制硬件系统是否进行数据采集,并使用USB块传输来读取采集结果。USB组按钮主要负责读取该数据采集卡的USB设备描述符和配置描述符。
  在该数据采集系统的设计中,CY7C68013芯片灵活的接口和FPGA可编程特性简化了外部硬件的设计,提高了系统的可靠性,且利于设备的生产与调度。事实证明,本文设计的系统完全满足设计和使用要求。
参考文献
[1] 严雪萍.基于FPGA的高速数据采集系统[J].微计算机信息,2008(1-2):209-211.
[2] 华清远见嵌入式培训中心.FPGA应用开发入门与典型实例[M].北京:人民邮电出版社,2008.
[3] 钱峰.EZ-USB FX2单片机原理、编程及应用[M].北京:北京航空航天大学出版社,2006.
[4] 李英伟.USB2.0原理与工程开发(第2版)[M].北京:国防工业出版社,2007.
[5] 张弘.USB接口技术[M].西安:西安电子科技大学出版社,2002.
[6] 薛园园.USB应用开发技术大全[M].北京:人民邮电出版社,2007.

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