资源描述
目 录1.绪论11.1课题研究的意义11.2数据采集技术的发展历程和现状11.3本文的研究内容21.4系统设计涉及的理论分析22.系统设计42.1方案选择42.2系统框图53.单元电路设计63.1信号调理电路63.2高速模块73.3 FPGA模块设计83.4MCU模块设计83.5数据采集通道总体原理图93.6硬件电路总体设计94.软件设计104.1 信号采集与存储控制电路工作原理104.2 信号采集与存储控制电路的FPGA实现114.3 原理图中的各底层模块采用VHDL语言编写124.3.1三态缓冲器模块TS8124.3.2分频器模块fredivid134.3.3地址锁存器模块dlatch8144.3.4地址计数器模块addrcount154.3.5双口RAM模块lpm_ram_dp164.4 数据显示模块设计184.4.1 主程序184.4.2 INT0中断服务程序194.4.3 INT1中断服务程序194.5软件仿真204.5.1三态缓冲器模块TS8204.5.2分频器模块fredivid204.5.3地址锁存器模块dlatch8214.5.4地址计数器模块addrcount215.系统调试215.1 单片机子系统调试215.2 FPGA子系统调试225.3 高速A/D模块的调试226 总结22致谢22参考文献23附录25高速数据采集系统设计摘要:随着数字技术的飞速发展,高速数据采集系统也迅速地得到了广泛的应用。在生产过程中,应用这一系统可以对生产现场的工艺参数进行采集、监视和记录,为提高生产质量,降低成本提供了信息和手段。在科学研究中,应用数据采集系统可以获取大量的动态数据,是研究瞬间物理过程的有力工具,为科学活动提供了重要的手段。而当前我国对高速数据采集系统的研究开发都处于起步阶段,因此,开发出高速数据采集系统就显得尤为重要了。本文针对高速数据采集系统中的实时性、采集速率等问题提出了一种结合FPGA与单片机的低成本高速数据采集系统设计方案。该系统以高速SOC单片机C8051F360和FPGA EP2C8T144为核心,运用模块化设计方法,实现软硬件设计,具有一定的实用价值。关键词:C8051F360;EP2C8T144;ADC;数据采集;高速1.绪论1.1课题研究的意义随着信息技术的飞速发展,各种数据的实时采集和处理在现代工业控制中已成为必不可少的。这就为我们的设计提出了两个方面的要求:一方面,要求接口简单灵活且有较高的数据传输率;另一方面,由于数据量通常都较大,要求主机能够对实时数据做出快速响应,并及时进行分析和处理。FPGA与单片机相比,有着频率高,内部延时小,内部存储容量大等优点,比单片机更适应与高速数据采集的场合。比如在某些高冲击、高振荡场合下,需要对冲击过程的加速度数据进行回收,包括实时采集、存储以及事后回读分析。在这样的环境下,要求数据回收系统具有采集的高速、实时性;存储的及时、正确性。FPGA(现场可编程逻辑门阵列)在高速数据采集方面具有单片机和DSP所不具备的优点。FPGA所要完成的功能完全由内部可编程硬件电路实现,具有并行执行、速度快、多功能、低功耗、可现场反复编程等特点。使用FPGA构成数据采集系统还可以减化外围控制电路,使系统更加简洁有效。1.2数据采集技术的发展历程和现状在数字技术日新月异的今天,数据采集技术的重要性是十分显著的。它是数字世界和外部物理世界连接的桥梁。而随着现代工业和科学技术的发展,对数据采集技术的要求日益提高,在雷达、声纳、图像处理、语音识别、通信、信号测试等科研实践领域中,都需要高精度,高数据率的数据采集系统。它的关键技术为高速高精度的ADC技术,高数据率的存储和缓存技术以及系统高可靠性保证等。通过数据采集技术,科研人员在实验现场可以根据需要实时记录原始数据,用于实验室后期的分析和处理,对工程实践和理论分析探索具有重大意义。正是由于目前数据采集技术广泛应用在科研实践和工业生产中的各个领域,当前国外对采集技术的研究和发展比较成熟。按通道数分有单通道的、双通道的、多通道的(多达上百通道);按采样率分可从几kHz到高达几个GHz;按分辨率分有8位、10位、12位、14位还有16位。在一些高端的示波器,频谱仪等测试仪器中,其采样率可达几个GHz,甚至几十个GHz。而国内由于发展时间短,芯片技术等一些方面的限制,目前没有高水平的采集器出现。现在从高校到研究所到公司对采集器的需求越来越多,性能要求也越来越高。这种情况给我们研发和设计高速数据采集系统提供了很多机遇。1.3本文的研究内容设计一个高速数据采集系统,输入模拟信号为正弦信号,频率为200kHz,Vp-p小于等于0.5V。每次数据采集以20MHz的固定采样频率连续采集128点数据,采集完毕以后,用LCD模块回放显示采集信号波形。该系统具有实时采集、存储以及传输功能。(1)硬件设计:硬件部分包括FPGA最小系统电路、数据的实时采集电路、数据缓存部分以及与单片机通信接口部分电路等。(2)软件设计:通过编写程序,主要实现实时采集(A/D采样)功能、数据缓存、与单片机进行通信等功能。(3)仿真结果及分析:主要是针对实时采集部分、数据缓存部分、与PC机通信部分进行时序仿真和功能仿真,根据仿真结果对设计进行分析。1.4系统设计涉及的理论分析1.4.1采样理论根据奈奎斯特定理,在进行模拟数字信号的转换过程中,只有采样频率fs大于被采样信号中最高频率fmax的2倍时,才能保证数字信号完整地保留了原始信号中的信息,实际应用中必须保证采样频率为信号最高频率的510倍。对于高频信号(f3MHz),则必须达到10MHz以上的采样速率。1.4.2模数转换(ADC)基本原理及常用AD转换技术模数转换器ADC用来把连续变化的模拟信号转换为一定格式的数字量。ADC转换器实际上就是一个编码器,输入的模拟量经过信号调理电路,抗混滤波电路进入AD转换电路,AD转换电路将模拟信号转换为数字信号送入数据处理系统。AD转换部分通常包括采样和保持,量化和编码两个部分组成。(1)采样和保持:由于被转换的电压是一个随时间不断地变换的模拟量,也就是,在各个不同的瞬间它的大小是不同的。同时,要把一定幅度的电压转换为数字量都需要一定的时间。通常以一定的时间间隔周期地“读取”输入信号的大小,并转换为与其大小对应的数字量。这个过程被称为采样。采样定理告诉我们,一个频谱有限的模拟信号,其采样频率必须至少大于等于模拟信号最高有效频率分量的两倍,防止出现频谱的失真。由于采样脉冲的宽度往往都是很小的,而实现转换是需要时间的,为使后续电路能很好的对这个采样结果进行处理,通常要把采样值保存下来,直到下一次采样再更新,这个过程为保持。(2)量化和编码:通过采样保持电路,输入信号虽然已经不是一个平滑的连续变化的电压,但它还是一个在某个区间范围内任意取值的模拟量。因此,用数字量来表示模拟量时就需要一个类似与四舍五入的过程,即量化。显然此过程,量化前后的值是不相等的,这个差值为量化误差。而且量化的等级越细,量化误差越小。量化后的信号,虽然是一个离散量,但是为了使数字系统可以对其进行传输和处理,还必须用若干位二进制代码来表示量化结果,这个过程就是编码。AD转换器的主要技术指标如下:(1)分辩率(Resolution)指数字量变化一个最小量时模拟信号的变化量,定义为满刻度与n的平方的比值。分辩率又称精度,通常以数字信号的位数来表示。(2)转换速率(Conversion Rate)是指完成一次从模拟转换到数字的AD转换所需的时间的倒数。积分型AD的转换时间是毫秒级属低速AD,逐次比较型AD是微秒级属中速AD,全并行串并行型AD可达到纳秒级。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转换的正确完成,采样速率(Sample Rate)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是ksps和Msps,表示每秒采样千百万次。(3)量化误差(Quantizing Error)由于AD的有限分辩率而引起的误差,即有限分辩率AD的阶梯状转移特性曲线与无限分辩率AD(理想AD)的转移特性曲线(直线)之间的最大偏差。通常是1个或半个最小数字量的模拟变化量,表示为1LSB、12LSB。(4)偏移误差(Offset Error)输入信号为零时输出信号不为零的值,可外接电位器调至最小。(5)满刻度误差(Full Scale Error)满度输出时对应的输入信号与理想输入信号值之差。(6)线性度(Linearity)实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。1.4.3现场可编程门阵列(FPGA)基础知识现场可编程门阵列(FiledProgrammable GateArray),简称FPGA,是在CPLD的基础上发展起来的高性能可编程器件。其集成度很高,密度从数万门系统到数千万门系统不等,可以完成及其复杂的时序和组合逻辑电路功能,适用于高速,高密度的高端数字逻辑设计领域。FPGA产品一般分为两种类型,一类是基于乘积项(ProductTerm)技术,用电可擦除可编程只读存储器(EEPROM)或闪存(Flash)制造,多用于5000门一下的小规模设计。另一类基于查找表(LookUp table)技术,用静态存取存储器(SRAM)工艺制造,密度高,触发器多,多用于10000 门以上的大规模设计。采用SRAM工艺制造的FPGA,掉电后数据会消失,因此,调试期间可以用下载电缆配置FPGA器件,调试完成后,需要将数据固化到一个专用的EEPROM中,上电后,由这片配置EEPROM先对FPGA加载数据,十几个毫秒后,FPGA就可正常工作。FPGA的基本组成部分有可编程输入输出单元,基本可编程逻辑单元,嵌入式RAM,丰富的布线资源,底层嵌入功能单元,内嵌专用硬核等。(1)可编程输入输出单元输入输出单元(InputOutput)简称YO单元,它们是芯片与外界电路的接口部分,完成不同的电气特性下对输入输出信号的驱动和匹配需求。为了使FPGA有更灵活的应用,目前大多数FPGA的IO单元被设计为可编程模式,即通过软件的灵活配置,可以适配不同的电气标准与YO物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。(2)基本可编程逻辑单元基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活的改变其内部连接和配置,完成不同的逻辑功能。FPGA一般是基于SRAM工艺的,其基本可编程逻辑单元几乎都是由查找表(LUT,Look-Up table)和寄存器(Register)组成的。查找表一般完成纯组合逻辑功能。组合逻辑的输入作为地址线连接到查找表,查找表中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的逻辑。寄存器用于完成同步时序逻辑设计。(3)嵌入式RAM目前大多数FPGA内部都内嵌了块RAM(Block RAM)。FPGA内部嵌入可编程RAM模块,大大的扩展了FPGA的应用范围和使用灵活性。FPGA内部的RAM可以灵活配置为单端口RAM,双端口RAM,FIFO等常用存储结构。通过对RAM赋予初值,还可以实现ROM的功能。(4)丰富的布线资源布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA内部有着非常丰富的布线资源,这些布线资源根据工艺,长度,宽度和分布位置的不同而被划分为不同的等级。有一些是全局性的布线资源,用于完成器件内部的全局时钟和全局复位置位的布线;一些叫做长线资源,用作完成器件Bank(分区)间的一些高速信号和一些第二全局时钟信号的布线;还有一些叫做短线资源,用以完成基本逻辑单元之间的逻辑互联和布线等。在实现过程中,设计者一般不用直接选择布线资源,而是由布局布线器自动根据输入的逻辑网表的拓扑结构和约束条件选择可用的布线资源连通所用的底层单元模块,所以往往容易比忽略。其实布线资源的优化与使用和设计的实现结果有直接关系。(5)底层嵌入功能单元随着FPGA的发展,PLL,DLL,DSP,CPU等模块越来越多的被嵌入到FPGA的内部,以满足不同场合的需要。(6)内嵌专用硬核这里的内嵌专用硬核与前面的“底层嵌入单元”是有区别的,这里讲的内嵌专用硬核主要是指那些通用性相对较弱,不是所有FPGA器件都包含硬核。FPGA的主要器件供应商有Xilinx,Altera,Lattic,Actel和Atmel等。2.系统设计2.1方案选择随着数据采集对速度性能指标越来越高,高速数据采集系统在自动控制、电气测量、地质物探、航空航天等工程实践中得到了十分广泛的应用。高速数据采集系统一般分为数据采集和数据处理两部分。在数据采集时,必须以很高的速度采集数据,但在数据处理时并不需要以同样的速度来进行。因此,高速数据采集需要有一个数据缓存单元,现将采集的数据有效地存储,然后根据系统需求进行数据处理。传统的数据采集系统通常采用单片机直接控制A/D转换器完成数据采集。用单片机控制A/D转换器,一般要通过启动A/D转换、读取A/D转换值、将数据存入存储器、修改存储器地址指针、判断数据采集是否完成等过程。从本质上来说,基于单片机的数据采集系统是通过软件来实现特定功能的。在许多情况下,采用软件解决方案其速度限制是很难克服的。MCS-51单片机大多数指令的执行时间需要12个机器周期,完成一次A/D转换大约需要几十微秒。即使对于单片机机器周期、时钟频率可达100MHz的C8051F360单片机,如果用来控制高速A/D转换器,也很难达到几MHz以上的采样速率。通常构成高速缓存的方案有三种:第一种是高速SRAM切换方式。高速SRAM只有一组数据、地址和控制总线,可通过三态缓冲门分别接到A/D转换器和单片机上。但A/D采样时,SRAM由三态门切换到A/D转换器一侧,以使采样数据写入其中。当A/D采样结束后,SRAM再由三态门切换到单片机一侧进行读写。这种方式下的优点是SRAM可随机存取,同时较大容量的高速SRAM有现成的产品可供选择,但硬件电路较复杂。第二种是FIFO(先进先出)方式。FIFO存储器就像数据管道一样,数据从管道的一头流入,从另一头流出,先进入的数据先流出。FIFO具有两套数据线而无地址线,可在其一端写操作而在另一端读操作,数据在其中顺序移动,因而能够达到很高的传输速度和效率。第三种是双口RAM方式。双口RAM具有两组独立的数据、地址和控制总线,因而可从两个端口同时读写而互不干扰,并可将采样数据从一个端口写入,而由单片机从另一个端口读出。双口RAM也能达到很高的传输速度,并且具有随机存取的优点。可编程逻辑器件的应用,为了实现高速数据采集提供了一种理想的途径。利用可编程逻辑器件高速性能和本身集成的几万个逻辑门和嵌入式存储器块,把数据采集系统中的数据缓存、地址发生器、控制等电路全部集成进一片可编程逻辑器件芯片中,大大减少了系统的体积,降低了成本,提高了可靠性。同时,可编程逻辑器件实现逻辑重构,而且可实现在系统编程以及有众多功能强大的EDA软件的支持,使得系统具有升级容易、开发周期短等优点。由于本设计的高速采集系统,采样频率要求达到20MHz,同时要求采集的信号在LCD模块上显示模型,故采用单片机和FPGA相结合的设计方案。模拟信号经过调理以后送高速A/D转换器,由FPGA完成高速A/D转换器的控制和数据存储,单片机从FPGA存储器中读取数据,经处理后在LCD上显示波形。2.2系统框图高速数据采集系统采用单片机和FPGA相结合的设计方案。系统框图如图2.2所示。模拟信号经过调理后送高速AD转换器,由FPGA内部的控制逻辑实现对高速AD转换器的控制和数据存储,单片机通过系统总线实现与FPGA的接口,通过该接口获取原始数据,然后通过算法完成对数据的处理及应用。整个系统由信号调理电路、AD转换器、FPGA模块、MCU模块、键盘及LCD显示模块等组成。数据采集系统首先对采集的信号进行前端处理,如信号放大、滤波、直流电平位移等预处理,以满足AD转换器对模拟信号的要求。FPGA模块主要实现对高速ADC的控制及数据存储,单片机通过与FPGA器件的数据交换获得采集到数字信息,再进行相关的处理,并通过LCD显示及键盘接口实现较灵活的人机交换。图2.2 高速数据采集系统框图3.单元电路设计3.1信号调理电路在数据采集中,因AD转换器对模拟信号的幅度有一定的要求范围。ADS930在单端工作方式下,输入的模拟信号应在12V之间,为了使AD转换器能正常工作,确保最小的相对误差,在信号进行模数转换前,对输入的信号进行预处理,使之满足AD转换器的幅度要求。信号调理电路由射极跟随器、增益可调放大器、低通滤波器几部分组成。(1)射极跟随器本设计采用射极跟随器,既可获得较高的输入阻抗,还可以在被测信号源与数据采集电路之间起到隔离作用。其原理图如图3.1.1所示。跟随器可以获得很高的输入阻抗,但是为了对信号源呈稳定的负载,在电路的输入端并联了一个电阻R1,这时,前置放大器的等效输入电阻约等于R1。(2) 增益可调放大器为了满足后接AD转换器输入电压范围的要求,因此对放大器的要求是增益可调,直流电平可调。根据以上要求,设计的放大电路原理图如图3.1.2所示。 增益可调放大器采用反相放大器的结构,放大倍数的计算公式如下: A=-RP1/R2 其中,RP1为精密电位器,调节RP1就可以调节放大器的增益。如果R2取1k,RP1取10k,则增益的可调范围为0-10 。来自前置放大器的是双极性的交流信号,而A/D对输入信号的要求通常是单极性的。为了适合A/D的要求,本放大器中加了电平移位电路。电平位移电路有RP2组成,C1用于滤除高频噪声。调节Rp2就可以改变Vos的值,不过注意,Vos的值要经过1+RP1/R2倍的放大才送到输出端,因此,调节放大倍数的同时也会改变放大器输出端的直流偏移量。上述放大器中电位器RP1、RP2需手动调节,如果采用数控电位器代替,就可以得到程控放大器,这在自动化仪表设计非常重要。为了满足模拟输入信号的要求,整个信号调理电路应该有足够的带宽。为了防止信号中的无用分量(如高频干扰信号)也经过通道被采样,信号在进入A/ D 之前要进行抗混叠低通滤波。为了简化电路,本设计中抗混叠滤波器采用了RC低通滤波,如图中所示R3和C2构成。低通滤波器的截止频率计算公式如下: f =1/(2pi*R3*C2) 图3.1.1 射极跟随器图3.1.2增益可调放大器3.2高速模块首先,A/D的转换速率取决于模拟信号的频率范围,根据设计题目要求,A/D转换速率应大于10MHz,为留有余量选择30MHz采样频率的ADC器件。其次,根据A/D转换原理,转换过程中存在量化误差。量化误差取决于量化位数,位数越多量化误差越小。题目对模拟信号的转换精度没有特别的要求,因此,选用常见的8位A/D转换器。最后,FPGA为3V器件,故优先选用3V工作电压下的ADC器件,以简化电源设计和电平匹配。因此,我们采样了BURRBROWN公司的ADS930器件,该器件为8位30MHz采样AD转换器,具有单端差动输入、内部基准、高速宽跟踪捕捉的高速流水ADC器件。工作电压3V一5V,单端输入电压1V 2V。ADC的模拟输入采用单端输入、交流耦合方式,此时其IN(24)引脚与其内部参考电压的分压输出端CM(26)引脚相连,以保证15V的偏置电压。数字端主要包括数据输出DOD7,时钟CLK和数据输出使能/OE等,与FPGA器件相连,根据时序受FPGA控制。3.3 FPGA模块设计在高速数据采集方面,FPGA具有单片机和DSP无法比拟的优势,FPGA的时钟频率高,内部延时小,而且速度快、效率高、组成形式灵活。FPGA内的嵌入式阵列块(EAB)可作为存储器使用,构成双口RAM或FIFO。设计中使用了Altera公司EP2C8T144,内含8256个基本逻辑单元(LE),18个嵌入式可编程RAM模块可灵活配置成单口RAM、双口RAM、FIFO等,满足大部分数字系统的设计要求。系统图如图3.3所示,其中与单片机接口的信号包括数据总线、地址锁存ALE、片选CS2、读使能RD、AD启动控制START和批量转换结束应答EOC等,与ADS930接口的信号包括ADC的8位数据、ADC读使能ADC OE和ADC时钟等。控制操作时通过START启动AD转换,之后由FPGA控制ADS930进行模数转换,其转换时钟由40MHz有源晶振经FPGA内部锁相环2分频获得,实现20MHz的采样速率,每个时钟将AD转换的结果数据在存储到FPGA内部的双口RAM,同时地址计数器加1,以指向下一个RAM地址,供下次写入数;当双口RAM存储满时输出EOC有效,通知单片机获取批量数据。采用EP2C8TI44器件时,最大可实现8KB的双口RAM及接口逻辑,这样每批采样数据即为8032个,单片机可以等到一批数据采样完成后通过总线读取这些数据,再进行处理,并且单片机的数据处理和FPGA通过ADS930的数据采样可以同步进行,有效地提高了单片机的工作效率。对于1次需采集更大容量数据的要求时,可采用更大容量的FPGA器件(如EP2C35),也可采用外置双口RAM器件(如IDT7312)实现。FPGA内部各模块通过VHDL语言和ALTERA提供参数化模块实现。3.4MCU模块设计本设计中单片机采用采用了Silicon Labs公司推出增强型51单片机C8051F360,解决了传统单片机系统的各种问题。该处理器采用流水结构,提供100MPIS处理能力,与8051指令兼容,增加了1组双周期1616乘加器(MAC)、1个精度2 的内部振荡器、32KB FlashROM、1280B的外部RAM、可配置式的IO引脚、10位200ksps SAR AD转换器、10位DA转换器、JTAG非侵入式在系统调试模块和各种通讯外设(UART、SPI和SMBus)。与传统的51单片机相比,具有速度快、外围接口多、成本低、调试方便、可靠性高的特点 。由于C8051F360单片机内部集成了众多功能模块,几乎不需要外部电路就能构成最小系统,因此MCU模块仅设计了一片CPLD器件(EPM3064),主要实现键盘接口、LCD接口及地址译码等。CPLD的内部逻辑用VHDL语言和ALERTA的参数化模块实现,采用CPLD使电路具有很大的灵活性 。 图3.3 信号采集与存储控制电路系统图3.5数据采集通道总体原理图根据上述各部分的电路设计,可以得到如图3.5所示的数据采集通道原理图。运算放大器单位增益带宽为150MHz,当放大器的增益为10时,带宽为15MHz,不但满足设计要求,而且留有余地。ADS930的数据引脚、时钟引脚与FPGA I/O引脚直接相连。3.6硬件电路总体设计在前面设计的基础上,可以得到附录1的硬件电路总体原理图。单片机与FPGA的连线除了并行总线外,还包括启动信号START和数据采集结束信号EOC。START信号从单片机的P3.2引脚发出,送到FPGA的I/O引脚(第60脚),EOC信号从FPGA的I/O引脚(第44脚)发出,送到单片机的外部引脚中断引脚INT1。高速数据采集系统的显示器件采用LCD模块LCD12864.LCD模块的数据线D0D7与单片机的数据总线相连,RS、RW和E等控制信号由FPGA内部逻辑电路产生,因此LCD模块的E、RS和RW信号线与FPGA的I/O引脚相连。高速数据采集系统只需要一只用于启动数据采集的按键。对于这种简单的按键,可以采用两种设计方案:一种是将按键直接与单片机的I/O引脚相连,通过软件定时检测按键是否闭合,并进行消抖处理,如键有效,则执行键处理程序。该方案的不足之处是需要单片机较多的软件开销。另一种方案是将按键与FPGA的I/O引脚相连,然后在FPGA内部设置一消抖计数器,消抖计数器输出作为外部中断信号与单片机的INT0相连。单片机在INT0中断服务程序中实现按键处理。显然,该方案有效地简化了单片机软件设计。图3.5 数据采集通道原理图4.软件设计4.1 信号采集与存储控制电路工作原理双口RAM作为高速缓存,是信号采集与存储控制电路的核心部件。双口RAM模块一方面存储A/D转换产生的数据,另一方面向单片机传输数据,因此,双口RAM的一个端口(读端口)与单片机并行总线相连,另一端口(写端口)直接与高速A/D的数据相连。由于高速数据采集系统每次只需要采集128字节的数据,因此,双口RAM的容量设为128*8即可。在双口RAM和单片机的接口中,地址所存模块用于锁存单片机并行总线低8位地址,或非门将片选信号/CS(来自地址译码器)和写信号/WR相或非得到高电平有效的双口RAM读使能信号。高速A/D转换器ADS930是在输入时钟信号的控制下进行A/D转换的。ADS930要求它的的输入时钟信号有尽量小的抖动,50%的占空比,输入时钟的边沿越陡越好。在所示原理框图中,ADS930的时钟信号通过参考时钟CLK0分频得到。在FPGA系统中,CLK0可以是直接由外部有源晶振产生的时钟信号,也可以是通过内部PLL产生的时钟信号。为了将高速A/D输出的数字量依次存入双口RAM中,专门设计了一地址计数器模块。地址计数器模块实际上是一个7位二进制计数器,其输出作为双口RAM写端口的地址。地址计数器和高速A/D转换器采用同一时钟信号,这样地址的变化与A/D转换器输出数据变化同步。将高速A/D转化器时钟ADCCLK反相后作为双口RAM写端口的写使能信号,保证了写使能信号有效时数据是稳定的。地址计数器除了产生地址信号之外,还有两根与单片机连接的信号线START和EOC。START信号由单片机I/O引脚发出。当START信号为低电平时,地址计数器清零,恢复为高电平后,地址计数器从0开始计数,计到127时停止计数,并发出由高到低的EOC信号作为单片机的外部中断请求信号。进行一次数据采集的过程是,单片机发出START信号(负脉冲有效),地址计数器从0开始计数,在计数过程中,A/D转换数据被存入双口RAM。当计数器计到127时停止计数,发出EOC信号作为单片机的外部中断信号,单片机通过执行中断服务程序从双口RAM中读入数据。整个数据采集过程的时序关系如图4.1所示。图4.1 触发控制模块各信号时序关系 4.2 信号采集与存储控制电路的FPGA实现如图4.2所示为由FPGA实现的信号采集与存储控制电路顶层原理图。在本设计中,双口RAM的存储容量为128*8,因此,lpm-ram-dp的数据宽度选为8位,地址总线宽度选为7位。lpm-ram-dp的数据输出端q7.0无三态输出功能,为了能够与单片机数据总线相连,数据输出需要加一个三态门TS8,以实现输出三态控制。利用单片机系统的片选信号和读信号/RD实现对三态门的选通。需要注意,由于加了三态门控制,lpm-ram-dp中已不需要读使能信号rden,可在对lpm-ram-dp参数设置时取消rden信号,等效于rden始终为高电平。lpm-ram-dp的端口采用寄存器输入和输出,为同步型存储器,使用时必须采用一同步时钟clk0实现地址、数据等信息的输入输出。lpm-ram-dp没有BUSY端,当写地址和读地址相同时,数据为冲突,读写不能正常工作,实际使用时应避免出现这种情况。图4.2信号采集与存储控制电路顶层图4.3 原理图中的各底层模块采用VHDL语言编写4.3.1三态缓冲器模块TS8三态缓冲器电路顶层图如图4.3.1 图4.3.1三态缓冲器源代码如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity ts8 is port( en: in std_logic; di: in std_logic_vector(7 downto 0); do: out std_logic_vector(7 downto 0) ); end ts8; architecture one of ts8 is begin process(en,di) begin if en=1 then do=di; else do=ZZZZZZZZ; END IF; END PROCESS; END;4.3.2分频器模块fredivid分频器电路顶层图如图4.3.2 图4.3.2 分频器源代码如下:LIBRARY IEEE; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fredivid is port(clkin:in std_logic; clkout: out std_logic ); end fredivid; architecture one of fredivid is signal q:std_logic_vector(2 downto 0); begin process(clkin) begin if(clkinevent and clkin=1) then if(q=11)then q=00; else q=q+1; end if; end if; end process; process(q) begin if(q(1)=1) then clkout=1; else clkout=0; end if; end process; end; 4.3.3地址锁存器模块dlatch8地址锁存器电路顶层图如图4.3.3 图4.3.3 地址锁存器源代码如下:library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity dlatch8 is port( cp: in std_logic; d: in std_logic_vector(7 downto 0); q: out std_logic_vector(7 downto 0) ); end dlatch8; architecture one of dlatch8 is begin process(cp,d) begin if(cp=1) then q=d; end if; end process; end;4.3.4地址计数器模块addrcount地址计数器电路顶层图如图4.3.4 图4.3.4地址计数器源代码如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity addrcount is port(clr,clk:in std_logic; eoc:out std_logic; q:buffer std_logic_vector(6 downto 0);end;architecture one of addrcount is begin process(clr,clk) begin if(clkevent and clk=1) then if clr=0 then q=0000000; elsif(q=1111111) then q=1111111; else q=q+1; end if; end if;end process; process(q) begin if(q=1111111) then eoc=0; else eoc=1; end if; end process;end one; 4.3.5双口RAM模块lpm_ram_dp 双口RAM电路顶层图如图4.3.5 图4.3.5 双口RAM源代码如下:LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY altera_mf; USE altera_mf.all; ENTITY lpm_ram_dp IS PORT ( clock: IN STD_LOGIC ; data: IN STD_LOGIC_VECTOR (7 DOWNTO 0); rdaddress: IN STD_LOGIC_VECTOR (7 DOWNTO 0); wraddress: IN STD_LOGIC_VECTOR (7 DOWNTO 0); wren: IN STD_LOGIC := 1; q: OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ); END lpm_ram_dp; ARCHITECTURE SYN OF lpm_ram_dp IS SIGNAL sub_wire0: STD_LOGIC_VECTOR (7 DOWNTO 0); COMPONENT altsyncram GENERIC ( address_aclr_a: STRING; address_aclr_b: STRING; address_reg_b: STRING; indata_aclr_a: STRING; intended_device_family: STRING; lpm_type: STRING; numwords_a: NATURAL; numwords_b: NATURAL; operation_mode: STRING; outdata_aclr_b: STRING; outdata_reg_b: STRING; power_up_uninitialized: STRING; read_during_write_mode_mixed_ports: STRING; widthad_a: NATURAL; widthad_b: NATURAL; width_a: NATURAL; width_b: NATURAL; width_byteena_a: NATURAL; wrcontrol_aclr_a: STRING ); PORT ( wren_a: IN STD_LOGIC ; clock0: IN STD_LOGIC ; address_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0); address_b: IN STD_LOGIC_VECTOR (7 DOWNTO 0); q_b: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); data_a: IN STD_LOGIC_VECTOR (7 DOWNTO 0) ); END COMPONENT; BEGIN q NONE, address_aclr_b = NONE, address_reg_b = CLOCK0, indata_aclr_a = NONE, intended_device_family = Cyclone, lpm_type = altsyncram, numwords_a = 256, numwords_b = 256, operation_mode = DUAL_PORT, outdata_aclr_b = NONE, outdata_reg_b = CLOCK0, power_up_uninitialized = FALSE, read_during_write_mode_mixed_ports = DONT_CARE, widthad_a = 8, widthad_b = 8, width_a = 8, width_b = 8, width_byteena_a = 1, wrcontrol_aclr_a = NONE ) PORT MAP ( wren_a = wren, clock0 = clock, address_a = wraddress, address_b = rdaddress, data_a = data, q_b = sub_wire0 ); END SYN; 4.4 数据显示模块设计根据要求,每一次数据采集通过按键来启动。采集完128点数据以后,数据采集单元向单片机发出中断请求,单片机通过中断服务程序从双口RAM中读入128点采集数据;将读入的128点采集数据存放在单片机高128字节内部RAM中;对128字节数据进行处理,在LCD上显示与采集数据对应的波形。根据数据采集的工作过程,高速数据采集系统控制软件分为主程序、INT0中断服务程序、INT1中断服务程序三部分。4.4.1 主程序主要完成C8051F360单片机内部资源初始化、在LCD上显示采集数据的波形,其主程序流程图如图4.4.1所示。 图4.4.1 主程序流程图4.4.2 INT0中断服务程序 INT0中断服务程序的功能是读入键值,执行功能。本数据采集只定义了一个功能键KEY0,当该键有效时,P3.2引脚产生一个负脉冲。4.4.3 INT1中断服务程序 当数据采集系统完成128点数据采集后,将启动一次外部中断INT1。INT1中断服务程序的功能就是从FPGA的双口RAM中读取128字节的采集的数据,并将其存放在单片机内部RAM的高128字节(地址80HFFH)。读取完毕以后,设置一标志。源程序如下: INT1: PUSH A PUSH PSW PUSH DPH PUSH DPL MOV DPTR,#CS1 MOV R7,#80H MOV R0,#80H INTT1: MOVX A,DPTR MOV R0,A INC R0 INC DPTR DJNZ R7,INTT1 SETB XSBZ POP DPL POP DPH POP PSW POP A RETI4.5软件仿真4.5.1三态缓冲器模块TS8 图4.5.1三态缓冲器仿真图 三态缓冲器模块TS8功能:lpm-ram-dp的数据输出端q7.0无三态输出功能,为了能够与单片机数据总线相连,数据输出需要加一个三态门TS8,以实现输出三态控制。4.5.2分频器模块fredivid图4.5.2 分频器仿真图分频器模块fredivid功能:保证地址计数器和高速A/D转换器采用同一时钟信号,使地址的变化与A/D转换器输出数据的变化同步。4.5.3地址锁存器模块dlatch8图4.5.3地址锁存器仿真图地址锁存器模块dlatch8功能:用于锁存单片机并行总线低8位地址。4.5.4地址计数器模块addrcount 4.5.4 地址计数器仿真图地址计数器模块addrcount功能:一个7位二进制计数器,其输出作为双口RAM写端口的地址。5.系统调试高速数据采集系统是硬件和软件相结合,单片机系统、数字系统和模拟系统相结合的综合电子系统。调试时应“硬件和软件相结合”、“各子系统单独调试和联合调试相结合”的原则。从硬件上高速数据采集系统由三部分组成:单片机子系统、FPGA子系统以及高速数据采集子系统。5.1 单片机子系统调试对单片机子系统来说,主要调试其软件功能是否正常。由于高速数据采集系统的软件比较简单,主要调试LCD显示功能是否正常。为了测试LCD能否正确显示波形曲线,可在单片机数据缓存冲区设定128字节数据,运行波形显示程序,观察LCD上显示的曲线是否正确。5.2 FPGA子系统调试对FPGA子系统的调试,通过Quartus软件进行输入、编译、引脚锁定,下载到FPGA中。下载成功以后,可用示波器作以下测试:按单片机K0键,应在单片机的INT1脚检测到负脉冲,同时在ADCCLK引脚观测到时钟脉冲,基本上可以认为FPGA内部设计功能正常。5.3 高速A/D模块的调试高速A/D转换模块主要测试信号调理电路和A/D转换器工作是否正常。信号调理电路输入端接入由信号产生的峰峰值为0.5V、频率为200kHz的正弦波,使用示波器观察信号调理电路的输出波形。将A/D转换器的/OE脚接地,CLK引脚加时钟信号,用示波器观察A/D转换器数据输出端,如有信号输出,基本可判定A/D转换器工作正常。 6 总结基于FPGA与单片机结合的高速数据采集系统性能稳定性、实时性得到保证,摆脱了单纯用由单片机为核心的数据采集系统时的速度瓶颈,极大地提高了数据采集的速度。整个系统具有速度高、实时性好、抗干扰能力强、性价比高等特点。该系统在实际应用中得到了良好效果,对35MHz正弦信号进行20MHz采样获得的数据,然后通过DA按20KHz速率还原(即还原时频率为源信号的11000),其波形形态、线性度良好,误差在量化误差范围内。致谢值此论文论文完成之际,首先要感谢我的指导老师闫改珍老师,她对我的论文倾注了大量的精力并提出了宝贵的意见。从选定论文题目那天起,便开始了搜索和查找资料。在这段时间我看书,找资料,咨询老师和同学们一起讨论等等,虽然辛苦,但最终完成了这篇论文,心里还是很高兴的。闫老师治学认真而严谨,感谢您从研究开始一路指导至本论文的完成,从论文题目的选定到论文写作的指导,经由您悉心的把关,再经思考后的领悟,由衷感谢您在论文倾注的大量心血。感谢授课老师客商对我们的指导,你们丰富的授课内容拓宽了我的视野,让我能更顺利的完成这篇论文;感谢我的同学们,你们不仅让我感受到了友情的力量,也让我感觉到了生活的愉悦。感谢帮助过我的同学,在我论文的完成过程中给予了大量宝贵参考性意见。感谢所有帮助和关心我的朋友。四年紧张激烈的大学生活即将画上句号,在此我要对四年来给予我支持和帮助的老师、同学表示我最诚挚的感谢!这些时光会慢慢沉淀下来,但无论何时,我想到这段岁月里,都如同是看到一枚珍藏已久的夹在书里发黄的书签,永远都是那么璀璨。感谢在课题研究和论文写作过程中所阅读参考文献的作者,前辈们的工作给了我很大的启发!感谢审阅本论文的老师,您辛苦了!最后在这收获果实的时刻,祝园丁们工作顺利,祝伙伴们梦想成真,祝亲人们身体健康!参考文献1马明建,周长程数据采集与处理技术M西安:西安交通大学出版社,20012ADS930 Series Datashcethttp:wwwic37COrn20083VCA8 1 0 High Gain Adjust Range,Wideband,VoltageControlled AmplifierTexas Instruments Incorporated20044徐光辉等基于FPGA的嵌入式开发与应用M北京:电子工业出版社20065张俊谟SoC单片机原理与应用一基于C8051F系列M北京:北京航空航天出版社20076EDA先锋工作室,吴继华,王诚Altera FPGACPLD设计(高级篇)人民邮电出版社200767任艳颖,王彬IC设计基础西安电子科技大学出版社200448马明建数据采集与处理技术西安交通大学出版社,20059祝常红数据采集与处理技术 电子工业出版社,2008310周林数据采集与分析技术西安电子科技大学出版社,2005711黄智伟. FPGA 系统设计与实践M . 北京:电子工业出版社,2005.12 潘松,王国栋. V HDL 实用教程M . 成都:电子科技大学出版社,2000.13 林敏,方颖立. V HDL 数字系统设计与高层次综合M . 北京:电子工业出版社,2002.14 高书莉,罗朝霞. 可编程逻辑设计技术及其应用M .北京:人民邮电出版社,2001.15 马U , 王丹利,王丽英. CPLD/ FPGA 可
展开阅读全文