FPGA图像采集论文Word下载.docx

上传人:b****6 文档编号:16552180 上传时间:2022-11-24 格式:DOCX 页数:116 大小:1.18MB
下载 相关 举报
FPGA图像采集论文Word下载.docx_第1页
第1页 / 共116页
FPGA图像采集论文Word下载.docx_第2页
第2页 / 共116页
FPGA图像采集论文Word下载.docx_第3页
第3页 / 共116页
FPGA图像采集论文Word下载.docx_第4页
第4页 / 共116页
FPGA图像采集论文Word下载.docx_第5页
第5页 / 共116页
点击查看更多>>
下载资源
资源描述

FPGA图像采集论文Word下载.docx

《FPGA图像采集论文Word下载.docx》由会员分享,可在线阅读,更多相关《FPGA图像采集论文Word下载.docx(116页珍藏版)》请在冰豆网上搜索。

FPGA图像采集论文Word下载.docx

1.4.1拟解决的主要问题

◆VGA时序控制问题

◆PROTEL绘制VGA电阻分压网络电路设计问题

◆调试VHDL程序代码常见错误

1.4.2预期的结果

通过完成整个系统的电路设计,实现各个功能模块和顶层设计电路,能在显示器上正确看到横竖彩条、棋盘格图形和图片显示等效果。

2图像采集系统介绍

2.1图像采集系统功能分析

这部分阐述了图像采集系统的各种动作功能和控制要求,给出了完整的图像采集系统操作规程,并介绍了图像采集运行系统中所包括的人工操作步骤。

2.1.1图像采集系统的基本功能

在进行上、下位机程序编写之前,首先要做的工作是确定图像采集系统本身所具备的功能及在进行某种操作后所具有的状态。

在实际生活中,我们见到的图像采集系统可以采集一些简单的图像,如书本、人物和植物等。

图像采例集系统的基本功能就是对图像进行采集,并进行简单的处理。

举一个简单的例子来说明:

采集一本书的图像,系统会根据书的颜色大小自动调整,使采集的图像清晰,尽量减小失真。

当图像达到最佳状态时,系统等待外部命令,如继续采集,则同上,如果此时不再采集而按下退出按钮,系统则要进行退出操作,并提示你是否保存所采集的图像,完成此次操作。

由此看来,系统一次采集要涉及摄像头、VGA以及FPGA等,这是它的内部功能。

基于FPGA实现的图像采集系统的整体结构框图如图1.1.1-1所示:

系统主要分为:

图像采集模块、PLL锁相环时钟管理模块、I2C总线模块、FIFO图像数据处理模块、NiosII显示控制模块。

系统中PLL负责为NiosII嵌入式内核、外部SDRAM和OV7670摄像头提供时钟,系统通电后,FPGA首先从EPCS中读取配置数据,完成自身程序加载,随后对系统时钟分频为摄像头提供系统时钟,然后通过I2C总线完成对OV7670摄像头的配置。

配置完成后,OV7670将采集到的图像数据输出格式转换为标准的图像数据及图像时钟送入FPGA进行处理,并将处理后的图像数据通过FIFO模块暂时存储在SDRAM中进行缓冲,同时NiosII模块读取存放在SDRAM中的图像数据,按照TFT液晶显示的时序、数据要求将图像数据送到TFT彩色液晶显示屏上显示。

 

图1.1.1-1图像采集系统结构

3系统硬件设计

3.1FPGA选型

FPGA是该系统的核心,由于系统目前只是完成简单的图像处理,故FPGA选用Altera公司的低成本FPGACycloneII系列器件简介如表所示。

CycloneII器件采用90nm工艺制造,它延续Cyclone的低成本定位,在逻辑容量、PLL、乘法器和I/O数量上都比Cyclone有了较大提高,应用CycloneII进行图像处理开发有如下优点:

(1)低成本高性能,适应图像处理要求较高的需要。

(2)丰富的内嵌存储器资源,适应大量图像数据存取的需要。

(3)丰富的硬件乘法器,适应图像处理算法的需要。

系统的FPGA选用开发板自带的EP2CS5Q208C8芯片。

CycloneII系列FPGA参数对比

器件

EP2C5

EP2C8

EP2C15

EP2C20

EP2C35

EP2C50

EP2C70

逻辑单元

4608

8256

14448

18752

33216

50528

68416

M4KRAM块

26

36

52

105

129

250

总比特数

119808

165888

239616

483840

594432

1152000

嵌入式乘法器

13

18

35

86

150

PLL个数

2

4

最多用户I/O管脚

158

182

315

475

450

622

3.2图像采集模块选择

图像采集采用OV7670图像传感器,OV7670图像传感器体积小、工作电压低。

OV7670摄影头的VGA图像最高达到30帧/秒。

通过SCCB总线控制内部寄存器,可以是OV7670输出整帧、子采样、取窗口等方式的各种分辨率的图像数据。

用户还可以完全控制图像质量、数据格式和传输方式。

OV7670与FPGA硬件连接如图所示。

3.3图像显示模块

图像显示通过在FPGA中构建的NiosII嵌入式内核实现,NiosII系统可以在设计阶段根据实际的需求来增减外设的数量和种类。

可以使用Altera提供的开发工具SOPCBuilder,在FPGA器件上创建软硬件开发的基础平台,即用SOPCBuilder创建嵌入式内核CPU和参数化的接口总线Avalon。

在此基础上,可以快速地将硬件系统与常规软件集成在单一可编程芯片中。

而且SOPCBuilder还提供标准的接口方式,以便用户将外围电路做成NiosII嵌入式内核可以添加的外设模块。

这种设计方式,方便了各类系统的调试。

3.4PLC的选型与工作原理

当某一个控制任务决定由PLC来完成后,选择PLC就成为最重要的事情。

一方面要选择多大容量的PLC,另一方面是选择什么公司的PLC及外设。

对第一个问题,首先要对控制任务进行详细的分析,把所有的I/O点找出来,包括开关量I/O和模拟量I/O以及输出是用继电器还是晶体管或是可控硅型。

3.4.1PLC的硬件结构图:

图2.4.1-1PLC硬件结构图

3.4.2PLC各部分的作用与工作原理

3.4.2.1中央处理器

CPU是由控制器和运算器组成的。

运算器也称为算术逻辑单元,它的功能就是进行算术运算和逻辑运算。

控制器的作用是控制整个计算机的各个部件有条不紊地工作,其基本功能是从内存中取指令和执行指令。

他的重要功能如下:

★诊断PLC电源、内部电路的工作状态及编制程序中的语法错误。

★采集由现场输入装置送来的状态或数据,并送入PLC的寄存器中。

★按用户程序存储器中存放的先后顺序逐条读取指令,进行编译解释后,按指令规定的任务完成各种运算和操作。

★将存于寄存器中的处理结果送至输出端。

★应各种外部设备的工作请求。

3.4.2.2存储器

PLC的存储器分为两大部分:

一大部分是系统存储器,用来存放系统管理程序、监控程序及其系统内部数据;

二大部分是用户存储器,包括用户程序存储区及工作数据存储区。

3.4.2.3PLC的基本工作原理

PLC采用的是循环扫描工作方式。

对每个程序,CPU从第一条指令开始执行,按指令步序号做周期性的程序循环扫描,如果无跳转指令,则从则从第一条指令开始逐条顺序执行用户程序,直至遇到结束符后又返回第一条指令,如此周而复始不断循环,每一个循环称为一个扫描周期。

PLC的扫描全过程如图2.4.2.3-1所示。

图3.4.2.3-1PLC的扫描全过程

3.4.2.3.1输入刷新阶段

在输入刷新阶段,CPU扫描全部输入端口,读取其状态并写入输入状态寄存器。

完成后关闭输入端口,转入程序执行阶段。

3.4.2.3.2程序执行阶段

在程序执行阶段,根据用户输入的控制程序,从第一条开始逐条执行,并将相应的逻辑运算结果存入对应的内部辅助寄存器和输出状态寄存器。

3.4.2.3.3输出刷新阶段

当所有指令执行完毕后,将输出状态寄存器中的内容,依次送到输出锁存电路,并通过一定输出方式输出,驱动外部相应执行元件工作,这才形成PLC的实际输出。

显然扫描周期的长短主要取决与程序的长短。

扫描周期越长,响应速度越慢。

由于每一个扫描周期只进行一次I/O刷新,即每一个扫描周期PLC只对输入、输出状态寄存器更新一次,故使系统存在输入、输出滞后现象,这在一定程度上降低了系统的响应速度。

I/O端口设置见表3.4.2.3.3-1:

表3.4.2.3.3-1I/O端口设置

Dir

Attrib

Data

功能

唤醒功能

功能描述

下拉

带下拉电阻的输入管脚

1

上拉

带上拉电阻的输入管脚

悬浮

悬浮式输入管脚

反相输出

Data数据位反相输出

同相输出

Data数据位同相输出

由此可见,若输入变量在I/O刷新期间状态发生变化,则本次扫描期间输出会相应地发生变化。

反之,若在本次刷新之后输入变量才发生变化,则本次扫描输出不变,而要到下一次扫描的I/O刷新期间输出才会发生变化。

这对于一般的开关量控制系统来说是完全允许的,不但不会造成不利影响,反而可以增强系统的抗干扰能力。

这是因为输入采样仅在输入刷新阶段进行,PLC在一个工作周期的大部分时间里实际上是外设隔离的。

而工业现场的干扰常常是脉冲式的、短时的,由于系统响应较慢,往往要几个扫描周期才响应一次,而多次扫描后,因瞬间干扰而引起的误操作将会大大减少,从而提高了系统的抗干扰能力。

但是对于控制时间要求较严格、响应速度要求较快的系统,就需要精心编制程序,必要时采用一些特殊功能,以减少因扫描周期造成的响应滞后等不良影响。

3.5VGA的概述

VGA(Video 

Graphics 

Array)是IBM公司在1987年推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用,VGA最早是指分辨率为640*480的一种显示模式。

下面就VGA相关的工作原理及时序要求进行简单介绍。

3.5.1CRT的工作原理

VGA接口技术应用最多的就是CRT显示器,这种显示器的信号接口采用的就是标准的VGA接口。

常见的彩色显示器,一般由CRT(阴极射线管)构成,彩色是由R、G、B

三原色按不同比例组成。

显示过程中,HS和VS的极性可正可负,显示器内可自动转换为正极性逻辑。

3.5.2VGA工作时序

对于普通的VGA显示器,主要包含5个信号:

●R、G、B:

三基色信号

●HS:

行同步信号

●VS:

场同步信号

图3.5-1VGA行扫描时序

图3.5-2VGA场扫描时序

表3.5-1行扫描时序时间(单位:

像素,即输出一个像素Pixel的时间间隔)

行同步头

行图像

行周期

对应位置

Tf

Ta

Tb

Tc

Td

Te

Tg

时间Pixels

8

96

40

640

800

表3.5-2场扫描时序时间(单位:

行,即输出一行Line的时间间隔)

场同步头

场图像

场周期

时间Lines

25

480

525

系统原理图

系统PCB图

4系统软件设计

4.1软件模块介绍

系统软件总设计模块如图所示,在pll中建立PLL锁相环对时钟倍频、分频产生系统各模块所需时钟与系统复位信号,ov7670-data_receive模块负责OV7670摄像头的初始化与图像数据的采集,模块配合NiosII负责对ov7670-data_receive采集的图像数据的缓存,以防止数据时钟不匹配而出现数据紊乱,而模块主要负责产生读取中的数据域实现数据的VGA显示产生相应的RGB数据与行、场同步信号,再将采集数据送到NiosII中,在NiosII中用Verilog语言驱动TFT液晶,实现图像数据的显示。

系统总设计框图

4.2NiosII嵌入式内核程序设计

NiosII嵌入式内核主要任务是将采集到的数据送入SDRAM暂存,然后再根据显示需要将暂存的数据读取出来送到LCD显示,为了确保显示图像与采集图像的一致,在送LCD显示数据时要注意以下几点:

(1)根据实际情况去除行、场消隐数据,再根据显示内容的多少对数据进行裁剪,裁剪到适合LCD显示的大小,从而避免显示时图像的错位以及乱码等情况。

(2)由于嵌入式内核时钟频率相对于摄像头的大量数据来说速度还是难以做到摄像头采集的每副图像都能完全显示,所以在设计中采用隔场采集处理的方式,这样避免SDRAM中数据过多以至于被填满的情况,也解决了嵌入式内核采集的出现的卡屏的情况。

5测试结果

电路板成品:

测试结果如图所示:

由上图可以看出,显示的图像清晰,色彩与实际相符,失真较少。

测试结果基本达到预期。

6结束语

采用FPGA设计并实现了一种图像采集系统,大幅减少了电路板的尺寸,节约了成本,同时增加了设计的灵活性和系统的可靠性,充分应用FPGA快速并行处理数据的特性,在产生同步信号的同时送出像素数据。

嵌入式内核NiosII的使用,解决了其他系统实时图像显示的体积与速度问题,扩展了应用范围。

(全文完)

参考文献:

[1]潘松、黄继业:

EDA技术实用教程,科学出版社,2003.5,P23-P28

[2]杨静:

电子设计自动化,高等教育出版社,2004.7,P32-P36

[3]张文爱:

EDA技术与FPGA应用设计,电子工业出版社,2012.1,P25-P48

[4]杨立英:

电子电路EDA技术与应用,清华大学出版社,2011.1,P43-P86

[5]徐志军、徐光辉:

VGA在CPLD/FPGA的开发与应用,电子工业出版社,2002.4,P12-P16

[6]黄智伟:

FPGA系统设计与实践,电子工业出版社,2005.1,P66-P69

[7]潘松、王国栋:

VHDL实用教材(修订版),电子科技大学出版社,2001.7,P48-P52

[8]孟宪元:

FPGA嵌入式系统设计,电子工业出版社,2007.10,P56-P64

[9]褚振勇、齐亮、田红心:

FPGA设计及应用,高等教育出版社,2006.12,P36-P41

附录:

源程序

`timescale1ns/1ns

moduleI2C_Controller

inputiCLK,

inputiRST_N,

inputI2C_CLK,

inputI2C_EN,

input[23:

0]I2C_WDATA,

outputI2C_SCLK,

inoutI2C_SDAT,

inputWR,

inputGO,

outputACK,

outputregEND,

outputreg[7:

0]I2C_RDATA

);

regI2C_BIT;

regSCLK;

reg[5:

0]SD_COUNTER;

wireI2C_SCLK1=(GO==1&

&

((SD_COUNTER>

=5&

SD_COUNTER<

=12||SD_COUNTER==14)||

(SD_COUNTER>

=16&

=23||SD_COUNTER==25)||

=27&

=34||SD_COUNTER==36)))?

I2C_CLK:

SCLK;

wireI2C_SCLK2=(GO==1&

=12||SD_COUNTER==14)||

=33&

=40||SD_COUNTER==42)||

=44&

=51||SD_COUNTER==53)))?

assignI2C_SCLK=WR?

I2C_SCLK1:

I2C_SCLK2;

wireSDO1=((SD_COUNTER==13||SD_COUNTER==14)||(SD_COUNTER==24||SD_COUNTER==25)||(SD_COUNTER==35||SD_COUNTER==36))?

1'

b0:

b1;

wireSDO2=((SD_COUNTER==13||SD_COUNTER==14)||(SD_COUNTER==24||SD_COUNTER==25)||(SD_COUNTER==41||SD_COUNTER==42)||(SD_COUNTER>

=43&

=51))?

wireSDO=WR?

SDO1:

SDO2;

assignI2C_SDAT=SDO?

I2C_BIT:

bz;

regACKW1,ACKW2,ACKW3;

regACKR1,ACKR2,ACKR3;

assignACK=WR?

(ACKW1|ACKW2|ACKW3):

(ACKR1|ACKR2|ACKR3);

always@(posedgeiCLKornegedgeiRST_N)

begin

if(!

iRST_N)

=6'

b0;

elseif(I2C_EN)

begin

if(GO==0||END==1)

elseif(SD_COUNTER<

6'

d63)

=SD_COUNTER+6'

d1;

end

else

=SD_COUNTER;

end

always@(posedgeiCLKornegedgeiRST_N)

if(!

iRST_N)

SCLK<

=1;

I2C_BIT<

ACKW1<

ACKW2<

ACKW3<

ACKR1<

ACKR2<

ACKR3<

END<

=0;

I2C_RDATA<

=8'

h0;

elseif(I2C_EN)

if(GO)

if(WR)

case(SD_COUNTER)

d0:

ACKR1<

d1:

d2:

d3:

d4:

=I2C_WDATA[23];

d5:

=I2C_WDATA[22];

d6:

=I2C_WDATA[21];

d7:

=I2C_WDATA[20];

d8:

=I2C_WDATA[19];

d9:

=I2C_WDATA[18];

d10:

=I2C_WDATA[1

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

当前位置:首页 > 经管营销 > 经济市场

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

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