微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于FPGA的USB接口数据采集系统设计

基于FPGA的USB接口数据采集系统设计

时间:07-22 来源:互联网 点击:


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芯片中。经过长时间的测试,系统工作稳定、性能可靠,说明了设计结构的合理性,比较适合野外现场数据采集的场合。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top