维普资讯 http://www.cqvip.com 《工业控制计算机}2007年20卷第7期 基于FPGA数据采集系统的研究 Data Acq uisition System Research Based FPGA 于亚萍 (河南理工大学电气工程与自动化学院,河南焦作454003) 钱建平 (南京理工大学自动化学院,江苏南京210094) 摘要 针对数据采集卡成本高并且易受机箱内环境影响的这一不足,构建了以FPGA为核心的数据采集系统。系统使用 FPGA作为核心CPU,控制各个模块,完成信号AD转换、FIFO缓存、USB串行通信等功能。该系统在VC++环境下编写动 态链接库资源,以调用动态链接库的形式,实现USB与PC机的通信。 关键词:数据采集,FPGA,通用串行总线USB,VHDL Abstract The paper aimed at shortcoming of data acquisition card which it is high cost and easily be affected within PC envi— ronment.Thus the system put up data acquisition based field programmable gate array(FPGA),The modules in this system are controlled by FPGA as the CPU core to complete the functions such as signal sampling by ADC,data caching by FIFO, and communicating by USB,Then use Visual C++to program dynamic link library,which realized communication between USB and computer by quoting DLL. Keywords:data acquisition,FPGA,USB,VHDL 现有的数据采集系统通常的采集方式是采用数据采集板 卡,如A/D卡及RS一422、RS一485等总线板卡。采集板卡不仅 -t A 74拄制} 块I usB 成本高,安装麻烦,而且易受机箱内环境的干扰而导致采集数据 的失真;同时,易受计算机插槽数量和地址、中断资源的,可 咂 枉艇制块 扩展性差;另一方面,采用单片机或DSP作为CPU控制ADC、 存储器和其它外围电路的工作,单片机的时钟频率较低,难以适 图2 FPGA内部控制程序框图 应高速数据采集系统的要求,而DSP虽然可以实现较高速的数 节分两次发送。其中高字节的高4位传送12位数据的高4位, 据采集,但其速度提高的同时也提高了系统的成本。因而,本文 低4位填充0。A/D转换输出的12位数据 构建了一种基于FPGA的高速数据采集系统,它主要有FPGA、 分成两个字节后,先传送低字节,后传送高 A/D芯片以及USB总线构成。FPGA中利用硬件描述语言 字节。 VHDL语言编程实现,FPGA在该数据采集系统中取代了单片机 在本系统中,需要把FPGA输出的数字 或DSP对数据采集过程进行控制。此外,主机应用程序采用 信号发送到上位机去,故在数据传输通道中 LabVIEW进行编程。 仅用到了USB总线的读操作。在这种情况 1 系统设计 下,数据传输通道流程图如图3所示。 系统主要由多路模拟开关、采样保持电路、A/D转换、FP— 2.2 FIFO模块 GA控制模块和USB通信接口等部分。该设计中USB接口器件 FIFO是一个先进先出堆栈,作为数据 选用的是Philips公司的PDIUSBD12,符合USB1.1协议,FP- 缓冲器,因为AD574转换速度比较慢, GA选用的是Xilinx公司Spa ̄anⅡ系列的XC2S200PQ208芯 PDIUSBD12读取数据速度较快,为了防止 片。系统设计框图如图1所示。 传送过程中数据的丢失或重复读取,将处理 图3数据传输通道 程序流程图 嚣一.器.詈 后的数据存入FIFO中。 2.3 USB控制模块 本系统中USB设备端控制模块是USB开发的核心部分。 图1 系统设计框图 该模块主要负责接收并处理驱动程序的请求,如请求描述符、请 2 FPGA控制模块 求或设置设备状态、请求设备设置、请求或设置设备接口等 在本系统中所有时序控制均由FPGA来完成,采用VHDL USB1.1标准请求;控制PDIUSBD12芯片接收应用程序的控制 语言编写控制程序,这些时序控制包括对A/D转换器的控制,12 指令等。 位并行数据的处理,数据的缓存,以及对USB接口器件的控制。 1)分频模块。由于要求PDIUSBD12的读写周期大于500ns, 2.1数据采集通道时序控制 即读写的时钟频率不能超过2MHz,故要对系统的时钟进行分 首先,FPGA通过AD转换的时序控制模块将采集到的模 频。本系统的时钟频率为32MHz,为满足上述要求,需将系统时 拟信号转换为12位数字信号,然后,将信号缓存,并通过数据处 钟分频16倍以上。 理模块将12位数字信号转换为高4位和低8位,作为高、低字 2)延时电路。PDIUSBD12复位后,至少等待3ms才能对 河南理工大学校级资助项目。 维普资讯 http://www.cqvip.com 基于FPGA数据采集系统的研究 这些生成工具能够很容易地生成一个USB驱动程序框架,故本 系统设计采用了Driver Studio 2.7进行驱动程序的开发。 应用程序界面一般用VC++编写,较为复杂,且花费的时 间较长,而本系统采用LabVlEW来编写应用程序界面。利用 LabVIEW编制USB应用程序,将其和USB总线结合起来的进 行数据采集的系统集成了两者的优点。 LabVlEW虽然有接口卡的驱动和管理程序,但其主要是针 对NI公司自己生产的卡。对于普通的I/O卡,还不能直接被 LabVlEW所应用。利用自己编写的动态链接库(DLL)模块,通过 调用DLL中的导出函数来完成数据的读写,实现LabVlEW与 图4 PDIUSBD1 2控制模块框图 USB设备的数据通讯。在LabVlEW环境下调用DLL是通过使 用一个重要的子VI——Cal lLibrary Function Node(CLFN)来 PDIUSBD12寄存器进行访问,从而能使晶振有足够的时间稳定 下来。 实现的。 3)沿控制模块。PDIUSBD12对数据的读写都有各自的读/ 本系统设计中动态链接库的编写是在VC++6.0环境中选 写控制信号WR—N和RD—N,每次读/写操作都在对应控制信号 择Windows 32 Dynamic Link Library进行的。主要完成的功 的下降沿触发。 能是打开、关闭USB设备和对端1和端点2进行读写。 4)输入/输出切换。由于PDIUSBD12的8位数据总线是双 CLFN这个节点位于函数模板Function—Advanced下,调 向总线,故读/写操作之一在进行的时候,另一个操作信号源必 用编写的DLL就能实现USB接口的数据传输功能。 须关闭,避免双驱动。 4结束语 5)请求处理模块。请求处理模块的功能是根据主机的请求 本系统利用FPGA作为微控制器,采用VHDL语言进行模 来控制设备收发模块的处理状态,并与设备收发模块一起工作。 块化编程,所产生的硬件电路对整个数据采集系统进行时序控 当接收到主机请求时,请求处理模块输出相应的请求命令和中 制,使系统程序设计具有良好的移植性;利用LabVIEW图形化 断命令,这些命令用来控制设备收发模块的工作。 编程工具编写了应用程序界面,并通过调用动态链接库实现了 6)设备收发模块。设备收发模块主要功能为配置PDIUSBD1 2、 外部数据与PC机之间的通信。与传统的数据采集卡相比,该数 处理PDIUSBD12产生的中断、完成从缓冲区读取数据、根据需 据采集系统集成了FPGA、USB、LabVIEW三者的优点,降低了 要将数据通过PDIUSBD12发送给主机,完成主机请求的每个 成本,提高了数据传送速度,更适合实时数据采集系统的需求。 解析工作,并将解析完成的数据请求传递给请求处理模块。 编写一个测试激励文件,虚拟一个PDIUSBD12接口器件, 参考文献 [1]任晓东,文博.CPLD/FPGA高级应用开发指南[M].北京:电子工业 利用Modelsim对其进行仿真,可以判断固件代码正确性。 出版社,2O03 3 PC机应用程序 [2]陈秀玲,周欣,等.基于USB接口的数据采集系统的设计与实现[J]. 驱动程序通常采用Windows DDK来实现,如果只使用 自动化与仪表,2004,9(25):19-22 DDK进行开发,比较复杂。目前有许多第三方软件厂商提供了 [3]EDA先锋工作室_FPGA/CPLD设计工具[M].北京:人民邮电出版 各种各样的生成工具,如driverworks、Driver Wizard等。由于 社,2003 [收稿日期:2007.1.4] (上接第32页) 据,这两个步骤并行工作,数据未被耽搁。CPU2接收数据需要 3软件设计 的时间可以作如下分析:TW为车站之间转发数据时空留的时间, 收发器CPU1的软件比较简单,这里不作陈述,主要讲解收 设第N站的数据帧长度为C ,数据传输波特率为B,(1+8+1) 发器CPU2的软件设计。由于数据在车站之间传输时存在干扰, 表示发送一个字节的总位数(8位数据位和起始停止各一位), 为保证信号正确传输,本系统所有通信采用的波特率均为 则第N站CPU2转发第M(M<N)站数据需要的时间Tm为: 1200bps,8位数据位,1位起始位及1位停止位的串行字节格 =Clm (7+8+1)/B+L (1) 式。其帧的格式如下: 从式(1)可以得出第N站转发前方所有车站数据需要的时 AAH 55H【站号【方向号I有效数据I校验字节 间T为: 十 +…+ —T (2) CPU2的软件具有自动判错功能。发送程序发送数据时,对 调度中心南线5个车站的采集点字节数约为1 10个(有约 有效数据进行累加(溢出丢失),累加和作为校验字节发送,显示 1000个开关量),由式(2)得出循环一次的时间约为1.3s,完全 程序也对接收的有效数据进行累加,如果累加和与校验字节相 等,则表示该组数据有效,否则无效。接收程序不断检测上一车 满足现场规定采集信号传输时间的要求。 4结束语 站传来的数据,在查询到帧头(AAH,55H)后,随即判断站号,并 经几个月的使用,整个系统使用普通电话线在无中继的情 按照站号的不同设置不同的计数器初值。如果接收主程序在有 况下,可靠传输距离达到了20km。 效的时问内转发完某一站规定的字节数,则接收主程序进行下 参考文献 一站的帧头查询;如果在有效的时间内没有转发完某一站的字 [1]石东海.单片机数据通信技术从入门到精通[M].西安:西安电子科技 节数,则接收主程序不再等待接收,而是跳出进行下一站的帧头 大学出版社,2002 查询。进行一轮循环后,CPU2开始发送本站的数据。为了提高 [2]何立民.MCS一51单片机应用系统设计[M].北京:北京航空航天大 传输效率,CPU2在接收第X个数据的同时发送第X一1个数 学出版社,1990 [收稿日期:2007.1l23]