采用图像传感器的CPLD视觉系统设计方法

2013-11-28 10:02:46来源: 互联网

采用图像传感器的CPLD视觉系统设计方法

搭建一种低成本的嵌入式视觉系统,系统由CMOS图像传感器、CPLD、ARM7微处理器以及SRAM构成。其中,CPLD识别时序,解决了图像采集系统存在的严格时序同步和双CPU共享一片SRAM的总线竞争问题;用Verilog语言编写Mealy状态机控制图像数据写入SRAM,多路数据选择器实现总线切换,避免了总线冲突。图像处理算法注重效率,基于ARM实现,系统最终工作速率为25帧/s。

关键词  OV6620  视觉系统  CMOS  EPM7128  SLPC2214

  目前,关于视觉系统的研究已经成为热点,也有开发出的系统可供参考。但这些系统大多是基于PC机的,由于算法和硬件结构的复杂性而使其在小型嵌入式系统中的应用受到了限制。上述系统将图像数据采集后,视觉处理算法是在PC机上实现的。随着嵌入式微处理器技术的进步,32位ARM处理器系统拥有很高的运算速度和很强的信号处理能力,可以作为视觉系统的处理器,代替PC机来实现简单的视觉处理算法。下面介绍一种基于ARM和CPLD的嵌入式视觉系统,希望能分享嵌入式视觉开发过程中的一些经验。

1  系统方案与原理

  在嵌入式视觉的设计中,目前主流的有以下2种方案:

方案1图像传感器+微处理器(ARM或DSP)+SRAM
方案2图像传感器+CPLD/FPGA+微处理器+SRAM

  方案1系统结构紧凑,功耗低。在图像采集时,图像传感器输出的同步时序信号的识别需要借助ARM的中断,而中断处理时,微处理器需要完成程序跳转、保存上下文等工作[1],降低了图像采集的速度,适合对采集速度要求不高、功耗低的场合。

  方案2借助CPLD来识别图像传感器的同步时序信号,不必经过微处理器的中断,因而系统的采集速度提高,但CPLD的介入会使系统的功耗提高。

  为了综合以上2种方案的优势,在硬件上采用“ARM+CPLD+图像传感器+SRAM”。该方案充分利用了CPLD的可编程性,通过软件编程来兼有方案1的优势,具体体现在以下方面:

  ① 功耗的高低可以控制。对于功耗有严格要求的场合,通过CPLD的可编程性将时序部分的接口与ARM的中断端口相连,仅仅是组合逻辑的总线相连,可以降低CPLD的功耗从而达到方案1的效果;对于采集速度要求高而功耗要求不高的情况,可以充分发挥CPLD的优势,利用组合与时序逻辑来实现图像传感器输出同步信号的识别,并将图像数据写入SRAM中。
  ② 器件的选择可以多样。在硬件设计上,所有总线均与CPLD相连;在软件设计上,不同的模块单独按功能封装。这样以CPLD为中心,系统的其他器件均可更换而无需对CPLD部分程序进行改动,有利于系统的功能升级。

  作为本系统的一种应用,开发了视觉跟踪的程序,可以在目标和背景颜色对比强烈的情况下对物体进行跟踪。通过对CMOS摄像头采集来的数据进行实时处理,根据物体的颜色计算出被追踪物体的质心坐标。下面分别描述系统各部分的功能。

2  系统硬件

2.1  硬件组成及连接

  系统的硬件主要有4部分:CMOS图像传感器OV6620、可编程器件CPLD、512 KB的SRAM和32位微处理器LPC2214。

  OV6620是美国OmniVision公司生产的CMOS图像传感器,以其高性能、低功耗适合应用在嵌入式图像采集系统中,本系统图像数据的输入都是通过OV6620采集进来的;可编程器件CPLD采用Altera公司的EPM7128S,用Verilog硬件编程语言在QuartusII下编写程序;作为系统的数据缓冲,SRAM选用的是IS61LV5128,其随机访问的特性为图像处理程序提供了便利;而LPC2214在PLL(锁相环)的支持下最高可以运行在60 MHz的频率下,为图像的快速处理提供了硬件支持。

  OV6620集成在一个板卡上,有独立的17 MHz晶振。输出3个图像同步的时序信号:像素时钟PCLK、帧同步VSYNC和行同步HREF。同时,还可以通过8位或16位的数据总线输出RGB或YCrCb格式的图像数据。

  在硬件设计上,有2个问题需要解决:

  ① 图像采集的严格时序同步;
  ② 双CPU共享SRAM的总线仲裁。

  解决第一个问题的关键在于如何实时、准确地读取OV6620的时序输出信号,据此将图像数据写入SRAM中。这里采用的解决方案是用CPLD来实现时序信号的识别以及图像数据的写入。CPLD在硬件上可以识别信号的边沿,速度更快,通过Verilog语言编写Mealy状态机来实现图像数据的SRAM写入,更加稳定。

  对于双CPU共享SRAM,可以通过合理的连接方式来解决。考虑到CPLD的可编程性,将OV6620的数据总线,LPC2214的地址、数据总线以及SRAM的总线都连接到CPLD上。通过编程来控制总线之间的连接,只要在软件上保证总线的互斥性,即在同一时刻有且仅有一个控制器(CPLD或者LPC2214)来操作SRAM的总线,就可以有效地避免总线冲突。这样,硬件上的仲裁就可以通过软件来保证,该过程可以通过在CPLD中编写多路数据选择器来实现。

  各器件之间的连接关系如图1所示。

按此在新窗口浏览图片
图1  系统结构框图

  由图1可见,微处理器的总线接在CPLD上,在对功耗有严格要求的场合中,只需要在CPLD中,将OV6620的同步时序信号所对应的引脚与LPC2214连接在CPLD上的中断引脚相连,系统就可以转换成方案1的形式。对CPLD而言,引脚相连的仅仅是组合逻辑,降低了功耗。方案1的具体工作过程可见参考文献[1]。而对于采集速度要求较高的场合,CPLD部分的程序源代码见本刊网站www.mesnet.com.cn——编者注。下面重点介绍这种情况下的应用。

2.2  工作过程

  系统上电后,首先由LPC2214通过I2C总线配置摄像头的工作状态,需要配置的主要有输出图像的数据格式、速率、是否白平衡,以及自动增益是否打开。配置完成后,LPC2214发出图像采集的信号给CPLD,此时CPLD操作SRAM的总线,并通过对OV6620输出时序的检测将图像数据写入SRAM。当然,写入SRAM需要严格符合SRAM的操作时序。一帧图像采集完成后,CPLD置位标志位来通知LPC2214,如果LPC2214处于空闲状态,则通知CPLD将总线使用权切换至LPC2214,由LPC2214读取SRAM中的数据并进行图像处理。同时,发送信号给CPLD进行数据采集,图像的采集和处理将并行执行,提高了系统的工作效率。当再次采集完一帧数据后,重复上述过程。

2.3  硬件方案的特点

  LPC2214负责图像处理,CPLD负责图像数据的采集,很好地实现了功能上的封装。可以看到,CPLD将与硬件时序相关的程序封装,与外界的接口仅为标志状态线以及数据采集总线,极大地方便了系统的升级而无需改动图像采集部分的硬件和软件。甚至更换为其他型号功能更为强大的微处理器,只要按照上述标志状态线的约定来操作,系统仍然可以正常工作,增强了系统的兼容性和可移植性。

3  系统软件

  系统软件主要由ARM微处理器和CPLD两部分程序构成。ARM部分的代码使用C语言在ADS1.2环境下开发,而CPLD部分则使用Verilog硬件语言在QuartusII下开发。

3.1  CPLD部分程序设计

  CPLD的程序主要分为2部分:组合逻辑和时序逻辑。组合逻辑主要完成总线仲裁,程序并不依赖CPLD的全局时钟;时序逻辑完成对信号的检测,根据SRAM的操作时序将图像数据写入。

  在总线仲裁部分,需要注意的是: 对CPLD而言,不同的时刻同一总线的数据流入方向是不同的。因而在Verilog中,需要声明总线为双向端口。具体的总线仲裁程序如下:

  assign sram_data = (arm_ctrl == 2′b10) ? 8′hzz: cam_data;
  assign arm_data= (arm_ctrl == 2′b10) ? sram_data : 8′hzz;
  assign sram_add= (arm_ctrl == 2′b10) ? arm_add : sram_add_map;
  assign sram_oe= (arm_ctrl == 2′b10) ? arm_oe: sram_oe_map;
  assign sram_ce= (arm_ctrl == 2′b10) ? arm_ce: sram_ce_map;
  assign sram_we= (arm_ctrl == 2′b10) ? arm_we: sram_we_map;

  对双向端口的总线操作总结如下:

  ① 需要控制信号指明端口在某一时刻的方向;
  ② 输出高阻即代表该双向端口是输入状态,此时可以作为普通的输入端口来使用。

  时序逻辑部分主要完成对图像传感器时序信号的识别。如图2所示,CPLD需要首先检测VSYNC的下降沿,接着检测HREF信号的上升沿,然后在PCLK信号的上升沿将图像数据读入。

按此在新窗口浏览图片
图2  OV6620输出时序图

  在Verilog语言中,对上升沿的检测是通过always语句来实现的。例如检测时钟信号cam_pclk的上升沿: always@(posedge cam_pclk)。但从上面的分析中可以看出,需要检测的信号沿有3个,可以都用always来检测,但在Verilog的语法中always语句是不可以嵌套的。为了解决这个问题,本系统中采用了如下方式:整个模块只有一个时序逻辑的always块,其他的信号沿检测用与always等价的方式实现。例如对于cam_vsyn信号,设置2个临时信号vsyn_0和vsyn_1,在每个时钟信号的上升沿,进行如下赋值:

  vsyn_1 <= cam_vsyn;//临时信号赋值
  vsyn_0 <= vsyn_1;

这样,当每个时钟沿到来时都会更新vsyn_0和vsyn_1的值。当vsyn_0的值为0且vsyn_1的值为1时,认为是上升沿到来,同理也可以检测下降沿。需要注意的是: 这种方式下,时钟信号的周期要远远小于被检测信号的高电平和低电平的持续时间。如果信号脉冲过窄,在整个脉

[1] [2]

关键字:图像传感器  CPLD  视觉系统

编辑:神话 引用地址:http://www.eeworld.com.cn/mndz/2013/1128/article_21311.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
图像传感器
CPLD
视觉系统

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved