数据采集广泛应用于民用、工业、军事,航空航天等各个领域,且在对一些复杂的系统进行连续测试时,拥有多通道、大容量、高精度的数采系统尤为重要,而现有的采集系统并未能满足海量数据的实时存储要求。针对此问题,文中设计了能对高达128路数据进行采样,采样率高达1.6 M/s,存储容量可达32GB的实时信号采集系统。存储部分采用FLASH和SD卡同时存储,FPGA作为数据采集与SD卡之间的高速接口,且SD卡拆装方便,容量可变,用户可根据需求更换存储容量,大容量的存储设备使数据进行实时备份成为可能,提高了系统的可靠性。
1.工作原理简介
1.1 系统工作原理
系统FPGA选用Spartan II系列的XC2S100ETQl44芯片,系统上电后,由静态存储器XCl8V01将固化在其中的数字逻辑电路映射到FPGA器件中,从而使FPGA成为真正意义上的控制核心。当启动信号有效时,在中心控制逻辑的作用下,SD卡初始化,且启动整个数据采集工作,控制8片16选1模拟选择开关进行通道选择,并控制8片12位高速模数转换器进行模拟电压的采集,为避免数据存储空间的不足与浪费,系统有两种工作模式,当采集短期数据时,系统启用FLASH模式;当采集长期数据时,系统启用SD模式,将采集到的实时数据根据具体的工作模式分时存储到FLASH存储器和大容量SD卡中。当采集任务完成后,将读数电缆接好,由上位机软件通过远程读数装置发出FLASH读数和擦除指令,也可以用读卡器对SD卡进行读数。
1.2 系统总体设计方案
系统能够对128路模拟信号同时采集,其中单路模拟信号的采样率可达12.5 kS/s,总采样率为1.6 MS/s,为了满足至少4 MB/s的数据写入能力,设计选用型号为K9FIG08UOA大容量128M字节FLASH,其写入速度典型值为7 MB/s。对于SD卡,采用SD2.0,此卡采用了FAT32文件系统,这样一来,最大可以支持32GB的容量,目前已经做到了4GB,写人速度最高可达5 MB/s。
系统主要包括5个模块:电源模块、信号调理模块、通道选择模块、A/D转换模块和数据存储模块。Spartan II系列的XC2S100E为主控制器,系统性能能达到200 MHz,该器件集成了丰富的逻辑门,且内含有10块双端口RAM,通过双端口RAM可以组成内部FIFO来缓存数据。系统的核心部分是A/D转换,A/D转换包括采样、保持、量化和编码4个过程。设计中采用的是AD7495,它具有精度高(12 bit),转换速度快(最高1.0 MSPS),功耗低(典型值10.5 mW)等特点。为保证高的采样率,系统采用多路开关方式进行信号的通道选择,多片高速A/D器件流水工作,由FPGA发出控制信号,对它们的地址等时间推进。鉴于此,选用8片16选1的ADG506芯片,其切换速度最高可达108次每秒,且其功耗低,外围电路简单,其总体结构框图如图1所示。
图1 总体结构框图
2.系统软件设计
2.1 系统时序控制
在系统中,所有时序控制均由FPGA来完成,采用VHDL语言编写控制程序,这些时序控制包括对A/D转换器的控制,12位串行数据的处理,数据的缓存,以及对FLASH、SD卡读写的控制。系统对输入的128路模拟信号先进行经过初步调理,传人模拟开关,模拟开关采用8片无差别16路选一开关,每片选通16路信号,共128路信号。当转换到某一通道时,FPGA同时启动A/D进行模数转换。在此之前,信号再次经过调理。经A/D采样电路采样转换后的数据经FPGA的控制送到FLASH中,当采集时间超过30 S时,系统自动启用SD模式将数据存人SD卡中。系统关键难题在于用FPGA协调控制好A/D采样的时序,多路开关的转换频率以及FLASH、SD卡存储器编程的逻辑,而不至于导致AJD采样速率过高,数据存储步调跟不上,或者A/D采样速率过低,数据存储器空耗着等待读取数据,导致整个系统的性能下降。鉴于此,整个系统采用全局时钟,使得启动A/D转换,通道转换和数据FIFO存储的时序统一。
2.2 FPGA内部FIFO设计
数据经A/D转换后,由FPGA时序控制存人外部FLASH中,但由于Flash是按页存储的,每存满一页后,都要对下一页重新写人控制字和地址。在设计中,用硬件语言状态机来控制FLASH的坏块检测和每页的控制字和地址的输入,且最长消耗500个系统周期,故最大编程时间为500×50 ns=25 us,而A/D每1us上传4B的数据,故FLASH页编程期间A/D最多上传100B,则为避免数据的丢失,在这段时间内必须有一个缓存装置来存储A/D转换的数据,异步FIFO是一种在电子系统中广泛应用的缓存器件,而在设计中,充分利用了FPGA内部集成的丰富双端口RAM。通过将4个宽度为2位,深度为1024的双口RAM并联起来构成一个容量为1K的异步FIFO模块来缓存数据。这种异步FIFO比外部FIFO芯片更能提高系统的稳定性。
2.3 数据编帧
系统A/D流水线工作同时有8路信号分别传人8片A/D,为了区分不同通道的数据及防止数据丢失,且便于上位机及相关软件对数据的后续处理,必须对不同通道的数据进行编帧。采用的是12位A/D,转换前4个周期先输出4个无效零,接下来8路A/D串行输出12位转换数据,故将每路数据编帧为16位,高4位由3位通道号和1位标志位(前64路标志位为‘0’,后64路标志位为‘1’)构成,当8路数据处理完成后,切换下一通道,将处理好的8路数据(每路16位)依次按高8位和低8位的次序在写信号的上升沿送人双口RAM的A口。为确保数据不丢失,需在每帧数据前加上2个字节的帧头EB,90和2个字节的帧计数,1个字节的帧尾,故一帧数据共有21个字节,具体帧格式如图2所示。
图2 数据帧格式
3.SD卡驱动设计
SD卡有2种工作模式:SD模式和SPI模式,由于SD卡工作在SPI模式时,只需要4根信号线,即cs片选、DIN数据输入、CLK时钟、DOUT数据输出,接口与操作方法比较简单,易于实现,本设计选用SPI模式。驱动SD卡所涉及的主要功能操作有:SD卡复位、初始化、写SD卡扇区、读SD卡扇区。在系统上电后,首先由控制器向CLK时钟信号线上发送至少74个系统时钟信号来唤醒SD卡的SPI通信,然后发送CMD0复位命令对SD进行复位操作,当SD卡数据输出端读取复位成功标志(0lH)时,再发送CMD55+ACMD41命令对SD卡进行初始化,初始化完成之后,在SD卡中建立FAT文件系统,系统触发后所采集数据就以文件的形式存放在SD卡上,用通用的SD卡读卡器将数据读出后就可以利用Windows操作系统下的MatLAB或其他高级软件对数据进行分析处理。
3.1 SD卡文件系统结构
微软在Dos/Windows系列操作系统中共使用了6种不同的文件系统(包括即将在windows的下一个版本中使用的Winfs)。它们分别是:FAtl2、FATl6、FAT32、NTFS、NTFS5.0和WINFS,目前应用最多的是FATl6、FAT32、NTFS文件。由于FATl2可以管理的磁盘容量最多为8M且文件碎片严重,该系统选用FAT32文件系统。FAT文件系统用“簇”作为数据单元。1个“簇”由1组连续的扇区组成,簇所含的扇区数必须是2的整数次幂,簇的最大值为“个扇区,即32KB.所有簇从2开始进行编号,每个簇都有一个自己的地址编号,用户文件和目录都存储在簇中,FAT文件系统的总体布局如图3所示。
图3 FAT文件系统总体布局
其中,保留区含有一个重要的数据结构——系统引导扇区(DBR)。FATl2、FATl6的保留区通常只有一个扇区,而FAT32的保留扇区要多一些,除0号扇区外,还有其他一些扇区,其中包括了DBR的备份扇区。FAT区由各个大小相等的FAT表组成——FATl、FAT2,FAT2紧跟在FATl之后。数据区用于存储用户的读写数据。
3.2 SD卡的读写操作
在SPI模式下,SD卡支持整块和多块写命令,在接受合法写命令(CMD24)时,SD卡将以响应标志(OOH)响应并且等待数据块从控制器发送。控制器接收到SD卡的响应标志后,向SD卡写入数据块“开始块”象征(FEH),则表明数据开始传输,当512字节数据成功写入之后,再写入两个字节的CRC检验码。此时控制器开始对SD卡的数据输出端进行读取,当读取的数据最后五位为00101时,则表明SD卡已经成功接收了512字节的数据,之后SD卡将接收的数据写入内部相应的FLASH中,SD卡的1次写操作结束。在接受合法读命令CMDl7时,SD卡将在数据输出端输出响应标志,当标志位为00H时,表明17号命令已经成功写入,之后控制器对SD卡数据输出端连续读取,当读取到字节FEH,表明SD卡已经开始对外输出数据了,当512个字节读取完成之后,紧接着的是两个字节的CRC校验码。当读取完CRC校验码后,CS使能信号恢复高电平,SD卡的1次读操作结束。SD卡的读写操作流程如图4所示。
图4 SD卡读写控制漉程图
4.系统调试及问题分析
4.1 系统时钟匹配问题
系统是由1块主控芯片控制2块硬件电路板,在调试过程中,由于2块板问的晶振在时序上没能完全的同步,导致同一信号分别由两块板的通道采集后,经上位机波形还原后呈现如图5所示。后将两块板用同一芯片控制,实现完全的时序同步时,最终解决此问题。
图5 波形还原图
4.2 数据存储速度不匹配问题
该设计最开始FLASH从内部FIFO每取一个字节数并且写入FLASH用了8个时钟周期,故FLASH每秒存储数据为1/(6×50 ns)=3.3M,然而内部缓存模块每秒有不低于4M的数据输入,由于FPCA内部数据缓存模块FIFO与外部存储设备的存取速率不匹配,导致采集过程中部分数据丢失,造成信号波形严重失真,如图6所示。要想解决此问题,则必须提高FLASH的存储速度,使FLASH从内部FIFO取数的时间尽量短。如果从内部FIFO取每个字节的时间能够少两个时钟周期,那么取完lK字节将少2K个时钟周期的时间,这将不仅使FLASH页编程的整个周期时间减短,而且大大的提高了FLASH的存储速度。下面是FLASH从内部FIFO取数的VHDL代码。从中可以看出,FLASH从FIFO中取一个字节数仅用了4个时钟周期,而解决了系统丢数问题。
图6 调试信号
when rw25=>
if offset=0 then//FIFO中是否有数,有则跳转
wstate<= rw 25;状态39,无则等待
else
rtfifo<=0;
wstate<= rw 39:
end if;
when rw39=>
rdfifo<=1;//上升沿有效。读取FIFO中
fdata<=fifod; 的数据
wstate<= wr40:
when rw 40=>
addrb<= addib+1;//FIFO地址加一
f_we<=0;
f_byte <=f_byte+1;//FLASH地址加一
wstate<=rw 28:
when rw 28:>
rdfifo<= 0 ;//f_we信号上升沿有效,将取的字节
f_we<=1;写入FLASH
if f_byte=“00000000000”then//是否取完
wstate<= rw 39;了2K字节的数据
else//没有则继续取数,有则进行下一页页编程
wstate<= rw 25:
end if;
5.结束语
由于采用了现场可编程芯片FPGA,整个系统设计灵活,集成度高。并且在存储芯片FLASH的基础上,采用冗余技术,增加SD卡作为存储介质,大大的增加了系统的存储容量,且存储容量可变,用户可根据具体需要,来选择SD卡的容量。高容量的SD卡可对FLASH中的数据进行备份,也可作为第二存储介质对实时采集的数据进行存储,从而大大的提高了系统的可扩展性和可靠性。文中还就针对系统调试过程出现的问题进行了详细的说明,对于内部FIFO与FLASH存取数据速率上的不匹配问题,提出了一种不改变硬件电路,仅需修改程序代码的解决办法。系统工作稳定、可靠,可用于工业、工程、生产车间等部门,尤其是在对信息实时性能要求较高或者恶劣的数据采集环境中更突出其应用的必要性。
核心关注:拓步ERP系统平台是覆盖了众多的业务领域、行业应用,蕴涵了丰富的ERP管理思想,集成了ERP软件业务管理理念,功能涉及供应链、成本、制造、CRM、HR等众多业务领域的管理,全面涵盖了企业关注ERP管理系统的核心领域,是众多中小企业信息化建设首选的ERP管理软件信赖品牌。
转载请注明出处:拓步ERP资讯网http://www.toberp.com/
本文标题:存储容量可扩展的高速数据采集系统