在线客服

数据采集论文实用13篇

引论:我们为您整理了13篇数据采集论文范文,供您借鉴以丰富您的创作。它们是您写作时的宝贵资源,期望它们能够激发您的创作灵感,让您的文章更具深度。

数据采集论文

篇1

1.3信号调理与AD采集电路传感器输出为差分信号,信号动态范围为±5V,系统选用的AD芯片输入信号范围在±2.5V之间,所以传感器输出信号必须经过信号调理后才能进行采集,图3是其中一个通道的信号调理与AD采集电路,其余通道电路与该图完全一致。信号调理电路由全差动放大器OPA1632构成,该放大器的电压噪声密度为1.3nV/Hz1/2,在100Hz(高铁地震监测常用采样率为200sample/s)带宽范围内噪声有效值不超过15nV,满足地震信号采集要求。图中R2∶R1、R7∶R9均为2∶1,可将输入差分信号衰减2倍,实现将传感器输出的±5V信号衰减到±2.5V范围内,满足ADS1281的输入电压范围,图中二极管D1与D2是钳位二极管,将电压钳位在±3V左右,保护AD芯片。AD转换器是一款32bitΔ-Σ高精度模数转换器ADS1281,内部具有可编程FIR、IIR和SINC滤波器,0.6×10-6线性度,在250sample/s采样率下其SNR可达130dB,全速采样模式下功耗仅12mW,非常适用于电池供电的野外作业。通过配置PINMODE引脚,可将ADS1281设置为引脚控制模式(PINMODE=1)和寄存器控制模式(PINMODE=0),本系统将其配置成寄存器控制模式。系统为实现同步采样,将六通道ADS1281的低功耗控制PWDN,复位RST,同步SYNC,采样时钟CLK,SPI时钟SCLK,SPI数据输入DIN引脚分别连在一起,并由FPGA统一控制,达到时钟同步,统一配置AD的目的,从而实现同步采样;而ADS1281的数据输出引脚DOUT分别接在FPGA的6个不同IO口,用于读取六通道AD的数据。参考源是数据采集系统的关键部分,本系统利用DCDC产生-5V电压,低噪声LDO电源芯片LT1964产生-2.5V电压,作为六通道ADS1281的VREFN输入,LT1964噪声为30μVRMS(10Hz~100kHz);利用专用精准基准芯片LTC6655-2.5产生+2.5V电压,作为六通道ADS1281的VREFP输入,该芯片噪声0.25×10-6p-p(0.1Hz~10Hz),温飘为2×10-6/℃,经过试验,该方案是取得较好结果。

1.4FPGA采集控制与数据传输实现数据采集之前,STM32单片机需要通过FPGA对各通道采集卡(即ADS1281)进行配置;数据采集过程中,FPGA需要对六通道数据读取、打包并传入STM32单片机。控制线A0用于选择上述功能。当A0=0时,将STM32单片机与FPGA之间的SPI接口、FPGA与六通道采集卡之间的SPI接口直接相连,此时由STM32单片机直接完成采集卡配置;当A0=1,FPGA输出采样时钟CLK,六通道采集卡同时启动采样。FPGA数据采集与传输过程如图4所示。当六通道ADC数据准备就绪时,ADC_nDRDY信号将同时由高变低,FPGA收到下降沿信号后,将在ADC_SCLK引脚连续产生32个周期的SPI时钟,ADS1281在时钟上升沿输出数据(ADC_DOUT_1至ADC_DOUT_6),FPGA在时钟下降沿读取数据,六通道数据将被缓存在6个32bit寄存器ADC_DA-TA0至ADC_DATA5内;FPGA读取完六通道32bit数据后,在MCU_DRDY引脚产生一个高脉冲,通知STM32单片机读取数据,单片机在MCU_DRDY下降沿启动中断,并在中断中完成数据读取;数据读取过程中,单片机的SPI时钟MCU_SCLK连续产生时钟信号,FPGA在收到时钟信号时,将数据通过MCU_DIN输出,时钟信号共6×32=192个,正好读完六通道数据。

2预警系统C/S构架软件设计

2.1客服端LabVIEW编程PC机客服端界面与网络编程利用LabView软件实现。LabView是由美国国家仪器(NI)公司研制开发虚拟仪器开发软件,是一种图形化编程语言,使用较为方便[6-7]。LabView主界面包含采样率、量程设置,IP地址,端口,开始采集按钮,停止采集按钮和波形界面几个部分,其中波形界面由WaveChart控件实现,具体实现如下:将下位机上传的六通道数据绑定为簇,簇输出接到WaveChart控件的数据输入端,Wave-Chart控件的图形显示方式设置为分格显示曲线,由于簇输入是6个数组绑定而成,WaveChart自动将窗口分成6个子窗口,每个数据对应一个窗口;Wave-Chart界面更新模式设置为StripChart,此模式下波形从左至右绘制,达到右边边界时,旧数据从左边溢出,新数据从右边进入。LabView具有强大的网络编程功能,本系统客户端利用了其中的TCP/IP协议模块,主要涉及到以下几个函数:TCPOpen(打开),TCPRead(读取),TCPWrite(写入),TCPClose(关闭)。客户端程序工作流程如图5所示。从图中可以看出,从开始到结束采集一共用了两次TCP/IP连接,第1次用于发送采集命令,然后接收、处理、显示数据,当按下“停止采样”命令后,首先关闭第1次TCP/IP连接,此时服务器还在继续采集数据,但不发送,所以还需进行一次TCP/IP连接发送停止采集命令给服务器,服务器收到命令后即可停止采集,并进入低功耗模式。

2.2基于LWIP的服务器程序设计服务器的主控单片机是STM32F407,其内部集成了10/100M以太网MAC,结合PHY芯片DP83848即可完成以太网硬件搭建;以太网软件部分通过移植LWIP协议栈实现,已有较多文献或文档详细叙述了移植方法与过程,服务器接收命令、启动采样和传输数据等功能在tcp回调函数中实现。数据采集和传输是同时进行的,可在单片机中申请两个缓存,采用乒乓操作模式工作实现,即:其中一个用于中断采集数据存储,缓存满后,设置数据满标志,并查询另一个缓存的数据空标志,若为空,证明数据已经传输完成,可新的存储数据;另一个用于传输,传输完成后,设置数据空标志,并查询第1个缓存的数据满标志,若位满,证明数据可以传输;由于以太网的传输速度远大于数据采集的速度,以太网传输完成后会等待另一个缓存存满,所以整个过程中不会出现采样数据丢失的情况。

3采集系统性能测试

3.1噪声测试进行噪声测试时,将6通道输入短接,采样率设置为200sample/s;采集开始后,数据将以文本文档的形式实时存入SD卡。图6是由采集的一个通道数据用excel作图得到(取其中任意2000个点),从该图可以看出:该通道采集的输入短接噪声峰峰值在±1.5μV范围内。为进一步对噪声大小进行量化分析,分别进行了三次噪声测试,并在excel软件中利用STDEVA函数对每一次的六通道采集数据做均方差处理,处理结果如表1所示。从表中可以看出:每隔通道的噪声均方差低于0.5μV,噪声一致性较好;采集卡输入信号范围是±5V,按照ADC的信噪比计算公式可算出采集卡的信噪比优于140dB。

3.2地震信号采集实验实验时,把传感器放置于地面,传感器差分信号输出端接入采集卡第1通道,打开监测站电源,在PC机中启动LabVIEW界面,设定好采样率、量程、IP地址与端口,点击“启动采集”,在距传感器2m左右用硬物连续敲击地面,图7是截取的实时显示结果图,从图7可以看出,第1通道具有典型的地震波形输出,纵坐标单位为mV,第2通道~第6通道输出为随机噪声,纵坐标单位为μV。

篇2

1.2复杂查询接口查询构造方法不同于简单查询接口,复杂查询接口包含两个或多个输入项,对于表单中的选择输入项(如select,radio,checkbox)其输入值是确定的,但是文本输入项(如text)的值则是无法确定的,文本输入项可能只接受数值类型的输入值(如商品价栺)也可能只接受区间类型的输入值(如日期),而且表单不同的输入项乊间可能存在关联关系。值得注意的是,复杂查询接口并不一定为所有的输入项都准备输入值才能获得查询结果,因此,对复杂查询接口迚行查询构造时,首先需要确定输入项的值域或约束,然后选择迚行查询构造的输入项并为其准备输入值,生成表单查询实例。HiWE[17],DeepBot[18,19],基于属性值图的方法[20],基于查询模板的方法[21],基于本体的方法[22-24]等则属于此类工作。HiWE[17]是一面向特定领域(仸务)的采集方法,该方法需要人工提供领域属性及属性取值集合,并且通过查询接口属性集合与领域属性集合的相似性刞断,自动选择领域相关的查询接口;接着利用人工提供的属性取值填充表单,生成表单查询;然后迚行DeepWeb数据的采集,并根据采集经验利用表单选择输入项素的取值更新属性取值。但是该方法没有考虑自动为文本输入项产生新的查询词,只能依赖人工提供的知识。不同于HiWE,Wu[20]提出一基于属性值图的查询构造方法。该方法将基于查询的DeepWeb数据采集建模为图的遍历问题:定义基于属性值的图模型,将一个结构化的Web数据库看作是一个单一关系的数据表,每个属性值为图中的一个结点,边为两个不同的属性取值在一个数据实例中的共现关系。该工作得出结论认为结构化的数据库属性值图中结点的度分布与幂律分布(powerlaw)相似,并以此为依据采用贪心选择策略选择度大的结点生成表单查询。但是该方法需要将每一次的查询结果更新到已有的属性值图中,然后选择下一个新的待提交的查询词,这方法更新属性值图的代价较高。DeepBot[18,19]是一个基于浏览器内核开发的DeepWeb数据采集的框架,它与HiWE类似,都采用面向特定领域的方式。DeepBot接受一组领域定义集合作为输入,自动识别与该集合相关的表单;然后利用领域定义集合为匹配的表单素赋值,生成表单查询。其中,领域定义集合用于定义采集仸务。该方法通过领域定义与表单乊间的相似度计算自动选择匹配的表单,许表单素和领域定义乊间存在不完全匹配的情况。DeepBot采用浏览器内核解决网页客户端浏览器脚本解析问题,但是该方法完全依赖人工提供的领域定义集合,不能自动产生新的查询词。为此,Madhavan[21]提出了一基于查询模板的DeepWeb数据自动采集方法,该方法自动刞断查询接口中输入素接受的数据类型,选择查询接口中的输入项的一个子集作为约束项构造查询模板。在约束项乊间利用笛卡尔积的形式产生不同的查询请求。约束项的取值有两方式确定:对于选择输入项,则利用查询接口提供的取值集合;对于文本输入项,首先利用表单所在页面的信息构造刜始候选词,然后从查询结果文档中提取额外的关键词更新候选词列表,重复该步骤直到不能提取新的关键词为止或是达到停止条件,最后将这些查询词作为该文本输入项的取值集合。该方法通过表单查询返回结果验证查询模板的有效性,并且采用自底向上的有效模板的增量式算法构造查询模板。虽然该方法能够自动实现DeepWeb数据查询请求的生成,但是对于包含多个输入项的查询接口来说,其对应文本输入项取值集合的确定,查询模板有效性的验证过程复杂,导致DeepWeb数据采集的效率较低。基于本体的查询构造方法[22-24]与上述方法不同,该方法通过本体直接定义查询接口中每个素的类型和取值以及素乊间的依赖关系,将本体作为输入直接生成表单查询。[22]是一针对语义网环境的DeepWeb数据查询方法。[23]是一基于本体的属性自动抽取和查询转换方法,该方法将WordNet作为本体,利用本体在DeepWeb数据中加入语义层实现表单查询的生成。[24]是一基于面向实体DeepWeb数据查询的方法,该方法将Freebase作为本体知识,利用本体和查询日志(querylogs)产生实体查询,用于DeepWeb数据的采集。但是基于本体的方法与HiWE和DeepBot类似都依赖外部的人工指定的输入信息,自适应性差。

2DeepWeb数据采集查询构造方法分析

仸何一查询构造方法的一个非常重要的特征是其自动化程度,这是指在查询构造过程中需要用户完成的工作量。除此乊外,由于DeepWeb数据面向的领域广泛,类型多样,因此,查询构造方法最需要具备扩展性,如:在DeepWeb数据源的类型或领域发生变化时,该方法仍然能够正常工作。本节从支持的查询接口提交方法,查询词提供方式,自动化程度,扩展性角度对比分析目前已有的查询构造方法。表1是目前已有的查询构造方法定性比较的结果,在自动化程度一列,“AUTO”表示完全自动、“SEMI”表示半自动、“NO”表示人工完成。在扩展性方面,划分为三个层次,分别用“好”、“中”、“差”表示使用相关方法或工具的可扩展程度。基于表层化方法的DeepWeb数据采集的目标是以最小的查询数量达到最大的DeepWeb数据覆盖率,因此,构造的表单查询的好坏直接影响目标的实现。虽然已有的查询构造方法能够表明确实可以使大量的DeepWeb数据内容对用户可见,但它也存在一些局限性,如表2所示。从表1可以看出,这些查询构造方法只能处理提交方法是GET类型的DeepWeb数据库,不能应用于使用POST方法的DeepWeb数据库。除此乊外,从表2可以看出,已有的查询构造方法都存在不同程度的局限性。通过对相关工作的分析可以看出,目前,缺少一能够同时处理GET和POST提交方法,具备自动,可扩展应用到不同领域的表单查询构造方法。因此,DeepWeb数据采集的查询构造方法仍然需要做迚一步的研究。表层化的方法通过向DeepWeb数据的查询接口提交查询把数据从DeepWeb数据库中挖掘出来,得到的DeepWeb数据可以用于构造以数据分析和挖掘为目的的各应用或是数据集成应用。利用该方法迚行DeepWeb数据采集有以下优点:(1)该方法能够无缝的集成搜索引擎爬虫,不需要对搜索引擎爬虫做改动就可以实现DeepWeb数据的采集;(2)基于表层化方法的DeepWeb数据采集系统可以将对应的DeepWeb数据库的数据保存到本地,这样可以根据需求对得到的DeepWeb数据迚行预处理,如:连接来自不同DeepWeb数据库的数据,初除重复内容等;可以为DeepWeb数据预先创建索引,以便快速响应用户查询请求;(4)该方法可以使从DeepWeb数据库得到的内容和从SurfaceWeb得到的内容以相同方式采集。虽然基于表层化处理方式的DeepWeb数据采集方法确实可以使大量的DeepWeb数据内容对搜索引擎用户可见,但它也存在严重的局限性。(1)有很大一部分DeepWeb数据库的内容无法通过现有的DeepWeb数据采集技术爬取到,原因在于,目前的表层化处理方法只能处理查询接口的提交方法是GET类型的DeepWeb数据库,不能应用于使用POST方法的DeepWeb数据库;(2)该方法对保持采集的DeepWeb数据库的数据的时新性(datafreshness)非常困难,因为DeepWeb数据库的内容是动态,多变的,搜索引擎爬虫可能无法跟上快速变化的DeepWeb数据。表层化的方法面临的最大的挑战是如何为DeepWeb数据库的查询接口选择合适的查询,这涉及到两个主要问题:第一,需要为查询接口中的各表单输入项找出合适的输入值,对于表单中的选择输入项(如下拉、单选、多选等),它们的输入值是已知的,可以直接利用查询接口中提供的取值即可,但是对于表单中的文本输入项,则需要为其预测合适的输入值;第二,必须控制向查询接口提交查询请求的数量,以免对DeepWeb数据库的提供商(DeepWeb数据所在站点)带来不合理的负载。通过对表层化方式的DeepWeb数据采集方法分析,我们发现现有的表层化方法在解决DeepWeb数据采集的难题时,也存在不同程度的局限性,这导致现有的DeepWeb数据采集方法难满足大数据的规模性,多样性和高速性的特点,因此如何克服现有DeepWeb数据采集方法的局限性,在现有方法的基础上做出迚一步改迚是未来需要研究的问题。

篇3

基于嵌入式平台RFID采集终端体积小,集成度高,可便携,具有强大的数据实时处理能力,与PC机完全兼容,支持多种数据空间传输标准,并在读写器之间建立统一的应用级接口,可以直接读取读写器上的数据。当存在大量的RFID识别标签时,读写器将会扫描到海量数据信息,RFID采集终端将简化信息的传输流程。同时,运行在RFID数据采集终端的中间件把上位机的管理软件程序从硬件设备接口分拣出来并按照统一的标准进行封装,这样,使上层的应用软件具有统一恒定的数据控制接口。

3嵌入式RFID数据采集终端的硬件设计

读写器获取RFID标签数据后,通过专有的适配器接口,比如串口、CAN口等连接方式,将原始数据交付给嵌入式数据采集终端。流行的嵌入式设备采用模块化架构,功能各异的模块板卡通过插槽嵌入到ARM微处理器芯片核心板上,通过核心板上的总线与CPU及其他模块板卡建立通信。各模块之间相互独立,简化了硬件电路的设计,降低开发周期。在硬件平台设计中,嵌入式微处理器的选择直接制约着嵌入式RFID数据采集终端的性能。为了满足应用的需求,该终端选用基于精简指令集的32位ARM9微处理器。处理终端的硬件平台包括ARM9微处理器,电源复位电路,存储器,串口,以太网接口。ARM9微处理器内置存储器的容量较小,需扩充存储器以满足应用的需求[3]。电源复位电路和存储器的设计是硬件平台设计的关键。

4嵌入式RFID数据采集终端的软件设计

操作系统的开发非常复查而且成本较高,一般不自主设计。选用Lin-ux操作系统作为软件开发环境,并编写硬件接口驱动程序及应用程序。RFID中间件软件采用模块化结构设计,运行在Linux操作系统下。可以分为硬件接口驱动模块,数据处理分析模块,数据统一管理模块。硬件接口驱动模块的指令用于读取读写器上的数据信息。数据处理分析模块对被识物体的数据进行预处理、解析。数据管理控制模块将分析后的数据信息通过无线网络交付给上位机RFID服务器的应用管理系统,负责指令的上传下达,并控制嵌入式RFID数据采集终端的全局工作。

篇4

数据采集是信号分析与处理的一个重要环节,在许多工业控制与生产状态监控中,都需要对各种物理量进行数据采集与分析。但是,专用数据采集卡的价格一般比较昂贵,而我们PC机的声卡就是一个很好的双通道数据采集卡。实际测量中,在满足测量要求的前提下,可以充分利用计算机自身资源,完成数据采集任务,从而节省成本。

本文利用vc编程实现了声卡的双通道数据采集,并且对信号进行频谱分析同时实时测量出信号的频率。还利用声卡的DA通道,实现了正弦波、方波、三角波输出的信号发生器。波形发生器产生的信号同时还可以作为内部测试用信号,检验数据采集的准确性。

二、声卡数据采集系统硬件组成

LineOut

图1声卡数据采集的硬件组成图

利用声卡进行数据采集的硬件组成如图1所示。通常,利用声卡的LineIn端作为信号输入端口,两路被测的模拟信号经过左右声道,A/D转换进入计算机,通过vc编写的虚拟仪器界面显示出来。声卡一般都具有单、双声道输入,从而可实现单双通道的采集.双通道采集时,声卡采用并行采集,并具有采样保持功能,两个通道的数据不存在时间差,第一通道和第二通道数据存储在同一个数据缓冲区中,且等间隔存储,奇数序列是一个通道数据,偶数序列为另一个通道数据.读取数据时,将缓冲区中的数据全部读入到一个数组中,然后对该数组数据,采用隔一点取一点的方法,将数据分开并分别存到另外的两个数组中,即将两个通道的数据分开,从而实现了双通道的采集.单通道采集时,缓冲区中仅仅是一个通道的数据,直接保存到一个数组即可。同时,信号发生器产生的波形也可经过Lineout端输出。

为了保护声卡,被测信号并不是直接进入声卡,而是先经过一个信号调理电路,对信号进行放大或限幅,滤波等处理,信号调理电路如图2所示。(a)图是直流电平叠加模块:C1代表信号的输入,D1代表叠加直流电平后信号的输出,电位器R8控制输入直流电平的大小;(b)图是信号叠加模块:A1、A2代表叠加信号的输入,B1代表叠加后信号的输出;(c)图是模拟滤波模块:LPIN代表滤波器的输出,LPOUT代表滤波器的输出,调节R6可以控制输出的、幅度大小。当然可以根据需要在调理电路中加入一些其它的模块。

图2信号调理电路

三、声卡采集系统的软件编程

微软公司已经提供了一系列API函数用于对声卡的操作,为了将需要用到的函数封装成了一个类,编程时只需直接调用。使用的API函数有:

waveInGetDevCaps实现声卡的性能测试

waveInOpen打开波形输入设备

waveInPrepareHeader为波形输入准备缓冲区

waveInAddBuffer将数据缓存发送给波形输入设备驱动

waveInStart启动向波形输入缓冲区存储数据

waveInUnprepareHeader释放波形输入缓冲区

waveInStop停止向波形输入缓冲区存储数据

waveInClose关闭波形输入设备

设计的软件界面如图3所示。目前所实现的功能有:

图3软件界面设计

1.两路波形发生器。可产生正弦波、方波和三角波,并且频率和幅值可调。

2.频谱分析仪。可以对采集的信号进行频谱分析。频谱分析采用了快速傅立叶变换(FFT)算法,并且将其封装成独立的函数,方便调用。

3.频率计。同时还可以实时地测量出采集到的信号的频率。在利用程序计算频率时,一般采用两种方法。一种是利用快速傅立叶变换,它的优点是不仅能对标准的周期波形进行测量,而且能够计算出各种复杂波形和信噪比非常低的信号的频率值,缺点是分辨率受到限制。另一种计算频率的方法是采用脉冲计数法。它的优点是测量低频信号时精度高,但它不适合波形复杂和信噪比低的信号频率测量。所以在测量过程中,程序先判断信号上述的性质,根据信号的性质,自动地采用相应的测量方法。

四、小结

采用声卡制作的信号采集系统,具有廉价、方便等优点,它可用于振动、噪声、位移、温度、压力等各种物理量的测试。但是一般的声卡支持的采样频率有11025、22050和44100,对高频信号的采集会出现失真。总之,运用廉价的声卡,辅以适当的软件编程,可以构成一个较高采样精度,中等采样频率且具有很大灵活性的数据采集系统。

参考文献

[1]种兰祥,阎丽,张首军.基于计算机声卡的多通道数据采集系统.西北大学学报,2002.

篇5

USB的应用程序一般用VisualC++编写,较为复杂,花费的时间较长。由美国国家仪器(VI)公司开发的LabVIEW语言是一种基于图形程序的编程语言,内含丰富的数据采集、数据信号分析分析以及控制等子程序,用户利用创建和调用子程序的方法编写程序,使创建的程序模块化,易于调试、理解和维护,而且程序编程简单、直观。因此它特别适用于数据采集处理系统。利用它编制USB应用程序,把LabVIEW语言和USB总线紧密结合起来的数据采集系统将集成两者的优点。USB总线可以实现对外部数据实时高速的采集,把采集的数据传送到主机后再通过LabVIEW的功能模块顺利实现数据显示、分析和存储。

1USB及其在数据采集设备中的应用

USB自1995年在Comdex上亮相以来,已广泛地为各PC厂家所支持。现在生产的PC几乎都配置了USB接口,Microsoft的Windows98、NT以及MacOS、Linux等流行操作系统都增加对USB的支持。USB具有速度快、设备安装和配置容易、易于扩展、能够采用总线供电、使用灵活等主要优点,应用越来越广泛。

一个实用的USB数据采集系统硬件一般包括微控制器、USB通信接口以及根据系统需要添加的A/D转换器和EPROM、SRAM等。为了扩展其用途,还可以加上多路模拟开关和数字I/O端口。系统的A/D、数字I/O的设计可沿用传统的设计方法,根据采集的精度、速率、通道数等诸元素选择合适的芯片,设计时应充分注意抗干扰性,尤其对A/D采集更是如此。在微控制器和USB接口的选择上有两种方式:一种是采用普通单片机加上专用的USB通信芯片;另一种是采用具备USB通信功能的单片机。USB的另一大优点是可以总线供电,在数据采集设备中耗电量通道不大,因此可以设计成总线供电。

一个USB设备的软件一般包括主机的驱动程序、应用程序和写进ROM里面的Firmware。Windows98提供了多种USB设备的驱动程序,但还没有一种专门针对数据采集系统,所以必须针对特定的设备编制驱动程序。尽管系统已经提供了很多标准接口函数,但编制驱动程序仍然是USB开发中最困难的一件事。通常采用WindowsDDK实现,但现在有许多第三方软件厂商提供了各种各样的生成工具,如Compuware的DriverWorks、BlueWaters的DriverWizard等软件能够轻易地生成高质量的USB驱动程序。单片机程序的编制也同样困难,而且没有任何一家厂商提供了自动生成的工具。编制一个稳定、完善的单片机程序直接关系到设备性能,必须给予充分的重视。以上两个程序是开发者所关心的,而用户却不太关心。用户关心的是如何高效地通过鼠标操作设备,如何处理和分析采集进来的大量数据。因此还必须有高质量的用户软件。用户软件必须有友好的界面、强大的数据分析和处理能力以及提供给用户进行再开发的接口。

2LabVIEW及其外部动态链接库的调用

LabVIEW是美国国家仪器(NI)公司开发的一种基于图形程序的虚拟仪表编程语言,其在测试与测量、数据采集、仪器控制、数字信号分析、工厂自动化等领域获得了广泛的应用。LabVIEW程序称为虚拟仪器程序(简称VI),主要包括两部分:前面板(即人机界面)和方框图程序。前面板用于模拟真实仪器的面板操作,可设置输入数值、观察输出值以及实现图表、文本等显示。框图程序应用图形编程语言编写,相当于传统程序的源代码。其用于传送前面板输入的命令参数到仪器以执行相应的操作。LabVIEW的强大功能在于层次化结构,用户可以把创建的VI程序当作子程序调用,以创建更复杂的程序,而且,调用阶数可以是任意的。LabVIEW这种创建和调用子程序的方法使创建的程序模块化,易于调试、理解和维护。LabVIEW编程方法与传统的程序设计方法不同,它拥有流程图程序设计语言的特点,摆脱了传统程序语言线形结构的束缚。LabVIEW的执行顺序依方块图间数据的流向决定,而不像一般通用的编程语言逐行执行。在编写方框图程序时,只需从功能模块中选用不同的函数图标,然后再以线条相互连接,即可实现数据的传输。

LabVIEW虽有接口卡的驱动和管理程序,但主要是针对NI公司自己生产的卡。对于普通的I/O卡,还不能直接被LabVIEW所应用,必须采取其他方法。其中可以用LabVIEW的PortIn和PortOut功能,但此法应用简单,无法实现较复杂的接口功能。而采用动态链接库,可以根据具体需要编写适当的程序,灵活利用LabVIEW的各项功能。用户可以自己编写DLLs实现LabVIEW与硬件的链接。用VC++6.0编制动态链接库,首先生成DLL框架,AppWizard将自动生成项目文件,但不产生任何代码,所有代码均需用户自己键入。DLL需要的文件有:①h函数声明文件;②c源文件;③def定义文件。H文件的作用是声明DLL要实现的函数原型,供DLL编译使用,同时还提供应用程序编译使用。C文件是实现具体文件的源文件,它有一个入口点函数,在DLL被初次调用的运行,做一些初始化工作。一般情况下,用户无须做什么初始化工作,只需保留入口点函数框架即可。def文件是DLL项目中比较特殊的文件,它用来定义该DLL项目将输出哪些函数,只有该文件列出的函数才能被应用函数调用。要输出的函数名列在该文件EXPORTS关键字下面。

3基于AN2131Q的单光子采集系统

该采集系统由笔者自行开发并用于单光子计数种子活性快速检测仪中。它主要由将光子信号转为电信号的光电倍增管(PMT)及其辅助电路和基于AN2131Q的USB采集卡组成。PMT及其前置放大器、放大器、甄别器等辅助电路能将微弱的光子信号转换为15ns的标准TTL脉冲信号,脉冲信号经过分频处理后再被USB采集,USB将采集的结果实时地传给主机处理。

3.1USB采集卡的硬件组成

该采集卡由微控制器、USB通信接口、主机以及数字I/O端口组成,如图1所示。

笔者设计了一种同步传输方式的单片方案,应用了内置微处理器的USB设计——EZ-USBAN2131Q。它是Cypress公司的一种内嵌微控制器的80脚USB芯片,包含三个8位多功能口,8位数据端口,16位地址端口,二个USB数据端口,二个可定义16位的定时/计数器和其他输入输出端口。其采用一种基于内部RAM的解决方案,允许客户随时不断地设置和升级,不受端口数、缓冲大小和传输速度及传输方式的限制。片内嵌有一个增强型8051微控制器,其4个时钟的循环周期使它比标准8051的速度快3倍。采用同步传输方式将单片机的计数值实时传送给主机,而主机对计数器的控制信号则采用块传输方式传送。EZ-USB是Cypress公司推出的USB开发系统,它为USB外设提供了一种很好的集成化解决方案。EZ-USB在其内核已做了大量繁琐的、重复性的工作,这样就简化了开发代码,进而缩短了开发周期。此外,开发商还提供了配套的开发软件(包括编译软件uVision51、调试软件dScope51、控制软件EZUSBControllPanel)以及驱动程序GPD(GeneralPurposeDriver)接口,以便于用户进行开发使用。

图2开启设备和获取采集数据的流程图

3.2USB采集卡的软件构成

在USB的Firmware中,采取同步传输(IsochronousTransactions)和块传输(BulkTransactions)两种传输方式。同步方式用来实时传送采集的数据,块传输主要用来传输主机命令信号和USB的状态信息。块传输中利用端点(Endpoint)2。两种传输方式的核心中断程序如下:

voidISR_Sutok(void)interrupt0//块传输方式

{

//initializethecoutersinthe8051

TMOD=0x05;

TCON=0x10;

TH0=0;

TL0=0;

Thb=0,

TH0=0;

TL0=0;

thb=0;

EZUSB_IRQ_CLEAR();

USBIRQ=bmSUTOK;//ClearSUTOKIRQ

}

voidISR_Sof(void)interrupt0//同步传输方式

{

if(TCON&0x21){//Dealwiththecounteroverflow

TH0=0;

Tl0=0;

THB++;

TCON&=0xdf;}

IN8DATA=TH0;//3Bytescounterresult

IN8DATA=TL0;

IN8DATA=THB;

EZUSB_IRQ_CLEAR();

USBIRQ=bmSOF;//ClearSOFIRQ

}

在LabVIEW应用程序中设计了一Usb.dll文件作为LabVIEW与USB的驱动程序。由于EZ-USB开发系统中已经提供了底层驱动程序(GPD)接口函数,用户只需调用这些函数即可与USB设备连接。因此在DLL的编制中只需调用它提供的函数,大大节约了开发时间,提高了开发速度。创建的Usb.dll文件中包含了如下五个输出函数,功能说明如表1所示。

表1Usb.dll包含函数的功能说明

Control主机对USB设备的控制

ReadResult获取USB发送到主机的数据

StartIsoStream启动设备的同步传输流

StartThread得到标准设备的设备描述符

StopThread关闭设备的同步传输流

其定义如下:

LPSTR_declspec(dllexport)_stdcallControl(intinput);

int_declspec(dllexport)_stdcallReadResult(void);

int_declspec(dllexport)_stdcallStartIsoStream(void);

int_declspec(dllexport)_stdcallStartThread(void);

int_declspec(dllexport)_stdcallStopThread(void);

篇6

2系统实现

2.1系统服务器端关键技术及其实现系统服务器端部署基于WebService,服务端程序负责接收移动终端通过SOAP所封装的请求,通过HTTP协议传至Web服务器,进行数据信息交互以实现对移动终端实时定位追踪,管理空间与属性数据,并对移动终端所发回数据进行编辑汇总调用相应服务,将所请求服务解析为xml消息并返回移动终端。

2.2iOS客户端关键技术及其实现

2.2.1移动空间定位技术系统采用iOSSDK所提供CoreLocation移动定位技术定制开发,CoreLocation提供GPS、蜂窝基站、Wi-Fi三种方式对空间地理位置进行定位。通过创建定位管理器并对精度以及定位更新时间间隔进行设置,CoreLocation根据设置自动选择定位方式并将定位数据录入系统供地图功能模块使用。

2.2.2地理图层与加载系统GIS系统功能模块基于ArcGISAPIforiOS进行开发定制,所加载地图分为在线地图与离线地图两类。在线地图是由移动终端获取服务器端由ArcGISServer所受检县地理图层数据以及受检小班空间地理位置。离线地图数据是考虑到有些受检小班地处偏远地带,无线信号较弱,无法访问服务器,通过ArcGISAPIforiOS中的AGSTiledLayer类建立离线图层访问,加载预存于移动数据采集系统的地理图层缓存数据用以数据采集工作。

篇7

1.3CPU控制系统由于石油钻井深度能够达到数千米,井下温度超过120℃。油井下环境非常复杂,要求数据采集系统必须能够实时、快速地处理采集的数据,还具有耐高温以及很好的抗干扰能力。采用C8051单片机器件采集井下时间、温度,并通过TBS总线接收压力,流量,持水率等数据参数。选择C8051F040作为主控芯片,了解其与各模块的接口技术,设计微控制器电路,并进行设计仿真,以及各部分电路实验。验证电路结构后,设计原理图、PCB板、焊接调试电路,并编写控制各模块的程序,完成主控芯片和电路设计,及软硬件调试工作。

2硬件整体设计

此设备需要下放到油井下,需要采集的参数为温度和实时时间,接收的参数为压力`,流量,持水率。设备下井后,工作电压为35V,通过改变向油井下供电电压,由继电器来控制井下仪器的开伞与收伞,系统由中国石油测井公司提供专用电池。仪器下井后先开伞,再进入采集状态,开伞后,向井下仪器发命令,下发的命令为0x82(持水率),0x8(0流量),0x84(压力),每间隔40ms下发一个命令,循环发送,下发的命令通过TXD,经TBS端送到下面挂接的仪器。下面仪器收到命令后自动上传,上传的数据(三个参数)由TBS端进入,经WESN-SC-001模块解调通过TXD进入CPU,选择合适的波特率,把数据存储到FLASH存储器中,工作40天后停止采集,收伞。本设备的工作方式为CPU处于持续工作状态,其他电路处于间歇工作状态,每5分钟唤醒一次,每次工作时间可以调整。设计了USB接口,用于硬件和软件调试,调试完成后去中国石油测井公司做实验,对系统进行测试。

篇8

FPGA在触发信号下,控制ADC采样输入信号,并存入FIFO中。当存满时,将数据写入USB接口芯片CY7C68013,同时切换另一块FIFO接收ADC转换的数据,实现乒乓存储,以提高效率。FPGA模块的一个重要作用是控制USB接口芯片CY7C68013。当ADC采样后,数据进入FPGA模块,FPGA控制数据流将其写入CY7C68013的FIFO中,以便于USB向PC机传输。CY7C68013的数据传输模式采用异步slaveFIFO和同步slaveFIFO切换模式。通过实测,前者传输速度约为5~10Mbit/s,后者传输速度最高可达20Mbit/s,传输速度的提高可通过更改驱动程序的读取方式实现。

3软件设计

3.1USB驱动程序设计

USB2.0总线传输技术最高速率可达480Mbit/s。本系统采用批量传输的slaveFIFO模式。CY7C68013芯片内部提供了多个FIFO缓冲区,外部逻辑可对这些端点FIFO缓冲区直接进行读写操作。在该种传输模式下,USB数据在USB主机与外部逻辑通信时无需CPU的干预,可大大提高数据传输速度。Cypress公司为CY7C68013芯片提供了通用的驱动程序,用户可根据需求开发相应的固件程序。

3.2FPGA模块程序设计

系统中FPGA模块的核心作用是控制AD9233芯片进行采样。AD9233作为高速采样芯片,其最高采样速率达125Mbit/s,最大模拟带宽为650MHz。通过改变采样速率可使该系统采集不同速率需求的信号,扩展了该系统的应用范围。描述FPGA控制USB数据写入接口芯片FIFO的状态机如图6所示。状态1表示指向INFIFO,触发FIFOADR[1:0],转向状态2;状态2表示若FIFO未满则转向状态3,否则停留在状态2;状态3表示驱动数据到总线上,通过触发SLWR写数据到FIFO并增加FIFO的指针,然后转向状态4;状态4表示若还有数据写则转向状态2,否则转向完成。

3.3上位机设计

为实现人机交互,利用VC++MFC在PC机上编写了可视化操作界面,即上位机。上位机既用于数据采集的控制,同时也用于采集数据的实时回放。上位机界面如图7所示。上位机主要功能:1)按下“检测USB”按钮,可检测USB是否连接正常,并显示USB基本信息。2)按下“开始采集”按钮,可将采集的数据传输到PC机并实时回放数据波形;再次按下“开始采集”按钮,可暂停数据波形回放。3)按下“保存数据”按钮,可将采集的数据以*.dat文件的形式存储到PC机硬盘。4)按下“结束采集”按钮,可关闭采集系统并退出界面;或按下“确定”和“取消”按钮,也可直接退出界面。

4系统实测

为了测试数据采集与回放系统,利用通用信号处理开发板设计了DDS模块。该DDS模块产生一个正弦波作为测试信号,通过AD9744芯片转换后变为模拟信号输出,并将此输出信号接至示波器以便验证系统。数据采集与回放系统的实物图及系统实测波形与回放波形。

篇9

2资料解释及地质成果

2.1资料解释使用Geo-Frame4.3全三维解释系统进行解释,采用工作站和人工解释相结合,时间剖面、水平切片、面块切片解释相结合的思路和流程进行解释。断层解释:充分利用现有的地质资料,从联井剖面出发,通过人工对比解释明确各个反射波所对应的地质信息,在确定好空间关系后,利用工作站的自动追踪拾取功能,由粗网格到细网格逐步加密解释。采用人工解释的粗网格建立区内主体构造框架,确定较大断层,再利用人机联作方式进行细网格追踪对比,进一步核查构造方案解释的合理性,解释局部小断层和细微构造,最后确定构造方案。在断层解释时,以垂直剖面解释为主,水平切片为辅,再配合其它方法,使资料解释更精细、更准确。根据构造的复杂程度,有目的地选择一部分主干剖面进行重点解释,即按照由粗到细(由大网格到小网格)、由纵向到横向、由剖面到平面、由平面到空间的步骤反复进行解释。通过水平切片解释,检验断层组合的合理性,并对一些小断层的展布规律作出符合实际的解释。为确保断层的可靠性,在断层组合时,依据区域地质规律,充分利用工作站优势,确保断层解释合理,断层相互切割关系符合地质规律。如图2所示,在解释系统上可以清楚的解释连续的煤层反射波及清晰的断层点位置。煤层分岔解释:分叉合并煤层对应的反射波振幅强弱发生变化,从分叉到合并,振幅由弱变强;而断层只是同相轴错断,断开后的反射波强弱不发生变化[5]。分叉合并煤层对应的反射波同相轴个数发生变化。从分叉到合并,波组数由多变少。而断层的两盘同相轴个数不发生变化。分叉合并煤层对应的反射波同相轴相位没有真正断开,在波阻抗剖面上,煤层的分叉合并具有类似的特征,反映更加清晰。图3为煤层分叉在时间剖面上的反映,图4为煤层分叉在反演剖面上的反映。

2.2地质成果本次三维地震勘探查明了1-1、2-2、3-1、4-2、5-2煤层的底板起伏形态及构造发育情况;查明了区内落差大于5m的断层,3~5m的断点。对勘探区内1-1、2-2、3-1、4-2、5-2煤层的厚度变化趋势进行了预测。对勘探区内覆盖层厚度、1-1煤可采边界和2-2煤分叉合并范围进行了解释。丰富的三维地震地质成果为矿井开拓、采区设计提供了地质依据。

篇10

笔者结合设备检测中数据采集的实际需要,设计了该高速同步数据采集系统。该系统最多可四路同步采样,单通道采样速度可达620ksps,四通道同时采样速度可达180ksps。USB接口控制芯片采用Cypress公司FX2系列中的CY7C68013,通过对其可编程接口控制逻辑的合理设计和芯片内部FIFO的有效运用,实现了数据的高速连续采样和传输。

1基本原理

该采集系统总体框架分三部分:主机(能支持USB2.0协议的PC机)、内部包含CPU及高速缓存的USB接口控制芯片(CY7C68013)和高速同步采样芯片(MAX115),如图1所示。其数据传输分两部分:控制信号传输和采集数据传输。控制信号方向为由主机到外设,由外设CPU控制,数据量较小;采集到的数据由外设到主机,数据量较大。为了保证较高的传输速度,不经过CPU。系统基本操作过程为:主机给外设一个采样控制信号,FX2根据该信号向A/D转换器送出相应控制信号,即采样模式控制字;之后由A/D转换器自主控制转换,并将各通道采样数据存入其片内缓存。一旦转换完成,由A/D的完成位向FX2的可编程控制接口发读采样结果信号;然后由可编程接口的控制逻辑依次将各通道采样结果从A/D的缓存读入FX2的内部FIFO。当FIFO容量达到指定程度后,自动将数据打包传送给USB总线。期间所有操作不需要CPU的干预。采样过程中接口控制逻辑依次取走批量数据,在打包传送时A/D仍持续转换,内部FIFO也持续写入转换结果。只要内部FIFO写指针和读指针位置相差达到指定的值就立即取走数据。从而保证了同步连续高速采集的可靠性。

2硬件部分

2.1芯片介绍

CY7C68013属于Cypress公司的FX2系列产品,它提供了对USB2.0的完整解决方案。该芯片包括带8KB片内RAM的高速CPU、16位并行地址总线+8位数据总线、I2C总线、4KBFIFO存储器以及通用可编程接口(GPIF)、串行接口引擎(SIE)和USB2.0收发器。在代码的编写上,与8051系列单片机兼容,且速度是标准8051的3~5倍。

CY7C68013与外设有两种接口方式:可编程接口GPIF和SlaveFIFOs。

可编程接口GPIF是主机方式,可以由软件设置读写控制波形,灵活性很大,几乎可以对任何8/16bit接口的控制器、存储器和总线进行数据的主动读写,使用非常灵活。SlaveFIFOs方式是从机方式,外部控制器可象对普通FIFO一样对FX2的多层缓冲FIFO进行读写。FX2的SlaveFIFOs工作方式可设为同步或异步;工作时钟为内部产生或外部输入可选;其它控制信号也可灵活地设置为高有效或低有效。笔者在设计中采用主机方式。

MAX115是美信公司的高速多通道同步采样芯片。含有两组4路同步通道,共8个输入端。采样精度为12位,采样模式由采样控制字决定,可灵活地在两组中的1~4个通道间选择。采样时,各通道转换结果先存入其内部相对应的4个12bit存储单元,各通道都转换完后再一起取走。

2.2电路原理及设计

考虑CY7C68013与MAX115接口时,采样模式不同,控制波形有所差别,笔者选择主机方式即可编程控制接口(GPIF)。

GPIF是FX2端点FIFO的内部控制器。在这种方式下,接口内核可产生6个控制输出端(CTL0~CTL5)和9根线的地址(GADR[8:0])输出,同时可以接收6个外部输入(RDY0~RDY5)和2个内部输入。FX2有4个波形描述符控制各个状态。这些波形描述符可以动态地配置给任何一个端点FIFO。例如,一个波形描述符可以配置为写FIFO,而另一个配置为读FIFO。FX2的固件程序可以把这些描述符配置给四个FIFO中的任意一个,配置后,GPIF将依据波形描述符产生相应的控制逻辑和握手信号给外界接口,满足向FIFO读写数据的需要。GPIF的数据总线既可以是单字节宽(8位FD[7:0])也可以是双字节宽(16位FD[15:0])。每个波形描述符包含了S0~S6七个有效状态和一个空闲状态。在每个有效状态对应的时间段里,经过预先设置,GPIF可以做以下几件事情:(1)驱动(使为高或低)或悬浮6个输出控制端;(2)采样或驱动FIFO的数据总线;(3)增加GPIF地址总线的值;(4)增加指向当前FIFO指针的值;(5)启动GPFIWF(波形描述符)中断。除此之外,在每个状态,GPIF可以对以下几个信号中任意两个进行采样,它们是:(1)RDYX输入端;(2)FIFO状态标志位;(3)内部RDY标志位;(4)传输计数中止标志位。把其中两个信号相与、相或或者相异或,根据结果跳转到其它任意一个状态或延迟1~256个IFCLK时钟周期。当然也可以根据输入端的信号进行跳转或延迟。GPIF波形描述符通常用Cepress公司的GPIF工具(GPIFTOOL)进行配置。它是一个可运行于Windows平台的应用程序,与FX2的开发包一起。

在这种方式下,所有的读写及控制逻辑通过CY7C68013的GPIF以软件编程的方式实现,且控制逻辑的变换方便灵活(只需要改变接口的一个配置寄存器的值)。电路连接如图2所示。

本数据采集系统只用到了两个输出控制CTL0、CTL1和一个外部输入RDY0,它们分别接MAX115的CONVST#、WR#和INT#。数据总线用双字节,其中FD0~FD11接MAX115的数据输入端D0~D11,FD12和FD13接控制字输入端的A2和A3,FD0和FD1复用做控制字输入端的A0和A1。MAX115的采样基准时钟由FX2的输出时钟经三分频得到,为16MHz。对应四种数据传输方式(八种不同的采样模式),GPIF的控制及握手信号波形有所不同。四通道同步采样的时序图如图3所示。

在第一个判决点,若采样数据已准备就绪,MAX115传给GPIF一个负脉冲信号RDY0;根据此信号,波形按顺序转入2、3、4、5状态,使指向内部FIFO的指针在每个时钟上升沿加1,依次读取四个数据,取完数据后利用CTL0的上升沿启动下一次采样。若在状态1时没有出现负脉冲,则直接跳转到状态6,之后重复执行此波形描述符。

三通道同步采样时,读取数据的状态只需要持续三次。其它采样模式控制波形的设计依此类推。

2.3固件程序设计

固件程序是指运行在设备CPU中的程序。只有在该程序运行时,外设才能称之为具有给定功能的外部设备。固件程序负责初始化各硬件单元,重新配置设备及A/D采样控制。固件代码的存储位置有三种:第一种是存在主机中,设备加电后由驱动程序把固件下载到片内RAM后执行,即“重新枚举”;第二种方法是把固件代码固化到一片EEPROM中,外设加电后由FX2通过I2C总线下载到片内RAM后自动执行;最后一种方法是把程序固化到一片ROM中,使之充当外部程序存储器,连在FX2三总线上。笔者选用第一种方式,这种方式便于系统的调试和升级。固件程序框图如图4所示。

3用户程序和驱动程序

3.1驱动程序的编写

该系统需要两个驱动程序,即通用驱动和下载固件的驱动。通用驱动完成与外设和用户程序的通信及控制;而下载固件的驱动则只负责在外设连接USB总线后把特定的固件程序下载到FX2的RAM中,使FX2的CPU重启,模拟断开与USB总线的连接,完成对外设的重新设置。主机根据新的设置安装通用驱动程序,重新枚举外设为一个新的USB设备。

通用驱动程序一般不需要重新编写,用Cypress公司已经编好的驱动ezusb.sys;而下载固件的驱动则必须定做,其详细操作过程见参考文献[2]。

3.2用户程序的编写

用户程序是系统与用户的接口,它通过通用驱动程序完成对外设的控制和通信。在编写用户程序时,首先要建立与外设的连接,然后才能实施数据的传输。启动采样后,为了保证不丢失数据,用户程序应该建立一个新的工作线程专门获取外设传来的数据。程序中主要用到两个API函数:CreateFile()和DeviceIoControl()。CreateFile()取得设备句柄后,DeviceIoControl()根据该句柄完成数据传输。程序代码简要如下:

hDevice=CreateFile(″\\\\.\\EZUSB-0″)

GENERIC_READ|GENERIC_WRITE,

FILE_SHARE_WRITE,

NULL,

OPEN_EXISTING,

FILE_ATTRIBUTE_NORMAL,

NULL);

If(hDevice==INVALID_HANDLE_VALUE)

{

Application->MessageBoxA(“无法创建设备,请确认设备是否连上!”,NULL,IDOK);

}

else

{

DeviceIoControl(

hDevice,

IOCTL_EZUSB_BULK_WRITE,

&blkctl,

sizeof(BULK_TRANSFER_CONTROL),

&inBuffer,//定义的数据缓冲区

sizeof(inBuffer),

&nBytes,

NULL);

……

篇11

1.3触控液晶显示器电路设计系统采用2.4寸(240×320)TFT液晶显示器,由于STM32内部没有集成专用的液晶屏和触摸屏的控制接口,所以需要外接专用芯片来控制显示面板,系统采用ILI9325和TSC2046芯片。由STM32的FSMC(静态存储控制器)的NOR/PSRAM模式模拟产生ILI9325的8080接口通信时序,通过对FSMC的操作向ILI9325写入控制命令或GRAM数据。通过配置STM32的SPI接口向四线电阻触摸屏控制器TSC2046写入控制字和接收控制器返回的屏幕X、Y方向的触电电压值。

2系统软件设计

根据系统硬件功能设计,系统软件主要有3个模块组成:驱动信号产生模块、数据处理模块、液晶显示模块。为了使3个模块协调运行、更好地管理微处理器及缩短软件开发周期,系统在STM32微处理器平台上移植了μC/OS-Ⅱ实时操作系统[7]。根据所完成任务性质及特性的不同,3个模块有不同的优先级及运行频率,其中驱动信号产生模块拥有最高优先级,可剥夺型的实时内核在任何时候都运行就绪了的最高优先级任务,数据处理模块的运行是基于驱动信号产生的基础之上,优先级次低,窗口显示模块对实时性要求最低,可设置最低的优先级。驱动采样任务、数据处理任务及显示任务的流程如图6所示。液晶显示处理任务负责及时按指定格式显示出处理后的数据及完成通过触摸屏控制系统的运行启停等人机交互任务,为了简化开发步骤和提高程序开发效率,系统在μC/OS-Ⅱ操作系统的基础上移植了uCGUI嵌入式图形支持系统。uCGUI设计用于为任何使用LCD图形显示的应用提供高效且独立于处理器及LCD控制器的图形用户接口。uCGUI可以在任何的CPU上运行,因为它是100%的标准C代码编写的。系统的控制显示界面如图7所示。

篇12

1高速数据采集处理系统原理及器件选用

整个高速数据采集处理系统的硬件构成为:高速ADC、高速大容量数据缓冲、高性能DSP和USB2.0接口。系统的原理框图如图1所示。

高性能DSP采用TI公司的TMS320C6000系列定点DSP中的TMS320C6203B;高速ADC采用TI公司的ADS5422,14位采样,最高采样频率为62MHz;PC机接口采用USB2.0,理论最大数据传输速率为480Mbps,器件选用Cypress公司EZ-USBFX2系列中的CY7C68013;数据缓冲采用IDT公司的高速大容量FIFO器件IDT72V2113;程序存储在Flash存储器中,器件选用SST291E010。下面逐一介绍各个器件的主要特性。

(1)TMS320C6203B

TMS320C6203B是美国TI公司高性能数字信号处理器TMS320C6000系列的一种,采用修正的哈佛总线结构,共有1套256位的程序总线、两套32位的程序总线和1套32位的DMA专用总线;内部有8个功能单元可以并行操作,工作频率最大为300MHz,最大处理能力为2400MIPS;内部集成了设备接口,如外部存储器接口(EMIF)、外部扩展总线(XB)、多通道缓冲串口(McBSPs)和主机接口(HPI),与外部存储器、协处理器、主机以及串行设备的连接非常方便。

(2)ADS5422

ADS5422是由美国TI公司生产的高速并行14位模数转换器,其最高采样频率达到62MHz,采样频率为100MHz时,SNR为72dB,SFDR为85dB。模拟信号输入可以是单端输入方式或者差分输入方式,最高输入信号峰峰值为4V,单一5V电源供电。输出数字信号完全兼容3.3V器件,并且提供输入信号满量程标志以及输出数字信号有效标志,从而方便和其它器件的连接。

(3)IDT72V2113

IDT72V2113是由美国IDT公司生产的高速大容量先进先出存储器件(FIFO)。其最高工作频率为133MHz;容量为512KB,可以通过引脚方便地将容量设置成512K×9bit或者256K×18bit两种方式;IDT72V2113可以设置标准工作模式或者FWFT(FirstWordFallThrough)工作模式,并提供全满、半满、全空、将满以及将空等五种标志信号;非常方便进行容量扩展。容量扩展是IDT72V2113的一大特点,扩展方式可分为字长扩展和字深扩展。通过容易扩展可以由多片IDT72V2113形式更大容量的缓冲,并且电路连接简单、可靠。

(4)CY7C68013

CY7C68013是美国Cypress公司推出的USB2.0芯片,是一个全面集成的解决方案,它占用更少的电路板空间,并缩短开发时间。CY7C68013主要结构如下:包括1个8051处理器、1个智能串行接口引擎(SIE)、1个USB收发器、16KB片上RAM(其中包括4KBFIFO)存储器以主1个通用可编程接口(GPIF)。

图3

CY7C68013独特的架构具有如下特点:

①包括1个智能串行的接口引擎(SIE),它执行所有基本的USB功能,将嵌入的MCU解放出来以用于实现其它丰富的功能,以保证持续高速有效的数据传输;

②具有4KB的大容量FIFO用于数据缓冲,当作为从设备时,可采用Synchronous/AsynchronousFIFO接口与主设备(如ASIC,DSP等)连接;当作为主设备时,可通过通用可编程接口(GPIF)形式任意的控制波形来实现与其它从设备连接,能够轻易地兼容绝大多数总线标准,包括ATA、UTOPIA、EPP和PCMCIA等;

③固件软配置,可将需要在CY7C68013上运行的固件,存放在主机上,当USB设备连上主机后,下载到设备上,这样就实现了在不改动硬件的情况下很方便地修改固件;

④能够充分实现USB2.0(2000版)协议,并向下兼容USB1.1。

2高速数据采集处理系统的硬件连接

2.1模拟信号输入电路

ADS5422的模拟信号输入可以采取单端输入方式或者差分输入方式。单端输入方式连接比较简单,但抗噪性能差,所以我们采取差分输入方式,以尽量减少信号噪声以及电磁的干扰,尤其是采用差分输入方式可以将所有偶次谐波通过正反反个输入信号基本上互相抵消。

ADS5422的模拟信号差分输入方式需要同时使用IN和IN引脚,其硬件连接方法如图2所示。图中,首先使用放大器OPA687以及RF变压器将单端信号转换成差分信号,然后输入到ADS5422,其中ADS5422的公共端CM和RF变压器的公共端连接,RF变压器的匝数比应该根据信号确定。为了增强信号的稳定性,在ADS5422每个信号的输入前加上RC低通滤波电路,图2中推荐Rt为50Ω,Rin为22Ω,Cin为10pF,这些元件也可以根据具体的信号进行调整,一般情况下电阻值在10~100Ω之间,电容值在10~200pF之间。

图4

2.2ADS5422与IDT72V2113的连接

虽然ADS5422的供电电压为5V,但其输出的数字信号电平兼容3.3V电平,因此不需要电平转换芯片,只要将ADS5422的数据线与IDT72V2113的数据线相连即可。但是,ADS5422采样和存储采样数据到IDT72V3113中,这两个操作对时序配置要求非常严格,如果两者时序关系配合得不是很好,就会发生数据存储出错或者掉数。如何简单、可靠地实现采样和存储是设计这部分电路的难点。一般的方法是,通过可编程逻辑器件(CPLD或FPGA)来实现ADC与FIFO存储器之间的时序,即由CPLD或FPGA来控制ADC采样和FIFO存储器的写操作。但是,通过仔细查看ADS5422和IDT72V2113的工作时序图,找到了一种简单可靠的实现方法,此方法不需要CPLD或FPGA就可以实现两者的时序配合。

首先分析ADS5422的工作时序图,如图3所示,其中t1为采样时钟上跳沿到输出数据无效之间的时间间隔,即数据保持时间,其大小为3ns。查看IDT72V2113的相关文档可知,对其进行写操作时,数据线的保持时间大于1ns即可满足要求。因此,ADS5422与IDT72V2113之间的时序配合可以采用以下简单的实现方法:ADS5422的采样时钟和IDT72V2113的写时钟采用同一个时钟源,这样,每一个时钟的上跳沿,ADS5422进行模数转换,同时将上个时钟周期内输出的采样数据存储到DT72V2113内部。

2.3C6203B与IDT72V2113的连接

C6203B与IDT72V2113的连接是通过C6203B外部扩展总线(XB)。C6203B的外部扩展总线(XB)宽度为32位,可以实现与同步FIFO无缝连接,可以同时无缝实现四个FIFO写接口或者实现3个FIFO写接口及1个FIFO读接口。通过无缝连接实现FIFO读接口,FIFO必须连接到XCE3上,数据通过DMA方式从IDT72V2113传送到C6203B的片内RAM中,具体连接如图4所示。图4中,4片IDT72V2113经过字长和字深扩展形成2MB的数据输入缓冲,输入数据总线(D0~D15)、输出数据总线(Q0~Q15)、读使能(REN)、读时钟(RCLK)、写使能(WEN)、写时钟(WCLK)和将空标志信号(PAE)是由4片IDT72V2113的相应信号组合形成的;XCE3为外部扩展总线(XB)的空间选择信号,XFCLK为外部扩展总线(XB)的输出时钟,EXT_INT4是C6203B的外部中断信号4,DX0用作通用输出口,控制IDT72V2113的写使能信号。

2.4CY7C68013与C6203B的连接

CY7C68013是一个非常方便的USB2.0实现方案,它提供与DSP或者MCU连接的接口,连接方法有两种:SlaveFIFOs和Master可编程接口GPIF。在本方案中,选用了SlaveFIFOs方式,异步读写。SlaveFIFOs方式是从机方式,DSP可以像读写普通FIFO一样对CY7C68013内部的多层缓冲FIFO进行读写。具体的电路连接如图5所示。FLAGA、FLAGB和FLAGC是CY7C68013内部FIFO的状态标志,C6203B通过通用I/O口来获得FIFO的空、半满(由用户设定半满的阈值)和满等状态信息。C6203B对CY7C68013内部FIFO的选择,以及数据包的提交也是通过通用I/O口来实现。C6203B通过EMIF接口的CE2空间对CY7C68013进行读写操作。工作过程为:DSP通过USB向PC发送数据时,首先查看空、半满和满这三个状态信号,然后向USB写入适当大小的数据,以保证数据不会溢出;PC机通过USB向DSP发送命令字时,USB通过中断方式通知DSP读取命令字。

3USB软件设计

USB接口开发中有相当大的工作量是关于USB软件的开发,USB软件包括三方面的工作:固件(firmware)设计,驱动程序设计和主机端应用程序的设计。

3.1固件设计

固件是运行在CY7C68013上的程序,可采用汇编语言或C语言设计,其主要功能是控制CY7C68013接收并处理USB驱动程序的请求(如请求设备描述符、请求或设置设备状态,请求或设置设备接口等USB2.0标准请求)、控制CY7C68013接收应用程序的控制指令、通过CY7C68013存放数据并实时上传至PC等。

本方案中的固件设计思路如下:

①使CY7C68013工作于异步从FIFO(AsynchronousSlaveFIFO)模式。相应的寄存器操作为:IFCONFIG=0xCB。

CY7C68013具有多种工作方式,除了可以作为能够产生任意控制波形的主控芯片外,即使作为从设备,也可选择异步还是同步方式。由于DSP的关系,本方案选择异步从方式。

②将4KB的FIFO对应两个端点(EndPoint),即EndPoint2和EndPoint6。相应的寄存器操作为:EP2CFG=0xA0,EP6CFG=0xF2。

EndPoint2与EndPoint6分别对应2KB的内装中FIFO(下文分别称为FIFO2、FIFO6),存放USB需要上传与接收的数据。其中EndPoint2为OUT型,负责从主机接收数据;EndPoint6为IN型,负责向主机发送数据。另外,EndPoint2与EndPoint6均采用批量(BULK)传输方式,这种方式相对于其它USB2.0定义的传输方式具有数据可靠、传输速率高等特点,是最常用的传输方式。

③对FIFO进行配置。相应的寄存器操作为:EP2FIFOCFG=0x11,EP6FIFOCFG=0x0D。

本方案将FIFO2、FIFO6设置成自动方式。这里所谓“自动”,是指在数据的传输过程中,不需要CY7C68013的8051内核参与。如有特殊需要可以设成手动方式,这样8051就可以对数据进行修改,如图6所示。另外还将FIFO配置成16位接口。

④其它操作。为了完善整个USB传输功能,提高固件的健壮性,还必须配以其它设计,这包括FIFO的自动清空复位,个性化命令等功能,在此就不进行详细讨论了。

3.2驱动程序设计

USB系统驱动程序采用分层结构模型,分别为较高级的USB设备驱动程序和较低级的USB函数层。其中USB函数层由两部分组成:较高级的通用串行总线驱动程序模块(USBD)和较低级的主控制器驱动程序模块(HCD)。在上述USB分层模块中,USB函数层(USBD及HCD)由Windows提供,负责管理USB设备驱动程序和USB控制器之间的通信;加载及卸载USB驱动程序;与USB设备通用端点(EndPoint)建立通信并执行设备配置、数据与USB协议框架和打包格式的双向转换任务。目前Windows提供有多种USB设备驱动程序,但并不针对实时数据采集设备,因此USB设备驱动程序需由开发者自己编写。

开发USB设备驱动程序,可采用Numega公司的开发包DriverWorks和Microsoft公司的2000DDK,并以VC++6.0作为辅助开发环境。DriverWorks提供的驱动向导,可根据用户的需要,自动生成代码框架,减少了开发的难度,缩短了开发的周期。但是,Cypress公司为了方便用户开发USB接口,在CY7C68013的开发包中提供了一个通用驱动程序,该程序可不加修改,经DDK编译后直接使用。在本设计方案中,采用的就是这个通用驱动程序。

3.3应用程序设计

主机应用程序是主要实现从高速数据采集处理板该取处理后的数据、存储、显示处理结构以及向数据采集处理板发送控制命令。在Windows2000下,我们使用的应用程序开发工具是VC++6.0。

4系统工作原理

篇13

现代工业生产和科学研究对数据采集的要求日益提高,在瞬态信号测量、图像处理等一些高速、高精度的测量中,需要进行高速数据采集。现在通用的高速数据采集卡一般多是PCI卡或ISA卡,存在以下缺点:安装麻烦、价格昂贵;受计算机插槽数量、地址、中断资源限制,可扩展性差;在一些电磁干扰性强的测试现场,无法专门对其做电磁屏蔽,导致采集的数据失真。

通用串行总线USB是1995年康柏、微软、IBM、DEC等公司为解决传统总线不足而推广的一种新型的通信标准。该总线接口具有安装方便、高带宽、易于扩展等优点,已逐渐成为现代数据传输的发展趋势。基于USB的高速数据采集卡充分利用USB总线的上述优点,有效解决了传统高速数据采集卡的缺陷。

2硬件设计

2.1支持USB2.0高速传输的CY7C68013

CypressSemiconductor公司的EZ-USBFX2是世界上第一款集成USB2.0的微处理器,它集成了USB2.0收发器、SIE(串行接口引擎)、增强的8051微控制器和可编程的接口。FX2这种独创性结构可使数据传输率达到56Mbytes/s,即USB2.0允许的最大带宽。在FX2中,智能SIE可以硬件处理许多USB1.1和USB2.0协议,从而减少了开发时间和确保了USB的兼容性。GPIF(GeneralProgrammableInterface)和主/从端点FIFO(8位或16位数据总线)为ATA、UTOPIA、EPP、PCMCIA和DSP等提供了简单和无缝连接接口。

CY7C68013的GPIF引擎具有自动传输数据结构的特性,这种特性使得设备和主机通过CY7C68013可以无缝的、高速的传输数据。为了实现高速的数据传输,CY7C68013CPU不会直接参与数据的传输,而是直接利用GPIF的自动传输数据模式。图1和图2说明了主机IN和OUT数据传输过程。

2.1.1端点缓冲区

FX2包含3个64字节端点缓冲区和4K可配置成不同方式的缓冲,其中3个64字节的缓冲区为EP0、EP1IN和EP1OUT。EP0作为控制端点用,它是一个双向端点,既可为IN也可为OUT。当需要控制传输数据时,FX2固件读写EP0缓冲区,但是8个SETUP字节数据不会出现在这64字节EP0端点缓冲区中。EP1IN和EP1OUT使用独立的64字节缓冲区,FX2固件可配置这些端点为BULK、INTERRUPT或ISOCHRONOUS传输方式,这两个端点和EP0一样只能被固件访问。这一点与大端点缓冲区EP2、EP4、EP6和EP8不同,这四个端点缓冲区主要用来和片上或片外进行高带宽数据传输而无需固件的参与。EP2、EP4、EP6和EP8是高带宽、大缓冲区。它们可被配置成不同的方式来适应带宽的需求。

2.1.2接口信号

在利用GPIF进行高速数据传输系统设计时,GPIFwaveforms的编辑是非常重要的,它控制着整个数据传输过程的读写时序。此时CPU的作用已经非常小了,它只起着下载代码到内部RAM以及在固件中如何触发GPIFwaveforms的作用。FX2专门为GPIF提供了接口信号,如8位或16位的数据线、控制信号、Ready信号以及地址线。

IFCLK(双向时钟信号):IFCLK是一个参考时钟,可以配置成输入或输出。当配置为输出时,IFCLK被FX2驱动为30MHz或48MHz;当配置为输入时,时钟范围为5-48MHz。

GPIFADR[8:0](输出):GPIF使用GPIFADR信号为外部设备提供地址线,在总线上地址值是自增的。

FD[15:0](双向):这是USB主机通过FX2和外部设备进行数据传输的数据线,它可配置成8位或16位。当16位时,FD[7:0]代表端点FIFO中的第一个字节,FD[15:8]代表第二个字节。

CTL[5:0](输出):FX2为外部设备提供了几个控制信号,如读写选通、使能等。

RDY[5:0](输入):FX2提供了几个状态检测信号,它可以检测外部设备的状态,如FIFO的空、满、半满等。

GSTATE[2:0](输出):这是调试信号,表示GPIF波形执行的状态,通常连接到逻辑分析仪上。

2.2AD9238

AD9238是一个双通道的12位A/D转换器,采用单3V供电,速度可以是20MSPS、40MSPS和65MSPS;低功耗,工作在20MSPS时,功耗为180mW,40MSPS时,功耗为330mW,65MSPS时,功耗为600mW;具有500MHz3dB带宽的差分输入;片上参考源及SHA;灵活的模拟输入范围:1Vp-p~2Vp-p;适用于:超声波设备,射频通讯,电池电源仪器,低价示波器等。本系统采用20MSPS的AD9238,可充分发挥USB在高速传输模式下的数据传输优势。

2.3数据采集系统

该数据采集系统整个框图如图3所示,该系统由以下几部份组成:USB控制器、FIFO、CPLD、AD9238以及数据采集前端电路。

图3数据采集系统框图

CPLD主要是控制时序,时钟分频等。FIFO主要是起着高速数据缓冲作用,当FIFO半满时,数据开始向USB主机发送。我们采用的是同步FIFO,时钟信号接IFCLK,当FIFO的/RD信号和/OE信号有效时,每个IFCLK上升沿就输出一个数据;当FIFO的/WR信号有效时,IFCLK上升沿就读进一个数据。AD9238的20MHz时钟信号是通过CPLD分频所得。当程序使能AD9238的/OEB_A和/OEB_B信号时,AD9238双通道开始进行数据采集并向FIFO写数据。

系统前端的调理电路采用的是AD公司的AD8138,该放大器具有较宽的模拟带宽(320MHz,-3dB,增益1),而且可以实现将单端输入变成差分输出的功能。此项功能在现代高速模数变换电路中非常有用,因为几乎所有的高速A/D芯片都要求模拟信号为差分输入,虽然部分芯片的手册中提到对于单端输入信号也可使用,但这样一来会使A/D转换结果的二次谐波增大,降低信噪比(SNR)。AD8138很好的解决了这个问题,用户可以很容易的将单端信号转换成差分输出而不必使用变压器,并且它的输入阻抗高达6MΩ,可以直接与输入信号相连而省略隔离放大器,大大精简了电路结构。图4为AD8138的典型应用电路。

图4AD8138典型应用电路

3软件设计

3.1Windows驱动程序设计

USB设备驱动程序基于WDM。WDM型驱动程序是内核程序,与标准的Win32用户态程序不同。采用了分层处理的方法。通过它,用户不需要直接与硬件打它道(在USB驱动程序中尤为明显),只需通过下层驱动程序提供的接口号访问硬件。因此,USB设备驱动程序不必具体对硬件编程,所有的USB命令、读写操作通过总线驱动程序转给USB设备。但是,USB设备驱动程序必须定义与外部设备的通讯接口和通讯的数据格式,也必须定义与应用程序的接口。

Cypress公司提供了完整的CY7C68013驱动程序源码、控制面板程序及固件的框架,这大大提高了用户开发的进度。用户只需稍加修改或不需任何修改即可使用所带驱动程序,软件开发者大量的时间主要集中在应用程序和固件的开发。本文所述的数据采集系统驱动程序就在原来的基础上进行了简单的修改来满足我们的需要。根据我们自己的需求,一般只需修改DeviceIoControl例程,如我们主要增加了控制数据传输函数、启动和停止AD、复位FIFO等,即IOCTL_START_AD、IOCTL_STOP_AD、IOCTL_RESET_FIFO。

3.2底层固件设计

要实现USB2.0的高带宽数据传输,必须使用它特有的GPIF特性,在开发固件前,首先必须根据实际需要对GPIFwaveform进行编辑。CY7C68013开发工具中带有一个GPIFDesigner,如图5所示,编辑完waveform后,选择Tools->ExporttoGPIF.cFile来输出GPIF.c文件,然后将该文件加入keilc工程进行编译。

由于CY7C68013的EP2、EP4、EP6、EP8四个端点共享4KFIFO缓冲区,所以在该系统中,我们将EP2配置成4K的缓冲区,并设置为IN。用EP1OUT作为AD的控制参数传递,如启动和停止AD数据输出、复位FIFO等。在固件程序中,最重要的就是TD_Init()和TD_Poll()两个函数。

图5GPIFDesigner

在TD_Init()中主要完成GPIF相应寄存器的初始化,如下:

voidTD_Init(void)//Calledonceatstartup

{

//settheCPUclockto48MHz

CPUCS=((CPUCS&~bmCLKSPD)|bmCLKSPD1);

SYNCDELAY;

EP2CFG=0XE8;//EP2IN,bulk,size1024,4xbuffered

SYNCDELAY;

EP4CFG=0x00;//EP4notvalid

SYNCDELAY;

EP6CFG=0x00;//EP6notvalid

SYNCDELAY;

EP8CFG=0x00;//EP8notvalid

SYNCDELAY;

FIFORESET=0x80;//setNAKALLbittoNAKalltransfersfromhost

SYNCDELAY;

FIFORESET=0x02;//resetEP2FIFO

SYNCDELAY;

FIFORESET=0x00;//clearNAKALLbittoresumenormaloperation

SYNCDELAY;

EP2FIFOCFG=0x01;//allowcoretoseezerotoonetransitionofautooutbit

SYNCDELAY;

EP2FIFOCFG=0x11;//autooutmode,disablePKTENDzerolengthsend,wordops

SYNCDELAY;

EP6FIFOCFG=0x09;//autoinmode,disablePKTENDzerolengthsend,wordops

SYNCDELAY;

GpifInit();//initializeGPIFregisters

SYNCDELAY;

EP2GPIFFLGSEL=0x02;//ForEP2IN,GPIFusesFFflag

SYNCDELAY;

//globalflowstateregisterinitializations

FLOWLOGIC=FlowStates[19];//00110110b-LFUNC[1:0]=00(AANDB),//TERMA/B[2:0]=110(FIFOFlag)

SYNCDELAY;

FLOWSTB=FlowStates[23];//00000100b-MSTB[2:0]=100(CTL4),not//usedasstrobe

SYNCDELAY;

GPIFHOLDAMOUNT=FlowStates[26];//holddataforonehalfclock(10ns)assuming//48MHzIFCLK

SYNCDELAY;

FLOWSTBEDGE=FlowStates[24];//movedataonbothedgesofclock

SYNCDELAY;

FLOWSTBHPERIOD=FlowStates[25];//20.83nshalfperiod

SYNCDELAY;

//resettheexternalFIFO

OEA|=0x07;;//turnonPA0、PA1、PA2asoutputpin

IOA|=0x07;//pullPA0、PA1、PA2highinitially

IOA&=0xFB;//bringPA2low

EZUSB_Delay(1);//keepPA2lowfor~1ms,morethanenoughtime

IOA|=0x04;//bringPA2highandexitreset

IOA&=0xFC;//bringPA0、PA1lowandenableAD

}

在TD_Poll()中主要完成外部FIFO状态的检测和数据的传输,主要程序部分如下:

voidTD_Poll(void)

{

if(GPIFTRIG&0x80)//ifGPIFinterfaceIDLE

{

if(EXTFIFONOTEMPTY)//ifexternalFIFOisnotempty

{

if(!(EP24FIFOFLGS&0x01))//ifEP2FIFOisnotfull

{

if(enum_high_speed)

{

SYNCDELAY;

GPIFTCB1=0x02;//setuptransactioncount(1024//bytes/2forwordwide->0x0100)

SYNCDELAY;

GPIFTCB0=0x00;

SYNCDELAY;

}

else

{

SYNCDELAY;

GPIFTCB1=0x00;//setuptransactioncount(64bytes/2

//forwordwide->0x20)

SYNCDELAY;

GPIFTCB0=0x20;

SYNCDELAY;

}

Setup_FLOWSTATE_Read();//setupFLOWSTATEregistersfor

//FIFOReadoperation

SYNCDELAY;

GPIFTRIG=GPIFTRIGRD|GPIF_EP2;//launchGPIFFIFOREAD

//TransactiontoEP2FIFO

SYNCDELAY;

while(!(GPIFTRIG&0x80))//pollGPIFTRIG.7GPIFDonebit

{

;

}

SYNCDELAY;

}

}

}