嵌入式
返回首页

基于FPGA 和USB2.0 的高精度数据采集系统设计

2013-07-31 来源:dzsc

  0 引言

  随着数字通信技术的逐步发展,高速数据采集系统已经逐步取代传统的数据采集系统,其广泛应用在众多场合。新一代可编程逻辑器件FPGA 都拥有较多的IO 端口以及强大的数据处理能力,这也为高速高精度数据采集系统的研发提供了基础条件。

  1 工作原理

  本文设计的数据采集卡硬件原理框图1 如下所示。

  如图1 所示,前端模拟电路将外界的模拟信号转化成为ADC能够接收到的数据格式;高速时钟电路提供500MHz 的高速时钟,ADC 在此时钟作用下,进行ADC 变换。在整个数据采集卡中,FPGA 是进行采集控制,以及数据接收的核心。FPGA 按照1 :4 的比率对将接收到的500MHz 的LVDS 差分数据流进行分流和降速。

  数据分流之后由于数据速率与USB 接口数据传输速度不同,所以还要进行FIFO 缓冲。FIFO 的写时钟与串行收发器保持同步,当FIFO 缓冲器被写满之后,由FPGA 读取FIFO 缓冲器中的数据,并且将数据通过USB 接口芯片传输到上位机中进行显示或者存储。

  2 系统设计

  数据采集卡主要包括高速A/D 转换模块、FPGA 主控模块和USB 接口电路三个模块。

  2.1 高速A/D 转换模块

  ADC 芯片作为模数转换的核心,设计采用TI 公司推出的ADS5463,其采用流水线型结构,最高采样速度500MSPS,精度12位,拥有高速差分数字接口LVDS.

  对于高速ADC 采样电路,模拟信号输入接口的设计不仅要保证足够的传输带宽而且要完成将单端的输入信号变成差分信号的功能。本设计使用射频变压器将单端输入转换为差分输入,并通过TI 公司生产的可级联中频放大器THS9001 芯片实现中频信号放大的功能。

  在A/D 转换模块中,采样始终的质量非常重要。在本文的设计中,采用了锁相环芯片CDCM61001 生成采样时钟,并利用FPGA内部PLL 资源倍频生成采样时钟作为备用的采样时钟。本设计是用25M 的时钟倍频20 倍生成500M 以LVPECL 格式的差分电平形式。

  高速A/D 转换模块的原理图如图2 所示:

  2.2 FPGA 主控模块

  FPGA 是整个采集模块的控制核心,其主要的功能是接收数据,并且对数据进行降速、分流以及缓冲,并且将数据传通过USB接口传输给上位机。在本文的设计设计中,选择Cyclone II 系列的EP2C35F672C6,它属于一款中等密度的FPGA,相比较于ASIC低得多的成本在单片机上实现复杂的数字系统。

    设计使用FPGA 的Bank3 和Bank4 接收来自ADS5463 输出的高速LVDS 数据,包括DRY(数据输出准备好)以及OVR(数据溢出位)。Bank5 和Bank6 用于USB 接口芯片的控制,其余BANK 留作扩展之用。

  在FPGA 主控模块中,AD 输出信号和时钟信号被传输到FPGA 中的DIFFIO_RX p/n 通道上。其中p 表示正差分通道信号,而n 表示负差分通道信号。在这部分的软件设计中,使用altvds模块接收ADC 的输出数字信号、始终信号,并且利用DMUX 对数据流进行串行- 并行转换,以方便对输入信号的后续操作。

  数据流在DMUX 模块的仿真结果如图3 所示。

  如图3 所示,Data_in 是一路500MHz 的数据流,而dout1,2,3,4 为Data_in 通过DMUX 进行降速和分流之后的结果。从图中可以看出,500MHz 的高速数据流经过DMUX 降速、分流之后的输出较干净、平滑,在高速状态下,达到这种结果是比较理想的,对系统设计上也是很有利的。

  经过DMUX 降速之后的数据流已经达到了FPGA 的处理要求,但是由于FPGA 的处理速度和与上位机相连的USB 接口速率不匹配,为此需要采用FIFO 来进行缓冲。在本文的设计中,采用两个容量为4K,宽度为32 位的FIFO 来来作为FPGA 与USB 接口之间的数据缓冲。FPGA 接收高速DMUX 降速后的数据流,并且写入到FIFO 中,当FIFO 写满8K 之后,启动读始终,将FIFO 中的数据通过USB 接口分批读取到上位机中。

  2.3 USB 接口电路设计

  USB 接口的主要功能是将FPGA 缓冲区中的数据读取到上位机中。在本文的设计中,USB 接口电路采用CYPRESS 公司CY7C68013A 芯片。CY7C68013A 芯片集成了串行接口引擎来方便读取FPGA 中的数据。芯片采用2MHz 的时钟信号,同时使用外部EEPROM 存储固件程序。在USB 接口电路的初始化过程中,首先需要从EEPROM 中读取固件程序。FPGA 通过USB 接口与上位机进行数据传送的流程图如图4 所示。

  如图4 所示,EZ-USB FX2 芯片中包含有GPIF 和SlavFIFO 两种接口方式,可以满足不同数据流速度以及用户对数据处理实时性的要求。在CY7C68013A 芯片中,其接口时钟与FPGA中的IFCLK 引脚连接,从而在FPGA 中的FIFO 缓冲写满时,FPGA可以控制USB 接口电路开始从FIFO 缓冲区中读取数据。

  USB 接口的主要工作室实现对FIFO 缓冲区中数据的读取,因此其设计的逻辑也主要是对FIFO 读、写状态机的监控,其实现的流程如下:在接收到数据读指令之后,分成8 次读取FIFO中的128 位数据,并且将这些数据一起存放到FPGA 控制寄存器组中;将FPGA 的FIFO 中的数据读出,并且写入到EP6 端点缓冲区中。状态机先由空闲状态进入等待状态;当EP2 不为空时,进入读状态EP2 ;当读命令有效时,那么就进行数据的读取并且发送相应的命令,之后回到空闲状态;在等待状态下,当EP2 为空,EP6 不满时,开始写EP6,写满后也回到空闲状态。

  3 系统测试采用以产生频率为20MHz 的高频信号发生器,峰值为2.36Vpp 的正弦波作为模拟输入。系统的测试采用SignalTapII来获取两路数据采样数据,并且模拟转后后存入到FIFO 中的数据和信号。采样数据的模拟波形图如图5 所示。

  从图5 可以看出,由于两路输入的信号存在一定的增益和偏移误差,从而导致所收集数据的信号增幅值之间,产生了不一致现象。采用快速傅里叶变化分析法,首先在输入的输入信号上采集N 个点做快速傅里叶变换,假设信号谱线在K 和N-K-1 之间,那么就可以得到信噪谐波比SINAD :

  为避免信号频谱泄露,要求波形的采样率fs 和输入信号频率f0,满足其f0=fs*M/N,其中M 为一个合适的正整数。

  此方法可以进行ADC 的有效位数的测试,实验ENOB,将其取6 次得到的平均结果约为6.2.后面还要将采集到的数据进行进一步的分析,来检验通道间的不匹配对系统性能的影响。

  4 结论

  介绍了一种基于FPGA 基于FPGA 和USB2.0 的高精度数据采集系统,通过FPGA 对AD 的工作方式,进行合理的配置,并充分利用其内部自带的逻辑资源,实现对数据的缓存,避免使用其他微处理器进行的数据处理,本设计可以很好的减少芯片数和空间体积,更有利于FPGA 的发挥,具有简单、灵活、功能多样的特点。

进入嵌入式查看更多内容>>
相关视频
  • PX4固件二次开发课程

  • RISC-V嵌入式系统开发

  • NuttX Workshop 2024

  • 自己动手写操作系统

  • SOC系统级芯片设计实验

  • 自己动手做一台计算机

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章