1、1.4.1拟解决的主要问题 VGA时序控制问题 PROTEL绘制VGA电阻分压网络电路设计问题 调试VHDL程序代码常见错误1.4.2预期的结果通过完成整个系统的电路设计,实现各个功能模块和顶层设计电路,能在显示器上正确看到横竖彩条、棋盘格图形和图片显示等效果。2 图像采集系统介绍2.1 图像采集系统功能分析这部分阐述了图像采集系统的各种动作功能和控制要求,给出了完整的图像采集系统操作规程,并介绍了图像采集运行系统中所包括的人工操作步骤。2.1.1 图像采集系统的基本功能在进行上、下位机程序编写之前,首先要做的工作是确定图像采集系统本身所具备的功能及在进行某种操作后所具有的状态。在实际生活中,
2、我们见到的图像采集系统可以采集一些简单的图像,如书本、人物和植物等。图像采例集系统的基本功能就是对图像进行采集,并进行简单的处理。举一个简单的例子来说明:采集一本书的图像,系统会根据书的颜色大小自动调整,使采集的图像清晰,尽量减小失真。当图像达到最佳状态时,系统等待外部命令,如继续采集,则同上,如果此时不再采集而按下退出按钮,系统则要进行退出操作,并提示你是否保存所采集的图像,完成此次操作。由此看来,系统一次采集要涉及摄像头、VGA以及FPGA等,这是它的内部功能。基于FPGA实现的图像采集系统的整体结构框图如图1.1.1-1所示: 系统主要分为:图像采集模块、PLL锁相环时钟管理模块、I2C
3、总线模块、FIFO图像数据处理模块、Nios II 显示控制模块。系统中PLL负责为Nios II嵌入式内核、外部SDRAM和OV7670摄像头提供时钟,系统通电后,FPGA首先从EPCS中读取配置数据,完成自身程序加载,随后对系统时钟分频为摄像头提供系统时钟,然后通过I2C总线完成对OV7670摄像头的配置。配置完成后,OV7670将采集到的图像数据输出格式转换为标准的图像数据及图像时钟送入FPGA进行处理,并将处理后的图像数据通过FIFO模块暂时存储在SDRAM中进行缓冲,同时Nios II模块读取存放在SDRAM中的图像数据,按照TFT液晶显示的时序、数据要求将图像数据送到TFT彩色液晶
4、显示屏上显示。图1.1.1-1 图像采集系统结构3 系统硬件设计3.1 FPGA选型 FPGA是该系统的核心,由于系统目前只是完成简单的图像处理,故FPGA选用Altera公司的低成本FPGA Cyclone II系列器件简介如表所示。 Cyclone II器件采用90nm工艺制造,它延续Cyclone的低成本定位,在逻辑容量、PLL、乘法器和I/O数量上都比Cyclone有了较大提高,应用Cyclone II进行图像处理开发有如下优点:(1)低成本高性能,适应图像处理要求较高的需要。(2)丰富的内嵌存储器资源,适应大量图像数据存取的需要。(3)丰富的硬件乘法器,适应图像处理算法的需要。系统的
5、FPGA选用开发板自带的EP2CS5Q208C8芯片。Cyclone II系列FPGA参数对比器件EP2C5EP2C8EP2C15EP2C20EP2C35EP2C50EP2C70逻辑单元460882561444818752332165052868416M4K RAM块263652105129250总比特数1198081658882396164838405944321152000嵌入式乘法器13183586150PLL个数24最多用户I/O管脚1581823154754506223.2 图像采集模块选择 图像采集采用OV7670图像传感器,OV7670图像传感器体积小、工作电压低。OV7670摄
6、影头的VGA图像最高达到30帧/秒。通过SCCB总线控制内部寄存器,可以是OV7670输出整帧、子采样、取窗口等方式的各种分辨率的图像数据。用户还可以完全控制图像质量、数据格式和传输方式。OV7670与FPGA硬件连接如图所示。3.3 图像显示模块 图像显示通过在FPGA中构建的Nios II嵌入式内核实现,Nios II系统可以在设计阶段根据实际的需求来增减外设的数量和种类。可以使用Altera提供的开发工具SOPC Builder,在FPGA器件上创建软硬件开发的基础平台,即用SOPC Builder创建嵌入式内核CPU和参数化的接口总线Avalon。在此基础上,可以快速地将硬件系统与常规
7、软件集成在单一可编程芯片中。而且SOPC Builder还提供标准的接口方式,以便用户将外围电路做成Nios II嵌入式内核可以添加的外设模块。这种设计方式,方便了各类系统的调试。3.4 PLC的选型与工作原理当某一个控制任务决定由PLC来完成后,选择PLC就成为最重要的事情。一方面要选择多大容量的PLC ,另一方面是选择什么公司的PLC及外设。对第一个问题,首先要对控制任务进行详细的分析,把所有的I/O点找出来,包括开关量I/O和模拟量I/O以及输出是用继电器还是晶体管或是可控硅型。3.4.1 PLC的硬件结构图:图2.4.1-1 PLC硬件结构图3.4.2 PLC各部分的作用与工作原理 3
8、.4.2.1 中央处理器 CPU是由控制器和运算器组成的。运算器也称为算术逻辑单元,它的功能就是进行算术运算和逻辑运算。控制器的作用是控制整个计算机的各个部件有条不紊地工作,其基本功能是从内存中取指令和执行指令。他的重要功能如下: 诊断PLC电源、内部电路的工作状态及编制程序中的语法错误。 采集由现场输入装置送来的状态或数据,并送入PLC的寄存器中。 按用户程序存储器中存放的先后顺序逐条读取指令,进行编译解释后,按指令规定的任务完成各种运算和操作。 将存于寄存器中的处理结果送至输出端。 应各种外部设备的工作请求。3.4.2.2 存储器PLC的存储器分为两大部分:一大部分是系统存储器,用来存放系
9、统管理程序、监控程序及其系统内部数据;二大部分是用户存储器,包括用户程序存储区及工作数据存储区。3.4.2.3 PLC的基本工作原理PLC采用的是循环扫描工作方式。对每个程序,CPU从第一条指令开始执行,按指令步序号做周期性的程序循环扫描,如果无跳转指令,则从则从第一条指令开始逐条顺序执行用户程序,直至遇到结束符后又返回第一条指令,如此周而复始不断循环,每一个循环称为一个扫描周期。PLC的扫描全过程如图2.4.2.3-1所示。图3.4.2.3-1 PLC的扫描全过程3.4.2.3.1 输入刷新阶段在输入刷新阶段,CPU扫描全部输入端口,读取其状态并写入输入状态寄存器。完成后关闭输入端口,转入程
10、序执行阶段。3.4.2.3.2 程序执行阶段在程序执行阶段,根据用户输入的控制程序,从第一条开始逐条执行,并将相应的逻辑运算结果存入对应的内部辅助寄存器和输出状态寄存器。3.4.2.3.3 输出刷新阶段当所有指令执行完毕后,将输出状态寄存器中的内容,依次送到输出锁存电路,并通过一定输出方式输出,驱动外部相应执行元件工作,这才形成PLC的实际输出。显然扫描周期的长短主要取决与程序的长短。扫描周期越长,响应速度越慢。由于每一个扫描周期只进行一次I/O刷新,即每一个扫描周期PLC只对输入、输出状态寄存器更新一次,故使系统存在输入、输出滞后现象,这在一定程度上降低了系统的响应速度。I/O端口设置见表3
11、.4.2.3.3-1:表3.4.2.3.3-1 I/O端口设置DirAttribData功能唤醒功能功能描述下拉是带下拉电阻的输入管脚1上拉带上拉电阻的输入管脚悬浮悬浮式输入管脚否反相输出Data数据位反相输出同相输出Data数据位同相输出由此可见,若输入变量在I/O刷新期间状态发生变化,则本次扫描期间输出会相应地发生变化。反之,若在本次刷新之后输入变量才发生变化,则本次扫描输出不变,而要到下一次扫描的I/O刷新期间输出才会发生变化。这对于一般的开关量控制系统来说是完全允许的,不但不会造成不利影响,反而可以增强系统的抗干扰能力。这是因为输入采样仅在输入刷新阶段进行,PLC在一个工作周期的大部分
12、时间里实际上是外设隔离的。而工业现场的干扰常常是脉冲式的、短时的,由于系统响应较慢,往往要几个扫描周期才响应一次,而多次扫描后,因瞬间干扰而引起的误操作将会大大减少,从而提高了系统的抗干扰能力。但是对于控制时间要求较严格、响应速度要求较快的系统,就需要精心编制程序,必要时采用一些特殊功能,以减少因扫描周期造成的响应滞后等不良影响。3.5 VGA的概述VGA(VideoGraphicsArray)是IBM公司在1987年推出的一种视频传输标准,具有分辨率高、显示速率快、颜色丰富等优点,在彩色显示器领域得到了广泛的应用,VGA最早是指分辨率为640*480的一种显示模式。下面就VGA相关的工作原理
13、及时序要求进行简单介绍。3.5.1 CRT的工作原理VGA接口技术应用最多的就是CRT显示器,这种显示器的信号接口采用的就是标准的VGA接口。常见的彩色显示器,一般由 CRT (阴极射线管)构成,彩色是由 R、G、B三原色按不同比例组成。显示过程中,HS和VS的极性可正可负,显示器内可自动转换为正极性逻辑。3.5.2 VGA工作时序对于普通的VGA显示器,主要包含5个信号: R、G、B:三基色信号 HS: 行同步信号 VS:场同步信号图3.5-1 VGA行扫描时序 图3.5-2 VGA场扫描时序表3.5-1 行扫描时序时间(单位:像素,即输出一个像素Pixel的时间间隔)行同步头行图像行周期对
14、应位置TfTaTbTcTdTeTg时间 Pixels89640640800表3.5-2 场扫描时序时间(单位:行,即输出一行Line的时间间隔)场同步头场图像场周期时间 Lines25480525系统原理图系统PCB图4 系统软件设计4.1软件模块介绍 系统软件总设计模块如图所示,在 pll 中建立PLL锁相环对时钟倍频、分频产生系统各模块所需时钟与系统复位信号,ov7670-data_receive 模块负责OV7670摄像头的初始化与图像数据的采集, 模块配合Nios II负责对ov7670-data_receive 采集的图像数据的缓存,以防止数据时钟不匹配而出现数据紊乱,而 模块主要负
15、责产生读取 中的数据域实现数据的VGA显示产生相应的RGB数据与行、场同步信号,再将采集数据送到Nios II中,在Nios II中用Verilog语言驱动TFT液晶,实现图像数据的显示。系统总设计框图4.2 Nios II嵌入式内核程序设计Nios II嵌入式内核主要任务是将采集到的数据送入SDRAM暂存,然后再根据显示需要将暂存的数据读取出来送到LCD显示,为了确保显示图像与采集图像的一致,在送LCD显示数据时要注意以下几点:(1) 根据实际情况去除行、场消隐数据,再根据显示内容的多少对数据进行裁剪,裁剪到适合LCD显示的大小,从而避免显示时图像的错位以及乱码等情况。(2) 由于嵌入式内核
16、时钟频率相对于摄像头的大量数据来说速度还是难以做到摄像头采集的每副图像都能完全显示,所以在设计中采用隔场采集处理的方式,这样避免SDRAM中数据过多以至于被填满的情况,也解决了嵌入式内核采集的出现的卡屏的情况。5 测试结果电路板成品:测试结果如图所示:由上图可以看出,显示的图像清晰,色彩与实际相符,失真较少。测试结果基本达到预期。6 结束语 采用FPGA设计并实现了一种图像采集系统,大幅减少了电路板的尺寸,节约了成本,同时增加了设计的灵活性和系统的可靠性,充分应用FPGA快速并行处理数据的特性,在产生同步信号的同时送出像素数据。嵌入式内核Nios II的使用,解决了其他系统实时图像显示的体积与
17、速度问题,扩展了应用范围。 (全文完)参考文献:1 潘 松、黄继业: EDA技术实用教程,科学出版社,2003.5,P23-P282 杨 静: 电子设计自动化,高等教育出版社,2004.7,P32-P363 张文爱:EDA技术与FPGA应用设计,电子工业出版社,2012.1,P25-P484 杨立英:电子电路EDA技术与应用,清华大学出版社,2011.1,P43-P865 徐志军、徐光辉:VGA在CPLD/FPGA的开发与应用,电子工业出版社,2002.4,P12-P166 黄智伟: FPGA系统设计与实践,电子工业出版社,2005.1,P66-P697 潘 松、王国栋:VHDL实用教材(修订
18、版),电子科技大学出版社,2001.7,P48-P528 孟宪元:FPGA嵌入式系统设计,电子工业出版社,2007.10,P56-P649 褚振勇、齐 亮、田红心:FPGA设计及应用,高等教育出版社,2006.12,P36-P41附录:源程序timescale 1ns/1nsmodule I2C_Controller( input iCLK, input iRST_N, input I2C_CLK, input I2C_EN, input 23:0 I2C_WDATA, output I2C_SCLK, inout I2C_SDAT, input WR, input GO, output AC
19、K, output reg END, output reg 7:0 I2C_RDATA );reg I2C_BIT;reg SCLK;reg 5:0 SD_COUNTER;wire I2C_SCLK1 = (GO = 1 & (SD_COUNTER = 5 & SD_COUNTER = 16 &=23 | SD_COUNTER = 25) |= 27 &=34 | SD_COUNTER = 36) ? I2C_CLK : SCLK;wire I2C_SCLK2 = (GO = 1 &=12 | SD_COUNTER = 14) |= 33 &=40 | SD_COUNTER = 42) |=
20、44 &=51 | SD_COUNTER = 53) ?assign I2C_SCLK = WR ? I2C_SCLK1 : I2C_SCLK2;wire SDO1 = (SD_COUNTER = 13 | SD_COUNTER = 14)| (SD_COUNTER = 24 | SD_COUNTER = 25) | (SD_COUNTER = 35 | SD_COUNTER = 36) ? 1b0 :b1;wire SDO2 = (SD_COUNTER = 13 | SD_COUNTER = 14)| (SD_COUNTER = 24 | SD_COUNTER = 25) | (SD_COU
21、NTER = 41 | SD_COUNTER = 42) | (SD_COUNTER = 43 &= 51) ?wire SDO = WR ? SDO1 : SDO2;assign I2C_SDAT = SDO ? I2C_BIT :bz;reg ACKW1, ACKW2, ACKW3; reg ACKR1, ACKR2, ACKR3;assign ACK = WR ? (ACKW1 | ACKW2 | ACKW3) : (ACKR1 | ACKR2 | ACKR3);always (posedge iCLK or negedge iRST_N)begin if (!iRST_N) = 6b0
22、; else if(I2C_EN) begin if (GO = 0 | END = 1) else if (SD_COUNTER 6d63)= SD_COUNTER + 6d1; end else= SD_COUNTER;endalways (posedge iCLK or negedge iRST_N) if(!iRST_N) SCLK = 1; I2C_BIT ACKW1 ACKW2 ACKW3 ACKR1 ACKR2 ACKR3 END = 0; I2C_RDATA = 8h0; else if(I2C_EN) if(GO) if(WR) case(SD_COUNTER)d0 :ACKR1 d1 :d2 :d3 :d4 := I2C_WDATA23;d5 := I2C_WDATA22;d6 := I2C_WDATA21;d7 := I2C_WDATA20;d8 := I2C_WDATA19;d9 := I2C_WDATA18;d10 := I2C_WDATA1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1