基于FPGA和USB2.0的高速数据采集系统
时间:01-13
来源:互联网
点击:
数据采集在现代工业生产及科学研究中的重要地位日益突出,对实时高速数据采集的要求也不断提高。在信号测量、图像处理、音频信号处理等一些高速、高精度的测量中,都要求进行高速、高精度的数据采集。这就对数据采集系统的设计提出两个方面的要求:一方面,要求接口简单灵活且有较高的数据传输率;另一方面,由于数据量通常都较大,要求主机能够对数据做出快速反应,并及时分析和处理。
实现数据采集与传输,可选择如下3种方法:
①使用传统的串/并口。传统的串口(如RS232),其传输速率为几十kb/s到100 kb/s,而系统所要求的数据传输速率很高,而且还要实现数据的采集与传输同步进行,串口的速率远远达不到实时要求;对于并口,虽然它的传输速率可达到1 Mb/s以上,但由于探测器与主机相距较远,因此走线比较复杂。
②采用通用的高速数据采集卡。高速数据采集卡(如ISA或PCI卡)虽然在数据存取速度上可满足系统要求,但仍然存在很多缺点,比如安装复杂,价格昂贵,兼容性不好,受计算机插槽数量、地址和中断资源的限制,可扩展性较差等。
③使用USB2.0通用串行接口总线。USB接口是一种重要的计算机外设接口,它支持热插拔和即插即用,使用非常方便。USB2.0支持高达480 Mbps的数据传输速率。USB接口可实现计算机与多个外围设备的简单、高速互联,将USB技术应用于数据采集是非常适合的。经综合考虑,本文选择采用 USB2.0接口来完成对数据的采集与传输。
1 数据采集和传输系统方案设计
数据采集和传输系统主要由3部分组成,USB2.0通道、FPGA和A/D转换器组成,如图1所示。
CY7C68013是Cypress公司推出的EZ-USB FX2系列智能USB接口芯片。其作用是将主机所发送的命令序列经USB2.0端口输出,实现对数据采集系统的控制;同时把A/D转换器采集的数据以高速的数据序列形式发送到主机。其中,USB2.0端口提供一个能和计算机连接的数据传输接口。
FPGA利用内部的SRAM提供数据输入/输出的双缓冲功能。采用双缓冲的原因同USB中的大端点所配置的双缓冲类似,均是防止数据的溢出和保证数据传输的连续性。本文选用Altera公司的CycIone系列芯片EP1C3T144。
A/D转换器将所要采集的模拟量转换成数字量,通过滤波和放大后,由FPGA接收、缓冲、存储,经USB2.0端口传回至主机工作站。高速A/D转换器采用转换速率为20 MHz的MAX1425。
系统工作过程为:主机通过CY7C68013给数据采集系统一个采样控制命令,存入FPGA的控制寄存器中。FPGA根据该命令向A/D转换器发出相应控制信号。由于ADC采样频率为10 MHz,为和PC运行速度相匹配,在FPGA内部生成一个FIFO缓存器。A/D转换器在FPGA的ADC接口控制电路控制下,把模拟信号转换成数字信号,并将指定通道的采样数据存入FPGA内部FIFO缓存。同时,FPGA的USB接口控制逻辑查询CY7C68013是否空闲,如果空闲,那么由 FPGA的USB接口控制逻辑将指定通道的采样结果,从FPGA内部FIFO缓存送入CY7C68013的内部FIFO。当内部的FIFO容量达到一定程度后,CY7C68013自动将数据打包传送到PC机。由于固件程序把CY7C68013设置为特定的自动模式,因此CY7C68013把数据送往PC机期间的所有操作无需CY7C68013中CPU的干预,从而保证足够的数据传输速率。采样过程中FPGA的USB接口控制逻辑依次取走批量数据,在USB 接口打包传送时A/D转换持续进行,FPGA内部FIFO也被持续写入转换结果。
2 硬件设计
系统的硬件由A/D转换电路、数据采集与传输控制电路和接口电路构成。
2.1 A/D转换电路
A/D转换电路是整个系统的重要组成部分。由低通滤波器、多路选择开关和A/D转换器构成,如图2所示。本文选用Maxim公司的A/D转换芯片MAX1425。
8路模拟输入信号分别经过由运放THS4052构成的抗混叠低通滤波器去除高频成分,防止信号产生“混叠现象”。1/8模拟信号选择器根据来自FPGA板的地址码,控制模拟信号选择器74HC4051选通8路输入中的1路到输出端,送到A/D转换器MAX1425将模拟信号转换为数字信号。MAX1425 的控制信号由FPGA板提供,在控制信号的作用下以适当的时序完成转换工作。
2.2 数据采集与传输控制电路
数据采集与传输控制电路的开发工作主要集中在FPGA上。FPGA负责CY7C68013与ADC芯片之间的缓冲与控制,一边与ADC接口,另一边与USB接口,产生数据采集、通道切换、A/D转换、FIFO所需的全部控制信号;实现对传输数据的缓存、读/写控制、时钟、输出使能、端点的选择,以及对ADC的控制等功能。
如图3所示,数据采集与传输控制电路由FIFO、USB接口控制状态机、ADC接口控制状态机、三态门缓冲器、控制寄存器组几部分构成。图中,由右向左的宽箭头表示数据流;FD[9:0]是与USB接口芯片连接的双向数据总线;由左向右的宽箭头表示传送来自PC机的控制信号;单线箭头表示输入/输出,以及 FPGA内部各个模块间的控制信号线。
从数据流向看,数据在ADC接口控制状态机的协调下通过ADC接口送入FPGA的FIFO中。经过FIFO的缓冲后,在USB接口控制状态机的协调下,当 USB接口控制状态机对三态门的输出为高时,三态门开启,数据通过三态门传输到FPGA外部的USB接口;当对三态门的输出为低时,三态门呈现高阻态,FPGA的这几个引脚作为输入引脚。此状态下,来自PC机的控制信号通过CY7C68013从FD[15:0]送人FPGA中。在USB接口控制状态机的控制下,来自PC机的控制信息存人控制寄存器组,并由ADC接口控制状态机来控制送往FPGA外的ADC接口,作为对ADC的控制(如通道的选择)。
2.3 接口电路
2.3.1 FPGA内的ADC接口模块
MAX1425和74HC4051的控制信号都由FPGA产生,接口电路如图4所示。
FPGA的工作时钟为60 MHz,该时钟经过分频后,提供20 MHz给MAX1425作为工作时钟,同时也作为FP-GA内其他逻辑的工作时钟。由FPGA内状态机控制,当CS为低和ADC_Convst为高时,MAX1425进入采样保持状态。当Clock的第一个上升沿到来,MAX1425开始转换。RD输出为低时,MAX1425把转换结果放到数据总线上,FPGA开始读入10位数据(FD[15:0]中的10~15六位数据线悬空,使数据线和A/D的位数匹配)。FPGA控制寄存器的Sel[2:O] 信号作为74Hc4051的通道选择信号,从8路模拟输入信号中选择1路作为MAX1425的输入。完成一次转换后,当ADC_Convst:再次为高时,开始下一轮转换。
2.3.2 FPGA内的USB接口模块
图5是Slave模式下CY7C68013与FPGA的连接示意图。中间是FPGA中USB接口模块部分对应的信号。
2.3.3 FPGA内的USB接口控制状态机
FPGA内USB接口控制状态机的状态转移图如图6所示。共有6个状态,复位信号的模式设置为异步复位。状态机主要分为读、写两部分:读取EP2中所包含的命令,存到FPGA的控制寄存器组中;将FPGA的FIFO中的数据读出,写入EP6端点缓冲区。
该状态机工作过程为:
①系统加电或复位后,状态机进入空闲状态(idle)。
②在空闲状态下,当EP2不为空时进入read_0状态,从EP2中读出PC机传来的控制命令。随后进入read_1状态,把命令存到FPGA内控制寄存器中,并把FPGA内的FIFO清空(fifo_ach1='1'),以准备存储采样数据。之后再回到idle状态。
③在空闲状态下,当EP2为空(FX2_empty='0'),而FPGA的FIFO不为空(empty='0'),且EP6不满时,进入write_0 状态。之所以要看EP2是否为空,是想优先处理PC机通过EP2传来的命令。在write_0状态下,选中对CY7C68013的EP6操作 (ADDR=2'h2),同时从FPGA内部的FIFO中读出一个数据。之后进入write_1状态,把数据写入CY7C68013。然后进入 write_2状态,write_2状态的输出与idle状态相同,目的是提供一个时钟周期的延迟。因为FPGA工作于60 MHz的时钟下,比CY7C68013快,所以加入一个延迟以保证可靠的数据传输。
实现数据采集与传输,可选择如下3种方法:
①使用传统的串/并口。传统的串口(如RS232),其传输速率为几十kb/s到100 kb/s,而系统所要求的数据传输速率很高,而且还要实现数据的采集与传输同步进行,串口的速率远远达不到实时要求;对于并口,虽然它的传输速率可达到1 Mb/s以上,但由于探测器与主机相距较远,因此走线比较复杂。
②采用通用的高速数据采集卡。高速数据采集卡(如ISA或PCI卡)虽然在数据存取速度上可满足系统要求,但仍然存在很多缺点,比如安装复杂,价格昂贵,兼容性不好,受计算机插槽数量、地址和中断资源的限制,可扩展性较差等。
③使用USB2.0通用串行接口总线。USB接口是一种重要的计算机外设接口,它支持热插拔和即插即用,使用非常方便。USB2.0支持高达480 Mbps的数据传输速率。USB接口可实现计算机与多个外围设备的简单、高速互联,将USB技术应用于数据采集是非常适合的。经综合考虑,本文选择采用 USB2.0接口来完成对数据的采集与传输。
1 数据采集和传输系统方案设计
数据采集和传输系统主要由3部分组成,USB2.0通道、FPGA和A/D转换器组成,如图1所示。
CY7C68013是Cypress公司推出的EZ-USB FX2系列智能USB接口芯片。其作用是将主机所发送的命令序列经USB2.0端口输出,实现对数据采集系统的控制;同时把A/D转换器采集的数据以高速的数据序列形式发送到主机。其中,USB2.0端口提供一个能和计算机连接的数据传输接口。
FPGA利用内部的SRAM提供数据输入/输出的双缓冲功能。采用双缓冲的原因同USB中的大端点所配置的双缓冲类似,均是防止数据的溢出和保证数据传输的连续性。本文选用Altera公司的CycIone系列芯片EP1C3T144。
A/D转换器将所要采集的模拟量转换成数字量,通过滤波和放大后,由FPGA接收、缓冲、存储,经USB2.0端口传回至主机工作站。高速A/D转换器采用转换速率为20 MHz的MAX1425。
系统工作过程为:主机通过CY7C68013给数据采集系统一个采样控制命令,存入FPGA的控制寄存器中。FPGA根据该命令向A/D转换器发出相应控制信号。由于ADC采样频率为10 MHz,为和PC运行速度相匹配,在FPGA内部生成一个FIFO缓存器。A/D转换器在FPGA的ADC接口控制电路控制下,把模拟信号转换成数字信号,并将指定通道的采样数据存入FPGA内部FIFO缓存。同时,FPGA的USB接口控制逻辑查询CY7C68013是否空闲,如果空闲,那么由 FPGA的USB接口控制逻辑将指定通道的采样结果,从FPGA内部FIFO缓存送入CY7C68013的内部FIFO。当内部的FIFO容量达到一定程度后,CY7C68013自动将数据打包传送到PC机。由于固件程序把CY7C68013设置为特定的自动模式,因此CY7C68013把数据送往PC机期间的所有操作无需CY7C68013中CPU的干预,从而保证足够的数据传输速率。采样过程中FPGA的USB接口控制逻辑依次取走批量数据,在USB 接口打包传送时A/D转换持续进行,FPGA内部FIFO也被持续写入转换结果。
2 硬件设计
系统的硬件由A/D转换电路、数据采集与传输控制电路和接口电路构成。
2.1 A/D转换电路
A/D转换电路是整个系统的重要组成部分。由低通滤波器、多路选择开关和A/D转换器构成,如图2所示。本文选用Maxim公司的A/D转换芯片MAX1425。
8路模拟输入信号分别经过由运放THS4052构成的抗混叠低通滤波器去除高频成分,防止信号产生“混叠现象”。1/8模拟信号选择器根据来自FPGA板的地址码,控制模拟信号选择器74HC4051选通8路输入中的1路到输出端,送到A/D转换器MAX1425将模拟信号转换为数字信号。MAX1425 的控制信号由FPGA板提供,在控制信号的作用下以适当的时序完成转换工作。
2.2 数据采集与传输控制电路
数据采集与传输控制电路的开发工作主要集中在FPGA上。FPGA负责CY7C68013与ADC芯片之间的缓冲与控制,一边与ADC接口,另一边与USB接口,产生数据采集、通道切换、A/D转换、FIFO所需的全部控制信号;实现对传输数据的缓存、读/写控制、时钟、输出使能、端点的选择,以及对ADC的控制等功能。
如图3所示,数据采集与传输控制电路由FIFO、USB接口控制状态机、ADC接口控制状态机、三态门缓冲器、控制寄存器组几部分构成。图中,由右向左的宽箭头表示数据流;FD[9:0]是与USB接口芯片连接的双向数据总线;由左向右的宽箭头表示传送来自PC机的控制信号;单线箭头表示输入/输出,以及 FPGA内部各个模块间的控制信号线。
从数据流向看,数据在ADC接口控制状态机的协调下通过ADC接口送入FPGA的FIFO中。经过FIFO的缓冲后,在USB接口控制状态机的协调下,当 USB接口控制状态机对三态门的输出为高时,三态门开启,数据通过三态门传输到FPGA外部的USB接口;当对三态门的输出为低时,三态门呈现高阻态,FPGA的这几个引脚作为输入引脚。此状态下,来自PC机的控制信号通过CY7C68013从FD[15:0]送人FPGA中。在USB接口控制状态机的控制下,来自PC机的控制信息存人控制寄存器组,并由ADC接口控制状态机来控制送往FPGA外的ADC接口,作为对ADC的控制(如通道的选择)。
2.3 接口电路
2.3.1 FPGA内的ADC接口模块
MAX1425和74HC4051的控制信号都由FPGA产生,接口电路如图4所示。
FPGA的工作时钟为60 MHz,该时钟经过分频后,提供20 MHz给MAX1425作为工作时钟,同时也作为FP-GA内其他逻辑的工作时钟。由FPGA内状态机控制,当CS为低和ADC_Convst为高时,MAX1425进入采样保持状态。当Clock的第一个上升沿到来,MAX1425开始转换。RD输出为低时,MAX1425把转换结果放到数据总线上,FPGA开始读入10位数据(FD[15:0]中的10~15六位数据线悬空,使数据线和A/D的位数匹配)。FPGA控制寄存器的Sel[2:O] 信号作为74Hc4051的通道选择信号,从8路模拟输入信号中选择1路作为MAX1425的输入。完成一次转换后,当ADC_Convst:再次为高时,开始下一轮转换。
2.3.2 FPGA内的USB接口模块
图5是Slave模式下CY7C68013与FPGA的连接示意图。中间是FPGA中USB接口模块部分对应的信号。
2.3.3 FPGA内的USB接口控制状态机
FPGA内USB接口控制状态机的状态转移图如图6所示。共有6个状态,复位信号的模式设置为异步复位。状态机主要分为读、写两部分:读取EP2中所包含的命令,存到FPGA的控制寄存器组中;将FPGA的FIFO中的数据读出,写入EP6端点缓冲区。
该状态机工作过程为:
①系统加电或复位后,状态机进入空闲状态(idle)。
②在空闲状态下,当EP2不为空时进入read_0状态,从EP2中读出PC机传来的控制命令。随后进入read_1状态,把命令存到FPGA内控制寄存器中,并把FPGA内的FIFO清空(fifo_ach1='1'),以准备存储采样数据。之后再回到idle状态。
③在空闲状态下,当EP2为空(FX2_empty='0'),而FPGA的FIFO不为空(empty='0'),且EP6不满时,进入write_0 状态。之所以要看EP2是否为空,是想优先处理PC机通过EP2传来的命令。在write_0状态下,选中对CY7C68013的EP6操作 (ADDR=2'h2),同时从FPGA内部的FIFO中读出一个数据。之后进入write_1状态,把数据写入CY7C68013。然后进入 write_2状态,write_2状态的输出与idle状态相同,目的是提供一个时钟周期的延迟。因为FPGA工作于60 MHz的时钟下,比CY7C68013快,所以加入一个延迟以保证可靠的数据传输。
USB 总线 FPGA Cypress Altera ADC 电路 滤波器 Maxim 低通滤波器 MCU 单片机 嵌入式 相关文章:
- 用电子技术最大化太阳能电池板输出功率(05-18)
- 2009视频监控:网络化及其推动的几大趋势(06-03)
- 与MSP430 USI端口配合使用ADS8361(06-18)
- 辰汉电子推出低成本快速量产视频监控方案+4路输入方案(06-24)
- 用于风力发电设备的连接器的简易安装与维护(06-21)
- 解读USB-IF电池充电规范(10-27)