历史上的今天
返回首页

历史上的今天

今天是:2025年02月14日(星期五)

正在发生

2018年02月14日 | 基于ARM9 和Linux 的嵌入式视觉系统设计方案

2018-02-14 来源:eefocus

    1 引言

    视觉系统在现代工业生产自动化系统中应用非常广泛,主要集中于药品检测分装、印刷色彩检测、集成电路生产、精密电子产品装配、智能机器人识别导航等领域。随着Internet 的普及,现代社会已进入后PC 时代,嵌入式技术越来越与人们的生活紧密结合。

    嵌入式视觉系统可通过USB 总线等将图像的获取、图像处理、显示设备集成于一体,成本相对较低,体积小巧,可以方便地安装在载体身上,故研究嵌入式的视觉系统具有一定的实际意义。

    2 嵌入式视觉系统总体方案设计

    嵌入式视觉系统由嵌入式硬件平台、操作系统、图像采集和图像显示四大部分组成,原理框图如下图1 所示。

图1 视觉系统原理框图

     图1 视觉系统原理框图

    S3C2410X 芯片是韩国三星电子公司推出的一款基于ARM920T 内核的16/32 位RISC 嵌入式微处理器。该芯片集成了支持 TFT 的 LCD 控制器 、3 个通道的UART 等控制器和丰富的外部接口,MPLL 产生主时钟,能够使处理器工作频率最高达到203MHz,此工作频率能够使处理器轻松运行WinCE、Linux 等操作系统以及进行较为复杂的数据处理。该芯片可以满足低成本、高速度、低功耗的设计需求,非常适合作为嵌入式视觉系统的硬件平台。

    Linux 操作系统同目前广泛应用的嵌入式操作系统如pSOS、VxWorks、winCE 相比,具有可移植性好、网络功能强、有优秀的GNU 编译工具支持等优点,更重要的是Linux 的开放源代码和免费的优点使得系统成本显著降低,因此选用Linux 操作系统作为软件开发平台。

    3 嵌入式视觉系统硬件设计

    3.1 图像采集

    选购摄像头,优先考虑Linux 内核公开支持的摄像头芯片。由于目前Linux 操作系统使用的内核版本仅自带了ov511 芯片的摄像头驱动,因此,系统的图像采集模块由CMOS 图像传感器OV7620 和后端处理芯片OV511+组成。本系统在IIC 总线模式下通过设置OV7620 的功能寄存器,使OV7620 工作于连续扫描方式,RGB 原始数据16 位输出方式。OV7620 有4 个同步信号:VSYNC(垂直同步信号)、FODD(奇数场同步信号)、HSYNC(水平同步信号)和PCLK(像素同步信号)[3].当采用连续扫描方式时,只使用VSYNC 和HSYNC、PCLK 三个同步信号。通过设定内部寄存器,控制输出帧率在0.5 帧/s~30 帧/s 之间变化,窗口输出设置为:640×480,经过设定后的OV7620 输出时序如图2 所示:

图2 OV7620 输出时序图

     图2 OV7620 输出时序图

    3.2 图像传输

    图像采集帧率与数据传输接口的数据传输速率之间的匹配是图像采集的一个重要问题。如果图像传感器的采集频率大于接口的最大可传输数据率,会引起缓冲区内的图像数据堵塞,造成数据混乱,出现无规律的乱码。因此,为了保证图像数据传输时的完整性和可靠性,接口数据的传输速率应满足图像传感器的采集速率。下面是对本采集系统的传输匹配计算。

    已知:OV7620 的最大主时钟频率27MHz,最大数据率13.5MB/S.以OV7620 默认输出为例:输出格式VGA,分辨率640×480,帧率15 帧/秒,输出数据格式为16 位彩色数据。

    一帧图像的数据量: (640 × 480 × 16)/8=614400B=0.586MB.

    一秒钟的最大数据量:0.586×15=8.79MB/S.

    因为图像采集中图像数据不是连接不断的采集,帧与帧之间有场消隐时间,行与行之间也有行消隐时间,所以13.5MB/S> 8.79MB/S.基于这个采集速率,要实现VGA 图像15 帧/秒的图像采集,嵌入式主机与USB 接口速度应与图像传感器的采集速度相匹配,至少不能小于9MB/S 的速度,否则会出现数据在传输通道中堵塞,致使数据出现混乱。系统采用USB1.0 作为传输接口,系统采集的图像数据为9MB/S,USB 传输速率大于9MB/S,故采集频率与传输频率匹配。

    3.3 图像显示

    液晶显示器LCD 以省电和显示大量信息等优点而成为现代仪器仪表用户界面的主要发展方向。本视觉系统采用三菱公司的8.4'彩色TFT-LCD 作为图像显示模块, 液晶屏大小为640 × 480 , 型号:AA084VC03.

    系统需要两种电源供电,分别是5V 和12V.5V电源用于核心板供电,USB 图像采集模块由核心板供电,12V 电源给液晶屏供电,这些电压由单独的电源模块提供。整个视觉系统的硬件结构图如下图3 所示。

图3 视觉系统硬件结构图。

     图3 视觉系统硬件结构图。

    4 嵌入式视觉系统软件设计

    视觉系统软件组成主要包括操作系统、设备驱动程序,图像采集和图像显示程序。操作系统负责整个系统的管理,进程调度等,为用户使用开发板和外部设备提供最基本的接口程序,管理着开发板上的资源。

    移植Linux2.6.14 内核作为嵌入式视觉系统的操作系统。设备驱动程序包括USB 摄像头驱动和LCD 液晶屏驱动,通过在Linux 系统中配置和加载完成。

    4.1 图像采集程序

    确定USB 摄像头被正常驱动后,下一步就是使用Video4Linux 提供的API 函数集来编写图像采集程序。

    具体图像数据的捕获过程为:打开摄像头设备文件、查询和确认设备性能、设置图像的宽和高、设置色深、建立内存映射、读取图像数据、关闭设备。在上述过程中主要考虑如何读取图像数据,V4L 在内核include/linux/videodev.h 文件中定义了一些重要的数据结构,进行图像采集时,通过对这些数据结构的操作来获得图像数据。首先需要将显示设备的地址映射到系统地址上来,调用函数mmap()。该函数返回地址就是存放图像数据的地址, 每一帧图像都偏移固定的长度, 而摄像头取得图像会包含若干帧,这样通过周而复始的进行就可以将图像数据采集下来。具体过程和涉及到的函数如下:

    打开设备文件: int devICe = open (/dev/v4l/video0,O_RDWR);

    内存映射:char* memoryMap = (char*)mmap (0,memoryBuffer.size, PROT_READ PROT_WRITE,MAP_SHARED, device, 0);

    图像数据: memoryMap + memory Buffer.offsets[bufferIndex]

 

    4.2 图像显示程序

    本系统采用直接将数据写入FrameBuffer 中来显示图像。FrameBuffer 设备是运行在Linux 控制台上的一个优秀的图形接口,几乎支持所有硬件,提供了统一的API 接口,很好地实现了硬件无关性。FrameBuffer的设备节点是/dev/fb* , 在编译内核时选中FrameBuffer.LCD 显示程序流程图如图4 所示:

图4 图像显示程序流程图

     图4 图像显示程序流程图

    应用程序编写完之后,用交叉编译环境对这个文件进行编译,没有错误后可生成cam 可执行文件。然后把cam 拷贝到根目录下的bin 文件夹,在主机Windows 系统超级终端下输入命令:

    #ln -s /dev/v4l/video0 /dev/video0

    # cam 640 480 16 video0

    就可以在屏幕上看到采集的图像了。设计的嵌入式视觉系统样机如图5 所示。

图5 嵌入式视觉系统样机。

     图5 嵌入式视觉系统样机。

    5 视觉系统性能测试

    S3C2410 控制板的I/O 口资源有限,因此,对图像采集的控制信号线采用普通I/O 口,而不是用中断I/O 口与其摄像头模块相连,因此只能用软件实时检测I/O 的电平状态,决定何时采集开始,何时读数据,何时结束。为了采集到图像数据并能分辨出来,必须能够跟踪控制信号的变化状态。

    由于I/O 口的电平的变化频率远低于摄像头控制信号的变化频率,如果不对摄像头模块进行降频处理,这将导致I/O 口无法跟踪控制信号变化,即将无法判断帧、行、点何时开始与结束等状态信息。当摄像头的最高频率(点象素频率最高)降到1MHz 左右,系统就能跟踪并完整的采集到图像信息,进一步处理之后完好的显示出来。图6 是示波器对帧、行、点信号及Y0 信号的波形图。

图6 信号波形图。

     图6 信号波形图。

    从上图可以看出,系统的控制信号非常完整和稳定,没有出现毛刺、变形等情况,给检测读取带来了好处。Y0 的波形图有些段是低电平,出现的位置不一样,是因为摄像头移动时,环境光发生了变化,引起整个Y 数据变化。

    表1 采集到的实验数据(示波器采用x10 档)。

表1 采集到的实验数据(示波器采用x10 档)。

   把示波器调整到x10 档,在不同情况下,多次采集YSYN 信号、HREF 信号、PCLK 信号的峰-峰值、平均值、周期、频率等数据,从Y0~Y7 中选择Y0信号进行观察。从数据中可以看出各信号的峰-峰值变化幅度不大,尤其是信号的频率比较稳定。Y0 数据信号很规整,那么其他数据信号如Y1~Y7 也是如此。

    多次实验数据如下表1 所示。

    测试硬件性能稳定之后,在Linux 系统下把图像采集、图像显示和保存图像命令写成一个脚本,放在文件系统etc/init.d 目录下。重新把文件系统下载到开发板里,当开机启动后,系统会自动执行图像采集、显示和保存。

    6 结论

    本文主要基于S3C2410 开发板和Linux 操作系统设计了嵌入式视觉系统。该视觉系统不仅可以较好地实现图像采集和显示,还可实现图像存储、网络获取图像等功能,并且可以在该基础上研究图像处理等算法。与基于PC 组合的视觉系统相比,结构简单,体积和重量减小,功耗低,可移植性强、功能扩展方便,成本显著降低,所以对这种嵌入式视觉系统研究具有相当重要的实用价值。


推荐阅读

史海拾趣

ELMEC Technology Of America Inc公司的发展小趣事

随着产品的不断完善,ELMEC开始考虑如何进一步拓展市场。然而,国际市场的竞争异常激烈,ELMEC的产品面临着来自各大跨国公司的挑战。为了打开市场,李明带领团队深入调研,了解客户需求,不断优化产品性能。同时,他们还积极参加各类国际展会,与潜在客户建立联系。经过几年的努力,ELMEC的产品逐渐获得了市场的认可,销售额也稳步增长。

Elpakco Inc公司的发展小趣事

面对全球化的市场竞争,Elpakco Inc公司积极实施全球化战略。公司先后在欧美、亚洲等地设立了分支机构,与当地企业开展合作,共同开拓市场。同时,公司还积极参加国际电子展会,展示公司的最新技术和产品,提升了公司的国际知名度和影响力。

Compensated Devices Inc公司的发展小趣事

在电子行业竞争激烈的年代,CDI始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。正是这种对品质的执着追求,使得CDI的产品在客户中赢得了良好的口碑。随着口碑的积累,CDI逐渐发展成为电子元件领域的知名品牌。

Amplitronix LLC公司的发展小趣事

随着公司的规模不断扩大,Amplitronix LLC开始重视内部管理和企业文化的塑造。他们引进了一系列先进的管理理念和方法,优化了公司的组织结构和管理流程。同时,公司也注重员工的培训和发展,为员工提供了广阔的职业发展空间和良好的福利待遇。这些措施不仅提升了员工的工作积极性和满意度,也为公司的长远发展奠定了坚实的基础。

BELLING LEE公司的发展小趣事

在激烈的市场竞争中,BELLING LEE公司始终坚持品质至上的原则。公司从原材料采购、生产制造到售后服务都严格把关,确保每一款产品都能达到高品质标准。这种对品质的执着追求赢得了客户的信任和好评,也为公司赢得了良好的口碑和品牌形象。

Elekon Industries公司的发展小趣事

随着技术的不断进步和市场需求的不断变化,Elekon意识到只有不断创新才能保持竞争力。因此,公司加大了研发投入,致力于技术创新和产品升级。经过多年的努力,Elekon成功开发出一系列具有自主知识产权的电子产品,包括高性能的集成电路、智能传感器等。这些新产品的推出不仅丰富了Elekon的产品线,也提升了公司的市场竞争力。

问答坊 | AI 解惑

频谱可用性对移动电视解决方案的影响 (转贴)

在移动运营商寻求非语音业务收入增长时,终端用户对高级多媒体应用范围和业务的需求也在飞速增长。那些期望从其他来源获取收入增长的运营商在可下载游戏、应用程序和音轨等方面已取得成功。移动电视提供了一个潜在的盈利业务,这是当前很多运营商考 ...…

查看全部问答>

列车电气规范

可能需要的朋友会用到 en50126…

查看全部问答>

这个时钟走时误差太大了

刚做好一个时钟(还要谢谢帮我修改程序的那些热心的朋友们),装好运行后发现每走一小时就要快5分钟左右,一天下来就差不多快了两小时。12MHz的石英晶振换过了,那两只电容也由原来的33P换到22P,再换到12P还是不行。我把电路原理图和工程文件一起 ...…

查看全部问答>

小弟出入嵌入式,希望前辈给点指点

如题 谢谢啦 本人另建QQ高级群一个 92208632 嵌入式 大家可以互相学习…

查看全部问答>

uCGUI中文手册

μC/GUI μC/GUI 是一种用于嵌入式应用的图形支持软件。它被设计用于为任何使用一个图形LCD的应用提供一个有效的不依赖于处理器和LCD 控制器的图形用户接口。它能工作于单任务或多任务的系统环境下。μC/GUI 适用于使用任何LCD 控制和CPU 的任何尺 ...…

查看全部问答>

如何使用2440GPIO模仿SPI口通讯

大家好。现在想使用2440的GPIO模拟SPI口通讯,主控制器是2440主板,从器件是LCD屏驱动器 2440主频工作在400Mhz LCD屏驱动器SPI口频率不超过20Mhz。 现在发现GPIO输出频率可能过高 使用2440的GPIO模拟SPI口通讯,GPIO的频率要怎么控制呢?会不会 ...…

查看全部问答>

西门子MC39I插卡无法启动

我的MC39I不插卡时能启动,插卡后启动不到5秒就自动关闭了,有哪位大侠知道是什么原因,是电源有问题吗,请高手指点,最好能提供一个电源解决方案,另外,我的模块直接接的SIM卡,SIM卡各引脚之间没有接电容,或电感,这有影响吗?…

查看全部问答>

用编程器读取出来的数据怎么读解??

兴趣学者,请教大家一个问题,用编程器从芯片里读取出来的数据都是16进制的,ASCII码显示是很乱,我该用什么方法读解??谢谢大家…

查看全部问答>

新手问题。EVC新建一个工程不能选CPU类型?

启动EVC新建一个工程不能选CPU类型呢?所有的CPU类型全部是灰色的?在Tools->confure platform manage下能手动启动模拟器,。。。。。另外,点Tools->Options->Directories程序就异常退出了?这是为什么?…

查看全部问答>

寄存器如何正确映射到虚拟内存里?

我写了一个读写iic的程序.对寄存器进行操作的时候出错了. 程序头 #define rGPECON    (*(volatile unsigned *)0x56000040) //Port E control #define rGPEDAT    (*(volatile unsigned *)0x56000044) //Port E data #def ...…

查看全部问答>