基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx

上传人:b****5 文档编号:3378745 上传时间:2022-11-22 格式:DOCX 页数:15 大小:525.92KB
下载 相关 举报
基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx_第1页
第1页 / 共15页
基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx_第2页
第2页 / 共15页
基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx_第3页
第3页 / 共15页
基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx_第4页
第4页 / 共15页
基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx

《基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx》由会员分享,可在线阅读,更多相关《基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx(15页珍藏版)》请在冰豆网上搜索。

基于ARM和FPGA的高速数据采集卡的设计与实现 1.docx

基于ARM和FPGA的高速数据采集卡的设计与实现1

清华大学

硕士毕业论文报告

 

课程名称:

嵌入式系统课程设计

专业班级:

应用电子技术09201班

******

******************************

完成时间:

2011年12月26日

报告成绩:

评阅意见:

 

评阅教师日期

 

第四章设计总结....................................................................................13

第一章系统设计方案和主要器件选型

1.1系统设计方案

整个系统是由前端模拟通道、触发电路、FPGA数据采集预处理、数据模拟输出和ARM数据处理显示五部分组成。

FPGA数据采集预处理分为A/D数据采集、触发控制、帧控制、SDRAM控制器和ARM数据交换五个部分,模拟数据经过A/D装换后在FPGA中缓冲,缓冲之后使用触发控制将采集到的数据分成512个数据点组成的数据帧,数据按照帧的顺序传输,经过SDRAM存储后,通过ARM与FPGA中的共享存储区传输给ARM。

具体的数据采集系统的硬件结构图如下图2-1所示:

图2-1数据采集卡硬件结构图

1.2ADC芯片选型

A/D转换器是整个采集系统的核心,系统前端模拟电压调理电路、FPGA数据采集和后端的采集控制部分都与A/D直接相关,A/D芯片的选择不但关系到系统设计的性能,而且直接决定了整板设计的难度。

1.3DA芯片选型

为了输出高性能的模拟信号,DAC采用采样率高达175M的高速DAC。

AD970X系列DAC针对低功耗特性进行了优化,同时仍保持出色的动态性能,适合用于手持便携式仪器等需要有效地合成宽带信号的场合。

AD9707精度高达14位,采样率为175MSPS,内部集成边沿触发式输入锁存器,1V温度补偿带隙基准电压源和自校准功能,使AD9707能提供真14位INL与DNL性能。

1.4FPGA芯片选型

在现代采集系统中FPGA往往被用做通信系统的中枢,负责了大量的数据采集和前期处理和控制工作,FPGA作为系统的中间级主芯片承担着承前启后的重大任务。

1.4.1FPGA的特点及选型

常见的FPGA一般由六部分组成,分别为可编程输入/输出单元、基本可编程逻辑单元、嵌入式块RAM、丰富的布线资源、底层嵌入功能单元和内嵌专用硬核等。

1.4.2FPGA的设计步骤

1.电路设计与输入2.功能仿真

3.综合优化4.综合后仿真

5.实现与布局布线6.时序仿真和验证

7.板级仿真与验证8.调试与加载配置

1.4.3FPGA核心电路设计

FPGA各系列的最小系统板的单元组成基本相同,仅具体电路中存在着差异。

一般可以把其组成分为七部分:

FPGA主芯片、PROM存储芯片、电源电路、全局时钟发生电路、JTAG接口电路、下载模式选择电路和接口引出插针。

以该最小系统板作为控制核心,外加所需的接口电路就可以实现各种设计。

1.5主控CPU选型

主控CPU相当与人的心脏,整个系统运行的快慢与它有直接关系,常见的嵌入式处理器有单片机、ARM、DSP等,它们都有各自的特点,运用的场合各有不同,设计的难度也不一样。

主控CPU的选择是一个综合的过程,在选择时它必须有以下特点:

1.CPU运算速度快,不能拖慢整个系统采集的效率。

2.CPU内嵌LCD控制器可以驱动TFT-LCD,利于降低系统设计难度。

3.所选处理器比较常见,在其他设计中有广泛应用,便于代码移植,简化设计。

4.基于此CPU的开发板购买方便,价格便宜,代码丰富。

第二章数据采集与触发电路设计

2.1前端采集电路设计

2.1.1AD前端调理电路

前端调理电路目的就是将被测信号调理到AD9480模拟输入的电压范围。

被测信号经过前端阻抗变换网络之后,进入后级运算放大器,后级选择高阻抗低噪声运算放大器ADA4817,输入阻抗高达500GΩ。

下图2-1为AD8351单端转差分的典型电路:

图2-1AD8351单端转差分的典型电路

下图2-2为AD9480功能模块图:

 

图2-2AD9480功能模块图

2.1.2FPGA数据采集

设计中使用FPGA内部的RAM来缓冲AD输出的数据,EP3C25内部的RAM资源总共有608Kbits,使用这些内部的RAM作为数据缓冲单元,既可以节约成本,又可以提高硬件采集的性能。

使用FPGA内部的RAM资源,设计中可以非常容易的构建前端数据缓冲所需要的双口RAM或者FIFO。

下图2-3为典型的双口RAM模块图。

2-3典型的双口RAM模块图

2.2触发电路与触发控制

为了保证采集数据的稳定,一般的数据采集系统中都会有触发电路,它能提供了一个稳定的触发相位点,使得重构的波形能够在上位机的显示屏上稳定显示,还保证我们能观测的感兴趣的波形。

2.2.1触发分析

触发的目的是同步,触发的过程是比较。

图2-4基本的触发结构图

2.2.2触发控制

典型的触发信号为比较器输出的脉冲信号,触发控制是根据触发脉冲的起始位置,采集起始位置之后的一帧数据,由于每一次触发信号产生时,采集的数据都是在一个固定的值,因此将每次触发后的512个数据点组合为一帧,在显示上就会出现一个稳定的数据波形。

整个控制和实现上述功能的过程就是触发控制。

2.4SDRAM控制器设计

2.4.1SDRAM控制器结构

图2-5SDRAM控制器系统结构

1.控制接口模块

图2-6接口模块的结构图

第三章各芯片间的数据传输与处理

3.1采集卡各芯片速度等级的划分和数据流向

按照整个系统各部分的速度,我们将系统简单的划分为三个速度等级,不管是程序设计还是PCB设计都要充分的考虑到各个速度等级的特点,才能设计出合理可靠的系统,具体划分情况如下图3-1所示:

图3-1系统速度等级划分图

为了提高采集、存储和显示的效率,根据各个芯片的特点,运用了下面几种处理方式来提高效率:

1.在FPGA中构建一个多缓冲单元的乒乓机制采集模块,提高FPGA采集的效率,并降低了中间级传输的速度,利于中间级的数据处理。

2.在中间级FPGA与后端ARM之间的通信中,使用DMA模式,大大提高了数据传输的速率,并解放了ARM,使其可以从容的进行数据处理和显示工作。

3.在ARM接收数据后对采集的数据帧进行控制,保证数据传输的可靠性和正确性。

3.2ARM与FPGA通信

在数据采集卡中ARM主要负责数据显示和数据分析,处理的速度处于MS级;而FPGA在系统中处于数据的高速采集和高速处理,处理的速度是ns级。

两个处理器的之间的数据传输属于典型的异步数据通信,它们之间通信的速度之间决定了系统处理数据的效率。

FPGA与ARM之间属于大量数据交换,以异步并行读取的方式为例介绍ARM与FPGA的通信,实际设计中使用DMA方式来实现ARM与FPGA之间的大数据量通信。

3.2.1ARM存储系统分析

S3C2410A存储控制器提供访问外部存储器所需要的存储器控制信号。

S3C2410A支持大、小端模式,将存储空间分为8个组(Bank),每组大小是128M,共计1GB,如图3-2所示。

3.3数据的模拟输出

3.3.1模拟输出电路设计

模拟输出部分是由AD9707、低电压异或门76VX86和运放ADA4899组成。

测试时可以通过跳线J1选择AD9707的工作模式,J1选择高电平时为PIN模式,低电平时为SPI模式,出现高电平脉冲时复位内部寄存器。

电路图中AD9707的输入时钟选择差分时钟,AD9707输出选择单端输出,正向输出端IOUTA与ADA4899的反相输入端相连,反向输出端IOUTB接地,内部基准电压源REFIO与ADA4899的同相输入端相连。

运算放大器ADA4899将AD9707单端输出的电流变化转换为电压变化,外部使用内部基准电压源时REFIO引脚需用一个0.1μF电容接地。

基本的硬件电路图如下图3-3所示:

 

图3-3AD9707基本外围电路

3.3.2AD9707内部寄存器配置

在AD9707测试之前必须按照外围电路的设计配置好AD9707工作的状态。

3.3.3使用ARM和FPGA分别配置AD9707

1.使用ARM配置AD9707内部寄存器

S3C2410具有两个SPI接口模块,每个模块分别具有两个8位移位寄存器用来接收和发送数据。

数据的接收(串行移入)和发送(串行移出)是同时进行的。

串行数据的速率由相应的寄存器设定。

其时序很简单,主要是在CLK的控制下,两个双向移位寄存器进行数据交换。

SPI接口发送数据的程序流程图如下图3-4所示:

图3-4SPI数据发送程序流程图

使用S3C2410的SPI端口0来配置AD9707内部寄存器的主程序如下:

voidSpi_MS_poll(void)

{

inti;

S16a[2]={0x0080,0x0200};

//地址0x00的数据为0x80;地址0x02的数据为0x00

for(i=0;i<2;i++)//通过两次赋值

{

SPI_Port_Init(0);//SPI端口初始化

rSPPRE0=0x0;//设置波特率SCLK为20M

rSPCON0=(0<<5)|(1<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);

//设置SPI端口为polling模式,时钟使能,SPI为主控模式

rSPPIN0=(0<<2)|(1<<1)|(0<<0);

//禁止多主控错误检测使能,主机输出后释放MOSI

{

if(rSPSTA0&0x1)//检查SPI0的状态

{

rSPTDAT0=a[i];i++;//发送数据,准备下一次发送数据

}

}

rSPCON0=(0<<5)|(0<<4)|(1<<3)|(1<<2)|(0<<1)|(0<<0);

//设置SPI端口为Polling模式,禁止SCK,选择主控模式

}

}

使用ARM的SPI接口可以很方便的配置AD9707,但是在测试电路板上ARM离AD9707较远,走线比较长,布线时比较复杂,导致测试时不得不使用飞线。

为了解决布线困难的问题,我们采用FPGA模拟SPI接口配置AD9707内部寄存器。

2.使用FPGA配置AD9707内部寄存器

FPGA的使用非常灵活,同一片FPGA通过不同的程序可以产生不同的电路功能。

下面就是使用VHDL语言编写一个SPI控制器,来发送配置数据给AD9707。

根据图4-7中的写入时序编写程序[17][18][19][20],具体代码如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYSPIIS

GENERIC(DATA:

STD_LOGIC_VECTOR(11DOWNTO0):

="110101101011");

--配置数据

PORT(SCLK:

INSTD_LOGIC;

CSB,SDIO:

OUTSTD_LOGIC);

ENDSPI;

ARCHITECTUREBEHAVEOFSPIIS

SIGNALCOUNT:

STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALREG:

STD_LOGIC_VECTOR(11DOWNTO0);

SIGNALX:

STD_LOGIC;

BEGIN

PROCESS(SCLK,X)--产生片选信号CSB

BEGIN

ENDPROCESS;

PROCESS(SCLK)--从SDO串行发送配置数据

BEGIN

IF(SCLK'EVENTANDSCLK='1')THEN

IF(COUNT="0001")THENREG<=DATA;

ELSE

REG<=REG(10DOWNTO0)&'0';

ENDIF;

ENDIF;

ENDPROCESS;

SDIO<=REG(11);

ENDBEHAVE;

程序编译仿真后得到的时序图如下图4-9所示,整个程序综合之后仅占用4个逻辑单元,使用类属参数定义配置数据,方便用户按照自己的设计随意修改。

图4-9FPGA模拟SPI接口发送数据的时序仿真图

第四章实验报告总结

经过三个星期的实习,过程曲折可谓一语难尽。

在此期间我也失落过,也曾一度热情高涨。

从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。

生活就是这样,汗水预示着结果也见证着收获。

劳动是人类生存生活永恒不变的话题。

通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义,我才意识到老一辈测绘为我们的社会付出。

我想说,测绘确实有些辛苦,但苦中也有乐,在如今物欲很流的世界,很少有机会能与大自然亲密接触,但我们可以,而且测绘也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少人间欢乐在这里洒下,大学里一年的相处还赶不上这十来天的实习,我感觉我和同学们之间的距离更加近了;我想说,测绘确实很累,但当我们所测的数据制成成果时,心中也不免产生兴奋;正所谓“三百六十行,行行出状元”。

我们同样可以为社会作出我们应该做的一切,这有什么不好?

我不断的反问自己。

也许有人不喜欢野外的工作也许有人认为测绘的工作环境不好,但我认为无论干什么,只要人生活的有意义就可。

社会需要我们,我们也可以为社会而工作。

既然如此,那还有什么必要失落呢?

于是我决定沿着自己的测绘路,执着的走下去。

社会需要我们,我们也可以为社会而工作。

既然如此,那还有什么必要失落呢?

于是我决定沿着自己的测绘路,执着的走下去。

对我而言,知识上的收获重要,精神上的丰收更加可喜。

挫折是一份财富,经历是一份拥有。

这次实习必将成为我人生旅途上一个非常美好的回忆!

 

参考文献

[1]周林,殷侠等编著.数据采集与分析技术[M].西安:

西安电子科技大学出版社,2005

[2]吴继华,王诚编著.AlteraFPGA/CPLD设计(基础篇)[M].北京:

人民邮电出版社,2005

[3]王彦主编.基于FPGA的工程设计与应用[M].西安:

西安电子科技大学出版社,2007

[4]范书瑞,赵燕飞,高铁成编著.ARM处理器与C语言开发应用[M].北京:

北京航空航天大学出版社,2008

[5]吴继华,王诚编著.AlteraFPGA/CPLD设计(高级篇)[M].北京:

人民邮电出版社,2005

[6]唐彬,徐强,王莉薇编著.数字IC设计——方法、技巧与实践.北京:

机械工业出版社,2006

[7][美]SteveKilts著,孟宪元译。

高级FPGA设计结构、实现和优化[M].北京:

机械工业出版社,2009

[8][日]桑野雅彦著.王庆译.存储器IC的应用技巧.北京:

科学出版社,2006

附录1ARM外围电路

图1ARM供电

 

图2LCD接口

图3JTAG电路

图4全局复位电路

附录2FPGA外围电路

图1FPGA电源供电

图2AS配置电路

 

图3配置方式选择电路

 

图5SDRAM电路

附录4ARM读取显示程序

voidLcd640480(void)

{

volatileU16*port=(U16*)0x20000000;

//bank4起始地址为0x20000000

U16i,n,x,y,l,k=0,d[512];

U8a[512];

rBWSCON=rBWSCON&~(0xf<<16)|(BUS16<<16)|(ENWAIT<<18);

//bank4数据位宽度设置

rBANKCON4=((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC));

//bank4读写时序控制

for(i=0;i<5;i++);

//等待bank4配置有效

Lcd_Port_Init();

Lcd_Init(MODE_TFT_16BIT_640480);

Glib_Init(MODE_TFT_16BIT_640480);

Lcd_PowerEnable(0,1);

Lcd_EnvidOnOff

(1);

Uart_Printf("[TFT64KCOLOR(16bit/1pixel)LCDTEST]\n");

gui();

for(n=0;n<512;n+=1)//读取512个数据点

{

a[n]=*port;

*port++;

}

for(i=0;i<512;i+=1)

Uart_Printf("%d,",a[i]);

//在串口调试助手上显示512点的数据

for(l=12;l<512;l++)

{

x=20+l-12;

y=a[l];

PutPixel(x,y,YELLOW);

}

MoveViewPort(MODE_TFT_16BIT_640480);

Lcd_MoveViewPort(0,0,MODE_TFT_16BIT_640480);

Lcd_EnvidOnOff(0);

Lcd_Port_Return();

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1