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

发布者:书香门第最新更新时间:2011-08-07 来源: 北京航空航天大学关键字:OV6620  视觉系统  CMOS  EPM7128  SLPC2214 手机看文章 扫描二维码
随时随地手机看文章

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

  目前,关于视觉系统的研究已经成为热点,也有开发出的系统可供参考。但这些系统大多是基于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所示。

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

  由图1可见,微处理器的总线接在CPLD上,在对功耗有严格要求的场合中,只需要在CPLD中,将OV6620的同步时序信号所对应的引脚与LPC2214连接在CPLD上的中断引脚相连,系统就可以转换成方案1的形式。对CPLD而言,引脚相连的仅仅是组合逻辑,降低了功耗。方案1的具体工作过程可见参考文献[1]。下面重点介绍这种情况下的应用。

  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中,需要声明总线为双向端口。具体的总线仲裁程序如下:

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

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

  ①需要控制信号指明端口在某一时刻的方向

  ②输出高阻即代表该双向端口是输入状态,此时可以作为普通的输入端口来使用

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

采用图像传感器的CPLD视觉系统设计方法
图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时,认为是上升沿到来,同理也可以检测下降沿。需要注意的是:这种方式下,时钟信号的周期要远远小于被检测信号的高电平和低电平的持续时间。如果信号脉冲过窄,在整个脉冲期间vsyn_0和vsyn_1的值都没有更新,就会丢失边沿的检测。

  数据写入SRAM的过程是用Mealy状态机来实现的,程序具有通用性。若使用其他型号的SRAM,只需要根据器件的读写时序在相应的状态中修改高低电平。状态机使程序的结构清晰,调试方便。

  3.2 ARM部分程序设计

  目前,基于PC机的视觉处理算法有很多,但在基于微处理器的嵌入式视觉系统中,系统在硬件资源和处理速度上都无法与PC机相比。特别是在有实时性要求的情况下,需要编写适合嵌入式系统特点的快速有效的算法。下面编写的算法都是根据这个思想来编写的。

  颜色跟踪:颜色跟踪的任务可以分解为颜色标定和颜色分割两个步骤。颜色标定的任务是通过一个已知的颜色,找出其在颜色空间内与之对应的一个封闭区域。颜色分割则是通过比较器判断图像中像素点在颜色空间中是否落在标定的空间内,若在已标定的空间内,则认为其颜色与已标定的颜色一样,这样就可以根据标定的封闭区域识别出图像中具有与标定颜色相同的物体。

  为了满足不同情况下应用的需求,颜色跟踪设置了2种模式。

  (1)帧处理模式

  该模式需要用户输入要跟踪的R、G、B三个颜色边界,构成一个RGB跟踪的颜色空间。然后处理器从图像的左上角开始,顺序逐行逐点的检查每一个像素。如果被检查的像素正好落入用户定义的颜色范围,就将这个像素标记为跟踪的;同时,需要记录被跟踪点中的最高点、最低点、最左点和最右点。如果检测到的像素位置在当前跟踪区域的标记框外,则需要增大标记框来包含该像素;同时,需要记录符合要求的像素的数量,当一帧图像扫描完成后,可以分别用符合要求的点的横纵坐标和除以符合要求的像素点数,得出被追踪物体的中心坐标[3]。

  这样在对一帧图像的一次扫描后,就可以得到被跟踪物体的中心坐标,同时处理器只需记录较少的全局变量,在时间复杂度和空间复杂度上都适合嵌入式系统。

  上述方法中,只有一个跟踪点就可以改变标记框,因此如果在跟踪过程中出现噪声点,就会对标记框产生影响。去噪的思想是:如果一个像素点周围的其他点也落在用户输入的RGB范围内,那么这个点就被认为是符合要求的。

  (2)行处理模式

  与帧处理模式不同的是,行处理模式在扫描完一行数据后就记录下所在行中符合要求的连续点的最左端坐标和最右端坐标,不妨分别记为(XnL,YnL)和(XnR,YnR)。在一帧图像处理完成后,会得到图3所示的图形。

采用图像传感器的CPLD视觉系统设计方法
图3 行处理得到的线形图

  根据得到的结果,可以计算出更多关于跟踪物体的信息:

  ①计算区域面积。计算每条线段的长度l(n),然后将l(n)进行累积叠加,即可获得跟踪区域面积值S。

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

  ②计算质心横坐标。

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

  ③计算质心纵坐标。

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

  ④识别物体的形状。根据得到的每行跟踪点的长度,以及同一行中有几段符合要求的连续跟踪点,可以得知物体从摄像头角度看到的形状。特别是在检测平面上线条时,可以识别是否有分支,这一点是帧处理模式无法做到的。

  需要指出的是,行处理模式虽然会得到关于跟踪目标的更多信息,但是每行处理的方式增大了处理器的负担,处理速度也没有帧处理快。

4 提高系统的工作速率

  目前,系统工作在帧处理模式下的工作速率是25帧/s,作为系统功能的验证,这里采用的算法是颜色跟踪。如果仅做纯粹的图像采集,而不做图像处理,那么系统可以达到OV6620的最高工作速率,即60帧/s。而在图像处理方面,不同的图像处理程序效率对系统的工作频率有较大的影响。下面给出在通用ARM处理器下提高程序效率的几个建议:

  ①内嵌(inline)可通过删除子函数调用的开销来提高性能。如果函数在别的模块中不被调用,一个好的建议是用static标识函数;否则,编译器将在内嵌译码里把该函数编译成非内嵌的。

  ②在ARM系统中,函数调用过程中参数个数≤4时,通过R0~R3传递;参数个数>4时,通过压栈方式传递(需要额外的指令和慢速的存储器操作)。通常限制参数的个数,使它为4或更少。如果不可避免,则把常用的前4个参数放在R0~R3中。

  ③在for(),while() do…while()的循环中,用“减到0”代替“加到某个值”。比如:

  for (loop = 1;loop <= total;loop++) //ADD和CMP

  替换为:for (loop = total;loop != 0;loop--) //SUBS

  第1种方式比较需要2条指令ADD和CMP,而第2种方式只需一条指令SUBS。

  ④ARM核不含除法硬件,除法通常用一个运行库函数来实现,运行需要很多个周期。一些除法操作在编译时作为特例来处理,例如除以2的操作用左移代替余数的操作符“%”,通常使用模算法。如果这个值的模不是2的n次幂,则将花费大量的时间和代码空间避免这种情况的发生。具体办法是使用if()作状态检查。

  比如,count的范围是0~59:

  count = (count+1) % 60;

  用下面语句代替:

  if (++count >= 60) 

  count = 0;

  ⑤避免使用大的局部结构体或数组,可以考虑用malloc/free代替。

  ⑥避免使用递归。

结语

  本文介绍了一种基于ARM和CPLD的嵌入式视觉系统,可以实现颜色跟踪。在硬件设计上,图像采集和图像处理分离,更利于系统功能的升级。而视觉处理算法更注重处理的效率和实时性,同时根据不同的需要有两种模式可供选择。最后给出了提高程序效率的一些建议和方法。与基于PC机的视觉系统相比,该系统功耗低、体积小,适合应用于移动机器人等领域。

关键字:OV6620  视觉系统  CMOS  EPM7128  SLPC2214 引用地址:采用图像传感器的CPLD视觉系统设计方法

上一篇:基于FX2系列PLC的电梯平层控制系统设计
下一篇:设计原理:如何在小尺寸DSP上实现2D条形码解码

推荐阅读最新更新时间:2024-03-16 10:57

英飞凌推出新型CMOS收发器MMIC CTRX8181 用于汽车雷达
11月3日,汽车半导体解决方案供应商英飞凌(Infineon Technologies)推出下一代创新雷达RASIC™ CTRX8181收发器,是基于28-nm CMOS技术的全新76 GHz至81 GHz雷达MMIC系列的首款产品。该收发器改进了信噪比和线性度,具有高系统级性能和弹性。此外,该雷达收发器易于使用,可同时为不同的传感器(包括角传感器、前传感器和短距离传感器)提供可扩展的平台方法,并为新的软件定义车辆架构提供灵活性,因此能以较低开发成本实现77 GHz汽车雷达应用。 图片来源:英飞凌 英飞凌汽车部门雷达MMIC产品营销主管Tomas Lucia表示:“新的CTRX8181收发器能够实现可靠的物体分离和检
[汽车电子]
英飞凌推出新型<font color='red'>CMOS</font>收发器MMIC CTRX8181 用于汽车雷达
TTL电平、CMOS电平、RS232电平区别
什么是TTL电平、CMOS电平、RS232电平?它们有什么区别呢?一般说来,CMOS电平比TTL电平有着更高的噪声容限。   (一)、TTL电平标准  输出  L:  0.8V  ;  H: 2.4V。  输入  L:  1.2V  ;  H: 2.0V  TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。于是TTL电平的输入低电平的噪声容限就只有(0.8-0)/2=0.4V,高电平的噪声容限为(5-2.4)/2=1.3V。   (二)、CMOS电平标准  输出  L:  0.1*Vcc  ;  H: 0.9*Vcc。  输入  L:  0.
[嵌入式]
移动机器人视觉系统的分类主要有那几种?
移动机器人视觉系统是指移动机器人的视觉系统,包括通过传感器获得图像,和通过计算机处理器对图像进行处理这两个部分。依据视觉传感器的数量和特性,主流的移动机器人视觉系统有单目视觉、双目立休视觉、多目视觉和全景视觉等。 1、单目视觉系统 单目视觉系统只使用一个视觉传感器。单目视觉系统在成像过程中由于从三维客观世界投影N维图像上,从而损失了深度信息,这是此类视觉系统的主要缺点。尽管如此,由于单目视觉系统结构简单、算法成熟且计算量较小,在自主移动机器人中已得到广泛应用。如用于目标跟踪、基于单目特征的室内定位导航等。同时,单目视觉是其他类型视觉系统的基础,如双目立体视觉、多目视觉等都是在单目视觉系统的基础上,通过附加其他手段和措施而实现的。
[机器人]
思特威发布全系列手机应用了CMOS图像传感器
在智能手机多摄像头系统及智能化摄像应用的发展趋势下,高性能智能手机相机的市场需求始终热潮不退。而CMOS图像传感器作为摄像系统的核心部件,在巨大的市场需求催动下不仅出货量连年动态范围等成像性能上也在迅速地迭代和精进。 近日,技术领先的CMOS图像传感器供应商思特威科技(SmartSens),全新推出了全系列手机应用图像传感器产品 | Cellphone Sensor (CS) Series产品—— SC200CS-mono/SC200CS-color,SC500CS,SC800CS,SC1300CS/SC1301CS,可覆盖2MP至13MP手机摄像头应用方案,满足智能手机客户的多元化需求,为智能手机摄像头提供行业领先的高品质成像性
[手机便携]
思特威发布全系列手机应用了<font color='red'>CMOS</font>图像传感器
基于FPGA的DDS调频信号的研究与实现
1 引言   直接数字频率合成器(DDS)技术,具有频率切换速度快,很容易提高频率分辨率、对硬件要求低、可编程全数字化便于单片集成、有利于降低成本、提高可靠性并便于生产等优点。目前各大芯片制造厂商都相继推出采用先进CMOS工艺生产的高性能和多功能的DDS芯片,专用DDS芯片采用了特定工艺,内部数字信号抖动很小,输出信号的质量高。然而在某些场合,由于专用的DDS芯片的控制方式是固定的,故在工作方式、频率控制等方面与系统的要求差距很大,这时如果用高性能的FPGA器件设计符合自己需要的DDS电路就是一个很好的解决方法,它的可重配置性结构能方便的实现各种复杂的调制功能,具有很好的实用性和灵活性。 2DDS调频信号发生器框图设计
[嵌入式]
克服CA元件成本问题 CMOS RF行情俏
载波聚合(CA)功能为射频元件所带来的多频多模需求,让功率放大器、天线开关、低杂讯放大器等射频元件必须涵盖较以往更多的频段处理通道,单位成本因而增加,因此许多射频元件商正积极寻求更高性价比的方案;其中,导入CMOS制程已成为一股明朗可见的趋势。 高通(Qualcomm)资深行销总监Carson表示,射频前端系统的主控制端主要还是在于数据机平台,而目前LTE数据机早已普遍采用CMOS制程,因此若射频前端系统亦能导入CMOS制程,将大幅提高LTE平台控制介面的整合度。 事实上,射频元件商正设法以CMOS制程为基础,开发出效能媲美传统砷化镓(GaAs)元件的解决方案,以符合高阶LTE行动装置对载波聚合的规格需求;而在高通R
[网络通信]
工业机器人堆垛视觉系统详解
学习就必须依靠自身的器官,除脑以外,最重要的就是我们的眼睛了,(工业)机器人也不例外,要完成正常的生产任务,没有一套完善的,先进的视觉系统是很难完成指定工作的。本文以工业机器人手部视觉系统为例,详细讲解了视觉系统实现的原理。 2.5D 视觉堆垛 视觉堆垛程序通过相机视野内目标比例的变化来估算目标的高度并引导机器人的运动补偿目标的偏移,不但包括X轴,Y轴和X-Y平面旋转度R,也同时包括Z轴。 使用2.5D允许机器人只借助一个普通2D相机来拾取码放堆集的目标。   视觉堆垛程序_1 (从寄存器R提取Z轴偏移) 此功能通过视觉计算寻找目标的2D位置和指定的寄存器数值,并引导机器人的运动补偿目标的偏移,不但包括X轴,Y轴和X-Y平面旋
[嵌入式]
一种CMOS欠压保护电路的设计
   1.引言   在电机驱动、UPS等系统中电压的稳定尤为重要,欠压、过压保护是必不可少的,因此通过在芯片内部集成过压、欠压保护电路来提高电源的可靠性和安全性。对功率集成电路,为提高电路的可靠性,保护电路同样必不可少。保护电路的设计要简单、实用,本文设计了一种CMOS 工艺下的欠压保护电路,此电路结构简单,工艺实现容易,可用做高压或功率集成电路等的电源保护电路。    2.工作原理分析   欠压保护的电路原理图如图1 所示。共由五部分组成:偏置电路、基准电压产生、欠压检测输入、比较器、反馈回路。   本电路的电源电压是15V,M1、M2、M4、R1 是电路的偏置部分,给后级电路提供偏置,电阻R1 决定了电路的工作点,
[模拟电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
最新安防电子文章
换一换 更多 相关热搜器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 视频监控 智能卡 防盗报警 智能管理 处理器 传感器 其他技术 综合资讯 安防论坛

词云: 1 2 3 4 5 6 7 8 9 10

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved