DIY编程器网

标题: 数字式CMOS摄像头在智能车中的应用 [打印本页]

作者: admin    时间: 2015-5-2 11:11
标题: 数字式CMOS摄像头在智能车中的应用
  引言
  飞思卡尔智能车比赛已经成功举办4届,以摄像头为主要传感器的参赛队伍大多数选用了模拟CCD或模拟CMOS摄像头。本文介绍了数字式CMOS 摄像头MT9M011的性能特点和工作方式,给出了MT9M011在基于HCSl2单片机的智能车控制系统中的应用方案,并分析了数字摄像头的优势和不足。
  1 CMOS图像传感器的特点
  CMOS图像传感器可通过CMOS技术将像素阵列与外围支持电路(如图像传感器核心、单一时钟、所有的时序逻辑、可编程功能和A/D转换器)集成在同一块芯片上。与CCD(电容耦合器件)图像传感器相比,CMOS图像传感器将整个图像系统集成在一块芯片上,具有体积小、重量轻、功耗低、编程方便、易于控制等优点;同时,可通过I2C、SPI等接口配置其曝光时间、增益控制等功能,可控性强。因此,CMOS图像传感器的应用已经变得越来越广泛。
  2 MT9M011的性能特点与工作方式
  2.1 MT9M011的基本参数
  MT9M011是一款:Mieron公司推出的RGB三基色的130万像素数字式CMOS摄像头,具有可编程控制及数字信号输出等功能。其输出为Bayer彩色格式,图像尺寸为4.6 mm×3.7 mm,像素尺寸为3.6 μm×3.6 μm,最大分辨率为1 280×1 024,支持的最高时钟频率为25MHz;A/D转换精度为10位,最大信噪比为44 dB,在最高分辨率模式下功耗为129 mW。
  MT9M011输出为逐行扫描的数字信号,通过内嵌的10位ADC将模拟视频信号采样量化后同步输出10位数据流。同时,MT9M011还提供像素时钟(PIXCLK)、行有效信号(LVAL)、帧有效信号(FVAL),以及配置MT9M011所需的I2C协议引脚SCLK和SDAT。
  2.2 MT9M011的编程功能
  MT9M011有25个寄存器,涉及摄像头的各个方面,通过与I2C兼容的串行总线时序读写。结合智能车竞赛应用重点介绍以下寄存器:
  ①行起始寄存器(Ox01)和列起始寄存器(Ox02)。这两个寄存器决定输出图像的起始点坐标。利用这两个寄存器可以软件调节摄像头采集到的图像整体位置。
  ②行宽度寄存器(0x03)和列宽度寄存器(Ox04)。MT9M011的一大特色就是输出数据的图像大小可以任意调整。通过这两个寄存器可以针对当前的应用环境(即赛道)设置合适的图像范围。
  ③曝光时间寄存器(Ox09)。该寄存器的值决定了摄像头采集一帧图像时感光元器件的感光时间。通过调整该寄存器值的大小可以直接调整图像的成像质量。
  ④数据读取模式寄存器(Ox20)。该寄存器可以使输出的行数据和列数据减少至1/2或者1/4,也可以使输出的图像镜面对称。
  ⑤增益设置寄存器。它又包含Greenl分量增益设置寄存器(Ox2B)、Blue分量增益设置寄存器(Ox2C)、Red分量增益设置寄存器 (Ox2D)、Green2分量增益设置寄存器(Ox2E)和全局增益设置寄存器(Ox2F)5个寄存器。由于RGB分量对同一光源表现出不同的数值,因此需要针对不同的光源情况分别调整前4个寄存器的值,而这也是这款摄像头最大的缺点。
  2.3 MT9M011的数字图像输出
  2.3.1 Bayer彩色格式输出
  MT9M011的输出为Bayer彩色格式(Bayer color pattern)。这种输出格式直接将滤波阵列上每一个像素点对应的保留基色模拟电平值,通过A/D转换后按时序先后输出。图1展示了这种输出格式对应的局部像素点阵。其中,黑色像素点为输出有效数据的第一个点。


  2.3.2 MT9M011的输出信号时序
  像素数据输出时序和帧与行有效信号时序分别如图2和图3所示。像素时钟与主时钟同频,在一帧图像开始输出时帧有效信号由低电平变为高电平,一帧输出结束时由高电平变为低电平;而行有效信号则在一行数据输出有效时由低电平变为高电平,一行数据输出完成后由高电平变为低电平。根据MT9M0ll的输出信号时序就能正确地采集整帧图像。图3中,P为帧消隐区,A为有效数据区,Q为行消隐区。


  3 MT9M011在智能车控制系统中的应用
  3.1 硬件设计
  MT9M011的电平是3.3 V,而HCSl2单片机系统的I/O电平是5 V,因此需要通过电平转换芯片将摄像头输出数据的电平提升到5V。结合MT9M011的输出信号时序关系和HCSl2单片机的特点,本文利用HCSl2的 ECT模块提取MT9M011的帧有效信号的上升沿,采用ECT模块对应引脚的普通I/O口功能采集行有效信号的上升沿。MT9M011的数据输出信号有 10位,鉴于赛道环境相对简单,只截取高8位作为摄像头信号输出,既可以保证图像分辨率,又可节省HCSl2的存储空间。HCSl2单片机本身带有一个标准的I2C模块,直接使用这个模块与MT9M011的SCLK和SDAT相接。
  3.2 软件设计
  3.2.1 HCSl2单片机I2C模块配置
  HCSl2单片机提供标准的I2C模块,SCLK引脚能产生多种时钟频率,支持主从模式,设有多种标志位以供查询。初始化I2C模块时需要完成以下工作:
  ①设置IBFD寄存器,使产生的SCLK信号能够对MT9M011进行正常的配置;
  ②设置IBEN寄存器位,使能I2C模块;
  ③设置IBCR,确定I2C模块的主、从模式,收、发模式以及是否使能中断功能等。
  3.2.2 MT9M011图像数据采集
  受限于单片机时钟的约束关系,HCSl2的通用I/O口无法检测摄像头像素时钟信号跳变,本文采取以固定周期采集一行数据的方法。因此,采集像素数据的关键是准确地采集帧有效信号的上升沿和行有效信号的上升沿。选用的方案是:使用HCSl2单片机的ECT模块采集帧有效信号的上升沿,使用ECT 模块普通端口模式采集行有效信号的上升沿。
  采集对象要求纵、横分辨率都不能过低,而HCSl2内部存储空间有限,无法为高分辨率提供有利支持。针对这一矛盾,利用一个像素
  与其周围点的值的关联性,以及摄像头所具有的隔行和隔列输出功能进行跳采集。确定了1 280x 480的分辨率和行列均跳4行采集的模式,
  同时软件上再进行一次隔行采集,最终可得80×60=4 800个像素数据。采集数据的流程如图4所示。


  3.2.3 采集图像时遇到的问题及解决方法
  (1)摄像头晶振的选择
  MT9M011晶振的选择是一个很重要的问题,如果一帧图像的时间超过20 ms,就无法体现它的主要优势。同时,也要考虑到HCSl2单片机的限制,HCSl2的总线频率最大可达到32 MHz,而在此条件下如果MT9M011的晶振选取过大,则每一行采集到的点数过少。
  通过式(1)可计算出MT9M011输出一帧图像所需的时间:


  式中:ColNum+HBlanking和RowNum+VBlanking分别表示包含空白数据的总列数和总行数;fcamera表示摄像头晶振频率,在一帧图像大小已经确定的情况下,该值越大则一帧时间越短。
  通过式(2)可计算出单片机一行采集像素点的个数:


  式中:RowPixNum表示一行能采集到的数据;ColNum表示每一行中输出的像素数据个数;Tcamera是摄像头晶振,fcamera 的倒数;Cycle表示一个采集周期使用的机器周期数,在整个采集过程中固定不变的;fbus表示单片机的总线周期。从式(2)可知,在fbus一定的情况下,camera越小,则一行采集到的数据就越少,这样不利于数据分析。
  综合考虑,最终确定使用8 MHz的晶振作为MT9M011的时钟,而采用16 MHz晶振作为HCSl2的时钟,单行采集80个点,可满足路径识别的需要。
  (2)摄像头曝光时间和增益的设置问题MT9M011是一款RGB三基色的彩色摄像头,采集到的数据为Bayer彩色格式。由于提取的是赛道上的黑线信息,图像环境相对简单,因此这里直接将每一个分量的值作为该点像素的灰度值处理。


  如图5(a)所示,在使用默认曝光时间和增益时采集得到的图像有明显的隔行噪声效应,而且在一行间也有明显的干扰噪声存在。这是因为同一光源对于RGB三种分量所体现出的数值不同,直接将其当作灰度值处理会产生恢复的图像不均匀、噪声大的现象。解决办法是通过多次
  实践调整摄像头的曝光时间和RGB每个分量的增益值,使3个分量在同一光源下反应出的数值基本一致。经过调整后得到的图像如图5(b)所示。
  4 数字式CMOS摄像头与模拟摄像头比较
  数字式CMOS摄像头MT9M011最大的优势在于节约时间。选用合适的晶振及图像大小能将整个小车控制周期限制在20ms左右。笔者曾经做过实验,选用20MHz的晶振作为摄像头时钟,将单片机倍频到32 MHz。在这种条件下,一个控制周期的反应时间甚至能缩短到4ms左右,与模拟摄像头的40 ms一帧图像相比有明显的优势。MT9M011的另一个优势是图像大小可以任意设置,因此笔者可以软件调整图像的大小和视野的高度,且MT9M011与单片机接口简单,很大程度上减轻了硬件负担。
  MT9M011在智能车比赛应用中也具有一些缺点。它不能自动适应各种光源,需要人工进行调整;同时,它的动态特性不如CCD摄像头好,这点可以通过提高摄像头晶振时钟来缩短采集周期解决。
  结语
  本文介绍了数字式CMOS摄像头MT9MOll在基于HCSl2单片机的智能车中的应用,并针对数字摄像头与模拟摄像头的各自特点进行了比较。实践表明,选用数字式CMOS摄像头作为智能车路径识别传感器是可行的。
作者: 李小路    时间: 2020-10-1 16:05
谢谢分享!




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2