基于ARM和CPLD的嵌入式视觉系统设计

发布者:AngelicJourney最新更新时间:2011-08-04 关键字:嵌入式  视觉系统 手机看文章 扫描二维码
随时随地手机看文章
    简介:搭建一种低成本的嵌入式视觉系统,系统由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所示。

 

  按此在新窗口浏览图片

  图1 系统结构框图

 

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

 

按此在新窗口浏览图片

  图2 OV6620输出时序图

 

  在Verilog语言中,对上升沿的检测是通过always语句来实现的。例如检测时钟信号cam_pclk的上升沿:

 

 按此在新窗口浏览图片

  图3 行处理得到的线形图

 

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

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

  按此在新窗口浏览图片

  ② 计算质心横坐标。

  按此在新窗口浏览图片

  ③ 计算质心纵坐标。

  

按此在新窗口浏览图片

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

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

 

  简介:搭建一种低成本的嵌入式视觉系统,系统由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摄像头采集来的数据进行实时处理,根据物体的颜色计算出被追踪物体的质心坐标。下面分别描述系统各部分的功能。[page]

 

  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]。

 

按此在新窗口浏览图片

  图2 OV6620输出时序图

 

  在Verilog语言中,对上升沿的检测是通过always语句来实现的。例如检测时钟信号cam_pclk的上升沿:

 

 按此在新窗口浏览图片

  图3 行处理得到的线形图

 

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

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

  按此在新窗口浏览图片

  ② 计算质心横坐标。

  按此在新窗口浏览图片

  ③ 计算质心纵坐标。

  

按此在新窗口浏览图片

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

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

 

  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机的视觉系统相比,该系统功耗低、体积小,适合应用于移动机器人等领域。

关键字:嵌入式  视觉系统 引用地址:基于ARM和CPLD的嵌入式视觉系统设计

上一篇:基于CPLD/FPGA的多串口设计与实现
下一篇:CDMA 2000系统中前向链路卷积编码器的FPGA实现

推荐阅读最新更新时间:2024-05-02 21:31

物联网创客指南:MCU设计的最佳实践和除错技巧
在本节中,SiliconLabs将分享在软件开发方面的经验教训。关键词extern,staTIc和volaTIle都是什么?你应该在你的代码中使用递归还是malloc()?下面就随网络通信小编一起来了解一下相关内容吧。 1)查找硬件设备的现有软件示例 开发任何嵌入式解决方案的第一步是找到可以使您的任务更简单的示例。您在自定义解决方案中找到的特定部分的软件示例将帮助您以另一种方式“查看”设备,并帮助您重新解释设备规格,即使这些示例是针对其他计算机架构或软件语言的。 2)编译器的代码 没有完美的计算机软件语言。所有语言都有自己的优势和弱点。用于EFM32家族的Simplicity Studio中使用的软件语言是C。C语言有着
[网络通信]
Spansion携手德州仪器整合嵌入式处理器
    整合Spansion NOR 闪存和TI ARM® 微处理器的Dave Lizard CPU模块,为家庭自动化和工业控制领域提供高性能和出色交互性的解决方案     2011年6月17日,中国上海—业内领先的NOR闪存提供商Spansion公司(NYSE: CODE)今日宣布公司将与德州仪器(TI)和一家意大利系统设计公司Dave开展合作,共同致力于开发针对家庭自动化和工业控制领域的高性能、出色交互性的解决方案。Dave公司正在开发完整的CPU模块——Lizard主板,该主板整合1Gb Spansion GL NOR闪存以及TI AM3517/AM3505 Sitara™ ARM®微处理器,将呈现出丰富的二维和三维实时
[嵌入式]
在C51系统上实现YAFFS文件系统
随着NAND Flash存储器作为大容量数据存储介质的普及,基于NAND闪存的文件系统YAFFS(Yet Another Flash File System)正逐渐被应用到各种嵌入式系统中。本文将详细阐述YAFFS文件系统在C51系统上的实现过程。 1 NAND Flash的特点 非易失性闪速存储器Flash具有速度快、成本低、密度大的特点,被广泛应用于嵌入式系统中。Flash存储器主要有NOR和NAND两种类型。NOR型比较适合存储程序代码;NAND型则可用作大容量数据存储。NAND闪存的存储单元为块和页。本文使用的Samsung公司的K9F5608包括2 048块,每一块又包括32页,一页大小为528字节,依次分为2个256
[单片机]
嵌入式学习笔记13——51单片机之D/A转换器
1. 在很多应用系统中,测控对象是模拟量,单片机只能处理数字量,因此必须进行数字量和模拟量之间的转换。这就需要A/D和D/A转换器件。 2. 假如某D/A可输入8位数字,最高输出5V电压,则输入x,输出电压值为x*(5/256)V。 3. 分辨率是指输入数字量的最低有效位(LSB)发生变化时,所对应的的输出模拟量(电压或电流)的变化量。它反映了输出模拟量的最小变化值。即,最大输出模拟量/(2^位数)。 4. 线性度(也称非线性误差)是实际转换特性曲线与理想直线特性之间的最大偏差。常以相对于满量程(即最大输出模拟量)的百分数表示。(假设DAC位8位,满量程为5V,则理想直线为连接(0,0V)和(255,5V)之间的直线。 5.
[单片机]
嵌入式开发技巧:ARM的三种中断调试方法
简介: 参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。 1嵌入式软件开发流程 参照嵌入式软件的开发流程。第一步:工程建立和配置。第二步:编辑源文件。第三步:工程编译和链接。第四步:软件的调试。第五步:执行文件的固化。 在整个流程中,用户首先需要建立工程并对工程做初步的配置,包括配置处理器和配置调试设备。编辑工程文件,包括自己编写的汇编和C语言源程序,还有工程编译时需要编写的链接脚本文件,调试过程中需要编写存储区映像文件和命令脚本文件,以及上电复位时的程序运行入口的启动程序文件。 对后四种文件的理解很重要,其作用解释如下。
[单片机]
庆祝嵌入式系统联谊会正式成立10周年,第24次即将上演
2018年是嵌入式系统联谊会正式成立10周年,过去的10年里,在嵌入式系统产学研各界朋友的支持下,联谊会成功地举办了23次主题讨论会,讨论的议题涉及嵌入式系统、集成电路、物联网和人工智能等多个技术和产业领域,以及教育和人才培养。嵌入式系统联谊会主题讨论会举办地从北京延伸到上海、深圳和成都, 超过2000人次参加了我们的会议,媒体报道超过160余篇,《单片机与嵌入式系统应用》《电子产品世界》等媒体写了专题报道。此外,联谊会还与其他知名的机构合作协办了若干场相关的产业活动。在不懈的努力之下,嵌入式系统联谊会在中国嵌入式系统业界具有了一定的知名度! 11月24日,上午主题讨论会是一场大型的报告会,主题是“物联网与人工智能时代的嵌入式
[嵌入式]
庆祝<font color='red'>嵌入式</font>系统联谊会正式成立10周年,第24次即将上演
康耐视视觉系统简化激光焊接技术
位于Schramberg的Trumpf激光公司开发和生产配有固体激光器的机器和系统,它们被部署在汽车和医疗等行业的应用环境中。此外,公司的产品还应用于一项特殊的工业环境中,即对由不同金属制成的小零件进行精密焊接。 Trumpf决定把视觉技术整合到激光焊接机的光学扫描仪中,该产品同时也称为PFO (可编程焦点的光学仪器)。公司的目标是为客户提高产品的灵活性和精确性,同时加快产品的生产过程。 视觉技术—— 具有战略意义的解决方案 在公司当前的生产环境中整合视觉系统堪称一项具有战略意义的决策。视觉系统无需手工操作就可以根据每一个零件的位置和大小自动调整焊接位置。该系统能够自动测定坐标转换数据,并且对没有视觉系统操作经验的员工来说,具
[嵌入式]
‌高度集成的嵌入式处理器如何推动工业机器人的发展
随着半导体技术的进步,以及对更智能、更安全和更高效系统的需求不断增长,工业机器人最近几年经历了一场显著的变革。 这场变革的核心是使用先进的嵌入式处理器,这种处理器采用片上系统 (SoC) 架构,集成了包括外设和硬件加速器在内的各种元件。 这些处理器在增强工业机器人的功能方面发挥着至关重要的作用,使它们能够精准、快速和可靠地执行任务。本文中,我们将深入探讨高度集成的嵌入式处理器在推动工业机器人发展方面发挥的作用。 工业机器人和嵌入式处理器简介 工业机器人是指在工业环境中用于执行各种任务的自动化机器,如铰接式机械臂(图 1)等。这些机器人执行的任务范围非常广,从简单的装配操作到焊接、喷漆和物料处理等复杂的制造过程。 图
[机器人]
‌高度集成的<font color='red'>嵌入式</font>处理器如何推动工业机器人的发展
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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