毕业设计 基于单片机的高速数据采集系统设计

发布时间:2012-03-15 19:43:47

1.绪论 1

1.1 课题研究的意义 1

1.2 数据采集技术的发展历程和现状 1

1.3 本文的研究内容 2

1.4 系统设计涉及的理论分析 2

2.系统设计 4

2.1方案选择 4

2.2系统框图 5

3.单元电路设计 6

3.1信号调理电路 6

3.2高速A/D模块 7

3.3 FPGA模块设计 8

3.4MCU模块设计 8

3.5数据采集通道总体原理图 9

3.6硬件电路总体设计 9

4.软件设计 10

4.1 信号采集与存储控制电路工作原理 10

4.2 信号采集与存储控制电路的FPGA实现 11

4.3 原理图中的各底层模块采用VHDL语言编写 12

4.3.1三态缓冲器模块TS8 12

4.3.2分频器模块fredivid 13

4.3.3地址锁存器模块dlatch8 14

4.3.4地址计数器模块addrcount 15

4.3.5双口RAM模块lpm_ram_dp 16

4.4 数据显示模块设计 18

4.4.1 主程序 18

4.4.2 INT0中断服务程序 19

4.4.3 INT1中断服务程序 19

4.5软件仿真 20

4.5.1三态缓冲器模块TS8 20

4.5.2分频器模块fredivid 20

4.5.3地址锁存器模块dlatch8 21

4.5.4地址计数器模块addrcount 21

5.系统调试 21

5.1 单片机子系统调试 21

5.2 FPGA子系统调试 22

5.3 高速A/D模块的调试 22

6 总结 22

致谢 22

参考文献 23

附录 25

高速数据采集系统设计

摘要:随着数字技术的飞速发展,高速数据采集系统也迅速地得到了广泛的应用。在生产过程中,应用这一系统可以对生产现场的工艺参数进行采集、监视和记录,为提高生产质量,降低成本提供了信息和手段。在科学研究中,应用数据采集系统可以获取大量的动态数据,是研究瞬间物理过程的有力工具,为科学活动提供了重要的手段。而当前我国对高速数据采集系统的研究开发都处于起步阶段,因此,开发出高速数据采集系统就显得尤为重要了。本文针对高速数据采集系统中的实时性、采集速率等问题提出了一种结合FPGA与单片机的低成本高速数据采集系统设计方案。该系统以高速SOC单片机C8051F360FPGA EP2C8T144为核心,运用模块化设计方法,实现软硬件设计,具有一定的实用价值。

关键词:C8051F360EP2C8T144;ADC;数据采集;高速

1.绪论

1.1 课题研究的意义

随着信息技术的飞速发展,各种数据的实时采集和处理在现代工业控制中已成为必不可少的。这就为我们的设计提出了两个方面的要求:一方面,要求接口简单灵活且有较高的数据传输率;另一方面,由于数据量通常都较大,要求主机能够对实时数据做出快速响应,并及时进行分析和处理。

FPGA与单片机相比,有着频率高,内部延时小,内部存储容量大等优点,比单片机更适应与高速数据采集的场合。比如在某些高冲击、高振荡场合下,需要对冲击过程的加速度数据进行回收,包括实时采集、存储以及事后回读分析。在这样的环境下,要求数据回收系统具有采集的高速、实时性;存储的及时、正确性。FPGA(现场可编程逻辑门阵列)在高速数据采集方面具有单片机和DSP所不具备的优点。FPGA所要完成的功能完全由内部可编程硬件电路实现,具有并行执行、速度快、多功能、低功耗、可现场反复编程等特点。使用FPGA构成数据采集系统还可以减化外围控制电路,使系统更加简洁有效。

1.2 数据采集技术的发展历程和现状

在数字技术日新月异的今天,数据采集技术的重要性是十分显著的。它是数字世界和外部物理世界连接的桥梁。而随着现代工业和科学技术的发展,对数据采集技术的要求日益提高,在雷达、声纳、图像处理、语音识别、通信、信号测试等科研实践领域中,都需要高精度,高数据率的数据采集系统。它的关键技术为高速高精度的ADC技术,高数据率的存储和缓存技术以及系统高可靠性保证等。

通过数据采集技术,科研人员在实验现场可以根据需要实时记录原始数据,用于实验室后期的分析和处理,对工程实践和理论分析探索具有重大意义。正是由于目前数据采集技术广泛应用在科研实践和工业生产中的各个领域,当前国外对采集技术的研究和发展比较成熟。按通道数分有单通道的、双通道的、多通道的(多达上百通道);按采样率分可从几kHz到高达几个GHz;按分辨率分有8位、10位、12位、14位还有16位。在一些高端的示波器,频谱仪等测试仪器中,其采样率可达几个GHz,甚至几十个GHz。而国内由于发展时间短,芯片技术等一些方面的限制,目前没有高水平的采集器出现。现在从高校到研究所到公司对采集器的需求越来越多,性能要求也越来越高。这种情况给我们研发和设计高速数据采集系统提供了很多机遇。

1.3 本文的研究内容

设计一个高速数据采集系统,输入模拟信号为正弦信号,频率为200kHzVp-p小于等于0.5V。每次数据采集以20MHz的固定采样频率连续采集128点数据,采集完毕以后,用LCD模块回放显示采集信号波形。该系统具有实时采集、存储以及传输功能。

1)硬件设计:硬件部分包括FPGA最小系统电路、数据的实时采集电路、数据缓存部分以及与单片机通信接口部分电路等。

2)软件设计:通过编写程序,主要实现实时采集(A/D采样)功能、数据缓存、与单片机进行通信等功能。

3)仿真结果及分析:主要是针对实时采集部分、数据缓存部分、与PC机通信部分进行时序仿真和功能仿真,根据仿真结果对设计进行分析。

1.4 系统设计涉及的理论分析

1.4.1采样理论

根据奈奎斯特定理,在进行模拟/数字信号的转换过程中,只有采样频率fs大于被采样信号中最高频率fmax2倍时,才能保证数字信号完整地保留了原始信号中的信息,实际应用中必须保证采样频率为信号最高频率的510倍。对于高频信号(f>3MHz),则必须达到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)必须小于或等于转换速率。因此有人习惯上将转换速率在数值上等同于采样速率也是可以接受的。常用单位是kspsMsps,表示每秒采样千/百万次。

(3)量化误差(Quantizing Error)由于AD的有限分辩率而引起的误差,即有限分辩率AD的阶梯状转移特性曲线与无限分辩率AD(理想AD)的转移特性曲线(直线)之间的最大偏差。通常是1个或半个最小数字量的模拟变化量,表示为1LSB12LSB

(4)偏移误差(Offset Error)输入信号为零时输出信号不为零的值,可外接电位器调至最小。

(5)满刻度误差(Full Scale Error)满度输出时对应的输入信号与理想输入信号值之差。

(6)线性度(Linearity)实际转换器的转移函数与理想直线的最大偏移,不包括以上三种误差。

1.4.3现场可编程门阵列(FPGA)基础知识

现场可编程门阵列(FiledProgrammable Gate),简称FPGA,是在CPLD的基础上发展起来的高性能可编程器件。其集成度很高,密度从数万门系统到数千万门系统不等,可以完成及其复杂的时序和组合逻辑电路功能,适用于高速,高密度的高端数字逻辑设计领域。

FPGA产品一般分为两种类型,一类是基于乘积项(ProductTerm)技术,用电可擦除可编程只读存储器(EEPROM)或闪存(Flash)制造,多用于5000门一下的小规模设计。另一类基于查找表(LookUp table)技术,用静态存取存储器(SRAM)工艺制造,密度高,触发器多,多用于10000 门以上的大规模设计。采用SRAM工艺制造的FPGA,掉电后数据会消失,因此,调试期间可以用下载电缆配置FPGA器件,调试完成后,需要将数据固化到一个专用的EEPROM中,上电后,由这片配置EEPROM先对FPGA加载数据,十几个毫秒后,FPGA就可正常工作。

FPGA的基本组成部分有可编程输入输出单元,基本可编程逻辑单元,嵌入式RAM,丰富的布线资源,底层嵌入功能单元,内嵌专用硬核等。

(1)可编程输入/输出单元

输入输出单元(InputOutput)简称YO单元,它们是芯片与外界电路的接口部分,完成不同的电气特性下对输入/输出信号的驱动和匹配需求。为了使FPGA有更灵活的应用,目前大多数FPGAIO单元被设计为可编程模式,即通过软件的灵活配置,可以适配不同的电气标准与YO物理特性;可以调整匹配阻抗特性,上下拉电阻;可以调整输出驱动电流的大小等。

(2)基本可编程逻辑单元

基本可编程逻辑单元是可编程逻辑的主体,可以根据设计灵活的改变其内部连接和配置,完成不同的逻辑功能。FPGA一般是基于SRAM工艺的,其基本可编程逻辑单元几乎都是由查找表(LUTLook-Up table)和寄存器(Register)组成的。查找表一般完成纯组合逻辑功能。组合逻辑的输入作为地址线连接到查找表,查找表中已经事先写入了所有可能的逻辑结果,通过地址查找到相应的逻辑。寄存器用于完成同步时序逻辑设计。

(3)嵌入式RAM

目前大多数FPGA内部都内嵌了块RAM(Block RAM)FPGA内部嵌入可编程RAM模块,大大的扩展了FPGA的应用范围和使用灵活性。FPGA内部的RAM可以灵活配置为单端口RAM,双端口RAMFIFO等常用存储结构。通过对RAM赋予初值,还可以实现ROM的功能。

(4)丰富的布线资源

布线资源连通FPGA内部所有单元,连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA内部有着非常丰富的布线资源,这些布线资源根据工艺,长度,宽度和分布位置的不同而被划分为不同的等级。有一些是全局性的布线资源,用于完成器件内部的全局时钟和全局复位/置位的布线;一些叫做长线资源,用作完成器件Bank(分区)间的一些高速信号和一些第二全局时钟信号的布线;还有一些叫做短线资源,用以完成基本逻辑单元之间的逻辑互联和布线等。在实现过程中,设计者一般不用直接选择布线资源,而是由布局布线器自动根据输入的逻辑网表的拓扑结构和约束条件选择可用的布线资源连通所用的底层单元模块,所以往往容易比忽略。其实布线资源的优化与使用和设计的实现结果有直接关系。

(5)底层嵌入功能单元

随着FPGA的发展,PLLDLLDSPCPU等模块越来越多的被嵌入到FPGA的内部,以满足不同场合的需要。

(6)内嵌专用硬核

这里的内嵌专用硬核与前面的“底层嵌入单元”是有区别的,这里讲的内嵌专用硬核主要是指那些通用性相对较弱,不是所有FPGA器件都包含硬核。

FPGA的主要器件供应商有XilinxAlteraLatticActelAtmel等。

2.系统设计

2.1方案选择

随着数据采集对速度性能指标越来越高,高速数据采集系统在自动控制、电气测量、地质物探、航空航天等工程实践中得到了十分广泛的应用。高速数据采集系统一般分为数据采集和数据处理两部分。在数据采集时,必须以很高的速度采集数据,但在数据处理时并不需要以同样的速度来进行。因此,高速数据采集需要有一个数据缓存单元,现将采集的数据有效地存储,然后根据系统需求进行数据处理。

传统的数据采集系统通常采用单片机直接控制A/D转换器完成数据采集。用单片机控制A/D转换器,一般要通过启动A/D转换、读取A/D转换值、将数据存入存储器、修改存储器地址指针、判断数据采集是否完成等过程。从本质上来说,基于单片机的数据采集系统是通过软件来实现特定功能的。在许多情况下,采用软件解决方案其速度限制是很难克服的。MCS-51单片机大多数指令的执行时间需要1~2个机器周期,完成一次A/D转换大约需要几十微秒。即使对于单片机机器周期、时钟频率可达100MHzC8051F360单片机,如果用来控制高速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就可以调节放大器的增益。如果R21kRP110k,则增益的可调范围为0~-10

来自前置放大器的是双极性的交流信号,而A/D对输入信号的要求通常是单极性的。为了适合A/D的要求,本放大器中加了电平移位电路。电平位移电路有RP2组成,C1用于滤除高频噪声。调节Rp2就可以改变Vos的值,不过注意,Vos的值要经过1+RP1/R2倍的放大才送到输出端,因此,调节放大倍数的同时也会改变放大器输出端的直流偏移量。

上述放大器中电位器RP1RP2需手动调节,如果采用数控电位器代替,就可以得到程控放大器,这在自动化仪表设计非常重要。

为了满足模拟输入信号的要求,整个信号调理电路应该有足够的带宽。为了防止信号中的无用分量(如高频干扰信号)也经过通道被采样,信号在进入A/ D 之前要进行抗混叠低通滤波。为了简化电路,本设计中抗混叠滤波器采用了RC低通滤波,如图中所示R3C2构成。低通滤波器的截止频率计算公式如下:

f =1/(2pi*R3*C2)

3.1.1 射极跟随器

3.1.2增益可调放大器

3.2高速A/D模块

首先,A/D的转换速率取决于模拟信号的频率范围,根据设计题目要求,A/D转换速率应大于10MHz为留有余量选择30MHz采样频率的ADC器件。

其次,根据A/D转换原理,转换过程中存在量化误差。量化误差取决于量化位数,位数越多量化误差越小。题目对模拟信号的转换精度没有特别的要求,因此,选用常见的8A/D转换器。

最后,FPGA3V器件,故优先选用3V工作电压下的ADC器件,以简化电源设计和电平匹配。

因此,我们采样了BURR—BROWN公司的ADS930器件,该器件为830MHz采样AD转换器,具有单端/差动输入、内部基准、高速宽跟踪/捕捉的高速流水ADC器件。工作电压3V5V,单端输入电压1V 2V

ADC的模拟输入采用单端输入、交流耦合方式,此时其IN(24)引脚与其内部参考电压的分压输出端CM(26)引脚相连,以保证15V的偏置电压。数字端主要包括数据输出DOD7,时钟CLK和数据输出使能/OE等,与FPGA器件相连,根据时序受FPGA控制。

3.3 FPGA模块设计

在高速数据采集方面,FPGA具有单片机和DSP无法比拟的优势,FPGA的时钟频率高,内部延时小,而且速度快、效率高、组成形式灵活。FPGA内的嵌入式阵列块(EAB)可作为存储器使用,构成双口RAMFIFO。设计中使用了Altera公司EP2C8T144,内含8256个基本逻辑单元(LE)18个嵌入式可编程RAM模块可灵活配置成单口RAM、双口RAMFIFO等,满足大部分数字系统的设计要求。系统图如图3.3所示,其中与单片机接口的信号包括数据总线、地址锁存ALE、片选CS2、读使能RDAD启动控制START和批量转换结束应答EOC等,与ADS930接口的信号包括ADC8位数据、ADC读使能ADC OEADC时钟等。控制操作时通过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,解决了传统单片机系统的各种问题。

由于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和数据采集结束信号EOCSTART信号从单片机的P3.2引脚发出,送到FPGAI/O引脚(第60脚),EOC信号从FPGAI/O引脚(第44脚)发出,送到单片机的外部引脚中断引脚INT1

高速数据采集系统的显示器件采用LCD模块LCD12864.LCD模块的数据线D0~D7与单片机的数据总线相连,RSRWE等控制信号由FPGA内部逻辑电路产生,因此LCD模块的ERSRW信号线与FPGAI/O引脚相连。高速数据采集系统只需要一只用于启动数据采集的按键。对于这种简单的按键,可以采用两种设计方案:一种是将按键直接与单片机的I/O引脚相连,通过软件定时检测按键是否闭合,并进行消抖处理,如键有效,则执行键处理程序。该方案的不足之处是需要单片机较多的软件开销。另一种方案是将按键与FPGAI/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写端口的写使能信号,保证了写使能信号有效时数据是稳定的。地址计数器除了产生地址信号之外,还有两根与单片机连接的信号线STARTEOCSTART信号由单片机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的数据输出端q[7..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(clkin'event 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(clk'event 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<= sub_wire0(7 DOWNTO 0);

altsyncram_component : altsyncram

GENERIC MAP (

address_aclr_a => "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点数据采集后,将启动一次外部中断INT1INT1中断服务程序的功能就是从FPGA的双口RAM中读取128字节的采集的数据,并将其存放在单片机内部RAM的高128字节(地址80H~FFH)。读取完毕以后,设置一标志。

源程序如下:

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

RETI

4.5软件仿真

4.5.1三态缓冲器模块TS8

4.5.1三态缓冲器仿真图

三态缓冲器模块TS8功能:lpm-ram-dp的数据输出端q[7..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子系统的调试,通过QuartusII软件进行输入、编译、引脚锁定,下载到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与单片机结合的高速数据采集系统性能稳定性、实时性得到保证,摆脱了单纯用由单片机为核心的数据采集系统时的速度瓶颈,极大地提高了数据采集的速度。整个系统具有速度高、实时性好、抗干扰能力强、性价比高等特点。该系统在实际应用中得到了良好效果,对3—5MHz正弦信号进行20MHz采样获得的数据,然后通过DA20KHz速率还原(即还原时频率为源信号的11000),其波形形态、线性度良好,误差在量化误差范围内。

致谢

值此论文论文完成之际,首先要感谢我的指导老师闫改珍老师,她对我的论文倾注了大量的精力并提出了宝贵的意见。从选定论文题目那天起,便开始了搜索和查找资料。在这段时间我看书,找资料,咨询老师和同学们一起讨论等等,虽然辛苦,但最终完成了这篇论文,心里还是很高兴的。

闫老师治学认真而严谨,感谢您从研究开始一路指导至本论文的完成,从论文题目的选定到论文写作的指导,经由您悉心的把关,再经思考后的领悟,由衷感谢您在论文倾注的大量心血。

感谢授课老师客商对我们的指导,你们丰富的授课内容拓宽了我的视野,让我能更顺利的完成这篇论文;感谢我的同学们,你们不仅让我感受到了友情的力量,也让我感觉到了生活的愉悦。感谢帮助过我的同学,在我论文的完成过程中给予了大量宝贵参考性意见。感谢所有帮助和关心我的朋友。

四年紧张激烈的大学生活即将画上句号,在此我要对四年来给予我支持和帮助的老师、同学表示我最诚挚的感谢!这些时光会慢慢沉淀下来,但无论何时,我想到这段岁月里,都如同是看到一枚珍藏已久的夹在书里发黄的书签,永远都是那么璀璨。

感谢在课题研究和论文写作过程中所阅读参考文献的作者,前辈们的工作给了我很大的启发!感谢审阅本论文的老师,您辛苦了!

最后在这收获果实的时刻,祝园丁们工作顺利,祝伙伴们梦想成真,祝亲人们身体健康!

参考文献

[1]马明建,周长程.数据采集与处理技术[M].西安:西安交通大学出版社,2001

[2]ADS930 Series Datashcethttp://wwwic37COrn2008

[3]VCA8 1 0 High Gain Adjust RangeWidebandVoltage—Controlled AmplifierTexas Instruments Incorporated2004

[4]徐光辉等.基于FPGA的嵌入式开发与应用[M].北京:电子工业出版社.2006

[5]张俊谟.SoC单片机原理与应用一基于C8051F系列[M].北京:北京航空航天出版社.2007

[6]EDA先锋工作室,吴继华,王诚.Altera FPGACPLD设计(高级篇).人民邮电出版社20076

[7]任艳颖,王彬.IC设计基础.西安电子科技大学出版社20044

[8]马明建.数据采集与处理技术.西安交通大学出版社,2005

[9]祝常红.数据采集与处理技术. 电子工业出版社,20083

[10]周林.数据采集与分析技术.西安电子科技大学出版社,20057

[11]黄智伟. FPGA 系统设计与实践[M] . 北京:电子工业出版社,2005.

[12] 潘松,王国栋. V HDL 实用教程[M] . 成都:电子科技大学出版社,2000.

[13] 林敏,方颖立. V HDL 数字系统设计与高层次综合[M] . 北京:电子工业出版社,2002.

[14] 高书莉,罗朝霞. 可编程逻辑设计技术及其应用[M] .北京:人民邮电出版社,2001.

[15] U , 王丹利,王丽英. CPLD/ FPGA 可编程逻辑器件实用教程[M] . 北京:机械工业出版社,2006.

Design of High speed Data Acquisition System

AbstractWith the rapid development of digital technology,high—speed data acquisition systems quickly get a wide range of applicationsIn the production processthe data acquisition systems Can collect and monitor the produce process parameters on’site.So it provides the prerequisite for improving the quality of products and for reducing the costsIn scientific researchapplying the data acquisition system carl get a lot of dynamic datum which provides a powerful tool for me study in instantaneous physical process and the scientific activitiesHowever,nowadays the research and development of highspeed data acquisition system in onr country is still at the initial stageSodeveloping a high-speed data acquisition system is very important.The paper introduces a low -cost high-speed data collection system combining FPGA and single-chip MCU in which rea1-time and high -speed collection is achievedThe system with high -speed SOC MCU C8051F360 and FPGA EP2C8T144 as the core partsemploys modular design method and implements software and hardware design and thereforeis worthy of application

KeywordsC8051F360EP2C8T144ADCdata acquisitionhigh—speed

附录

ADS930

BURR-BROWN公司生产的8位、30MHz高速A/D转换器ADS930ADS930采用3~5V电源电压,流水线结构,内部含有采样保持其和参考电压源。ADS930内部结构及引脚图如图1示。

1 ADS930内部结构及引脚图

ADS930的引脚说明如表1所示。

1引脚说明

ADS内部含有参考电压源电路,为了正确地使用ADS930,有必要了解参考电压源的结构及使用方法。ADS930的参考电压源结构如图2所示。

2 参考电压源结构

ADS930有单端输入和差分输入两种工作方式。当反相电压输入端(24脚)与共模电压输出脚(26)相连时,ADS930就工作在单端输入方式,模拟输入电压的范围为1~2V单端输入方式时,输入电压和输出数字量的对应关系如表2所示。

2 输入电压和输出数字量的对应表

ADS930的时序如图3所示。从ADS930的工作时序可以看出,A/D转换是在外部时钟控制下工作的。从自动转换到有效数据输出有5个时钟周期的延迟。

3 ADS930的时序

毕业设计 基于单片机的高速数据采集系统设计

相关推荐