高速摄像头数据采集系统设计及算法研究*
2017-11-03杨红莉曾宪阳郁汉琪
杨红莉,曾宪阳,郁汉琪
(1.南京工程学院数理部,南京 211167;2.南京工程学院工业中心,南京 211167;3.南京大学数学系,南京 210093)
高速摄像头数据采集系统设计及算法研究*
杨红莉1,3,曾宪阳2,3*,郁汉琪2
(1.南京工程学院数理部,南京 211167;2.南京工程学院工业中心,南京 211167;3.南京大学数学系,南京 210093)
由于摄像头输出图像数据量大,像素同步信号PCLK频率高,无法被众多学者所熟知的51单片机采集到。提出了以牺牲程序空间来换取执行速度的程序框架,提高了数据采集效率与速度。为避免图像错位,提出将行中断设为高优先级。为避免采集到无效数据,指出行采集时间段必须与行中断信号高电平区间对齐。实验结果表明,51单片机运行此程序能够很好的采集摄像头图像数据,给用户带来方便的同时也节约了FIFO成本。
电子技术;摄像头;51单片机;行中断信号;隔行采样;驱动算法
摄像头原理较为复杂,输出图像数据量很大,单片机要想采集到正确的图像信息,往往需要与像素信号PCLK同步,而PCLK的频率高达8.8 MHz左右,一般只有飞思卡尔、STM32、DSP等高速单片机才能满足要求[1-3]。对于大多数熟悉51单片机的学者来说,由于其速度限制,一直不能用51单片机来驱动摄像头。为此摄像头厂家对此进行了改进,增加了价格较高的FIFO缓冲器,以至于低速单片机如AVR、403等不同步PCLK信号也能对改进后带FIFO的摄像头进行控制,但成本明显增加[4-5]。还有些学者为了满足低速单片机驱动摄像头要求,刻意通过修改SCCB寄存器将摄像头输出分辨率调低,这将影响图像输出质量[4-5]。本文以不带FIFO的OV6620摄像头为例(其他摄像头与此类似),深入分析其工作原理,在不改变摄像头默认输出分辨率的前提下,提出以低速51单片机驱动摄像头解决方案,并通过实验验证该方案的可行性。
1 摄像头工作原理
OV6620摄像头工作电压为5 V,工作制式有两种,在NAL制式下,每秒输出25帧图像,每帧图像分为奇偶两场,因此每秒输出50场图像。在不改变配置寄存器SCCB时,其默认输出的图像为356像素×292像素,因此一副图像可定义为292行,每行有356个像素点。一副图像是逐行按序输出的,并且每行像素点数据又是逐个按序输出[6-8]。
如图1所示,一副图像包括2次场中断申请信号VSYNC以及292次行中断申请信号HREF,场中断申请信号用来表示一场图像数据输出的开始与结束,行中断申请信号表示每行数据输出的开始。在行中断申请信号的高电平期间,该行356个像素点的灰度数据将在像素同步时钟PCLK的同步下,按序通过数据口Y0-Y7引脚输出。行中断申请信号低电平期间为消隐及曝光时间,此时数据输出无效。为避免图像错位,必须保证每行像素点数据严格对齐,因此在读取各像素点数据时,应当在PLCK信号的同步下进行[9-13]。
图1 OV6620摄像头信号输出时序图
2 低速单片机驱动方案
2.1 存在的问题分析
通过对摄像头工作原理分析,结合示波器观察得知,OV6620每隔110 ns将会输出一个像素点数据。因此只有机器周期必须远小于55 ns的高速单片机,才能捕捉到像素同步时钟PCLK。而对于51单片机来讲,即使在24 MHz的较高晶振频率下,其机器周期已达到500 ns,速度上不能满足要求。而且51单片机片内RAM容量太小,仅为128 byte,不能暂存像摄像头庞大的数据。
2.2 本文的驱动解决方案
本文的将从两方面解决此问题。一方面尽可能提高51单片机速度,且增加片内RAM大小。选用当前市场流行的国产增强型51单片机STC12C5A60S2[14],其内部已扩展1 024 byte RAM,可方便进行数据缓冲,程序存储器Flash有60K之多,可以用来存放较大程序。外部晶振频率采用22.118 4 MHz,先从硬件上提高其运行速度。在软件设计上,汇编语言程序往往可取得更高的运行效率及执行速度,但对于多数单片机工程师来讲,对汇编语言并不常用,本文将设计一种特殊结构的C语言程序以达到汇编语言相同的执行效率,从而提高单片机执行速度。
在另一方面,研究出一套适合低速51单片机的数据采集方案。根据文献[6]分析可知,PCLK同步信号主要是防止读取的图像错位,是否必须跟PCLK信号同步才能保证图像不错位呢?答案是否定的。在行中断信号到来后的高电平期间,只要时间间隔均匀的采集该行数据,即使不跟PCLK信号同步,也可获取一副正确的图像。每行上有356个像素点,单片机假设只采样50点,这50点可通过采集—延时—采集的方式,将50点平均分布在该行上。读者也许会有疑惑,采样到的50点数据是否存在无效数据?设前一个像素点数据为70,后一个像素点数据75,那么即使采样时PCLK不是高电平,采集到的值也会在70~75之间,因此不会出现图像错位问题。由于每行采样点比实际像素点少,那么应采用隔行采集的方式与列数对应,形成图像比例缩放。当然为使数据采集过程中不被干扰,必须将行中断设置为高优先级,这些方案将在下文实验中进行验证。
2.3 硬件电路原理图
硬件电路连接如图2所示。要获取黑白图像,只需采集Y0-Y7端口数据即可。场中断请求信号HREF采用下降沿触发,接至单片机外部中断1引脚。行中断请求信号VSYNC采用上升沿触发,经非门取反后接至单片机外部中断0引脚。采用带有滞回比较器功能的非门可有效消除干扰信号。
图2 硬件电路连接图
2.4 软件程序编写
软件编程时应尽可能提高数据采集速度,初始化程序中,首先在RAM中开启一个二维数组,用来存放采集的图像数据。设置行中断为高优先级中断,场中断为低优先级别中断。当场中断信号到来后,使能数据接收,当行中断到来后,设系统每隔7行采集1行数据,如果行中断满足条件,则开始采集数据。设图像数据采集30行30列,行数据采集的汇编程序代码如下:
MOV DPTR,#0000H
LOOP:MOV A,P1
MOVX @DPTR,A
MOV A,DPL
CJNE A,#30,LOOP
由于汇编程序不便于移植,下面将写出对应的C语言程序代码如下:
void ReadOv6620Data()
{ for(H=0;H<30;H++)
{ for(L=0;L<30;L++)
{Pixel_Y[H][L]=IO6620;delay_ov6620();}
}}
以上程序代码虽然精简,可读性好,但在运行中反复进行了for循环判断来决定程序流向,耽误了大量的时间,这也是C语言编程效率比汇编低的最主要原因。本文将去除循环判断,直接按序向下编写读写程序,程序读写中,按照读—写—读—写的模式将数据按序直接存入到RAM中,也即采用了牺牲程序空间来提高数据采集速度的方法,达到与汇编程序相同的执行效率,而对于本文选用的单片机程序存储器容量足够满足要求。根据此思路编写的数据采集部分完整程序代码如下:
void xie0() //读第1行数据并写入到数组
{ CS_P10=0;
Pixel_Y[0][0]=IO6620;delay_ov6620();
Pixel_Y[0][1]=IO6620;delay_ov6620();
…
Pixel_Y[0][28]=IO6620;delay_ov6620();
Pixel_Y[0][29]=IO6620;
CS_P10=1;}
……
void xie29() //读第29行数据并写入到数组
{ CS_P10=0;
Pixel_Y[29][0]=IO6620;delay_ov6620();
Pixel_Y[29][1]=IO6620;delay_ov6620();
…
Pixel_Y[29][28]=IO6620;delay_ov6620();
Pixel_Y[29][29]=IO6620;
CS_P10=1;}
void ReadOv6620Data()//数据读取、处理、发送
{ if(ReadOv6620Data_EN==1)
{ switch(PixelRow)
{ case 0:xie0();break;
case 1:xie1();break;
…
case 28:xie28();break;
case 29:xie29();break;}
ReadOv6620Data_EN=0;
PixelRow++;}
if(HrefStartFlag==1)//确认场中断到来
{ RowCount++; //行计数器加1
if((RowCount>20)&&(RowCount%7)==0)
{ ReadOv6620Data_EN=1;}
if (RowCount>=226)
{RowCount=0; //行计数器清零
HrefStartFlag=0;//场中断标志清零
PixelRow=0;//数组行计数清零
ReadOv6620Data_EN=0;//读使能清零
EX0=0;
PixelBinary();//图像二值化处理
SEND(); //通过串口发送给上位机
delay_ms(1000);//一副图片发送完毕
EX0=1;} }}
根据以上思路,数据采集及通过串口上传至上位机的完整程序流程图如图3、图4所示。
图3 主程序流程图
图4 行中断子程序流程图
3 实验及分析
3.1 实验验证
在keil C51编译环境下编译以上程序,在延时函数delay_ov6620()中调整不同的延时参数,然后下载代码至单片机。用摄像头拍摄黑色的“A”字,将摄像头的VTO模拟图像输出端接至装有视频采集卡的PC机上观察视频图像,单片机将采集到的图像数据经二值化处理后,通过串口发送给上位机软件(串口调试助手)得出二值化图像,与上位机视频图像形成对比,其中二值化阈值设置为0X55。同时用SIGLENT SDS2204四通道示波器观察行、场中断信号及行采集时间信号,得出以下实验结果。
图5展示了实验中每行采集时间为35 μs时的二值化图像。图5(a)为上位机视频采集卡采集到的视频图像。图5(c)中粉色波形为行中断输出信号,每个周期代表一行,其中高电平时间段为该行有效数据输出时间,低电平时间段数据输出无效。黄色波形为单片机采集一行的时间信号,从下降沿开始采集该行数据,上升沿后该行数据采集完成。图5(c)中可以看出35 μs时间段正好处于行中断信号高电平期间,因此数据采集有效。同时在图5(b)中显示出了采集图像的二值化处理结果,0区域代表黑线部分,1区域代表白色地面,与图5(a)对比没有发现图像出现变形情况,而且很好的再现了一场黑白图像。该实验不仅证明了本文摄像头算法的可行性,同时也证明了在行采集时间小于行中断高电平时间40 μs时,不会出现无效数据及图像变形问题。
图5 行采集时间为35 μs时的二值化图像及示波器波形
如图6所示,当行采集时间为55 μs时,由于行采集时间超过每行有效时间40 μs,在图6(c)中也可看出黄色低电平维持的时间已超过粉色高电平时间,采集点已进入数据无效区域。如图6(b)所示,二值化图像的右侧已显示出一列整齐的无效数据,因此实际采样时间不应超过行中断高电平时间区域。
图6 行采集时间为55 us时的二值化图像及示波器波形
图7 行采集时间为75 μs时的二值化图像及示波器波形
图7展示了行采集时间为75 μs时的输出波形及二值化图像,由图7(c)可看出每行采集时间已超过行中断信号周期,数据采样点不仅越过无效区域且已采集到下一场图像,因此在图7(b)中左边显示了图像“A”,在中间区域出现了一列无效数据区,在右边出现了下一场图像数据的左半部分。该实验也证明了行采集时间不能超过行中断信号的高电平时间。
通过以上实验可以看出,单片机在不经过PCLK信号同步下,也能有效采集一副完整画面;当行采集时间小于行中断高电平时间40 μs时,能够很好的读取并再现一场图像;当行采集时间超过行中断高电平时间时,生成的图像将出现一列无效数据区;当行采集时间超过行中断周期时,生成的图像除了出现无效数据区之外,还将出现下一场部分图像。因此单片机在采集图像数据时,要想正确再现一副图像,行采样时间不应超出行中断高电平时间区域。
3.2 与高速单片机对比
图8展示了在行采集时间为35 μs且在相同采样点数(共采样30行,每行30点)的情况下,不捕捉PCLK信号的51单片机采集到的图像与捕捉PCLK信号的STM32采集到的图像对比。通过对比可以看出,51单片机集到的图像效果与STM32单片机采集到的图像效果几乎没有区别,进一步验证了该程序算法的可行性。
图8 51单片机与STM32单片机拍摄的图像对比
3.3 数据采集最高性能指标实验
将51单片机晶振频率设为22.118 4 MHz,调整void xie0()等函数中的delay_ov6620()延时函数,让行采样总时间限制在40 μs。考虑到单片机内部扩展RAM为1 024 byte的限制,为保证图像尽可能不失真,设置每行采样32个点,共采集32行,此时将采样到最大图像数据,为系统数据采集最高性能指标,数据采集效果如图9所示,其实验现场如图10所示。
图9 最高指标实验效果图
图10 实验现场调试图
4 结论
文中分析了摄像头的工作原理,指出低速单片机驱动摄像头存在的困难。分析了单片机不捕捉像素同步信号PCLK而直接采样数据的可行性。在不改变摄像头固有输出分辨率的前提下,提出了利用牺牲程序空间来提高执行速度的程序算法。为防止采集到无效数据,行采集时间区域必须与行中断高电平时间区域对齐,不能超出高电平时间。为避免采集的图像出现错位,行中断必须设置为高优先级。实验结果验证了该程序算法的可行性,表明该驱动算法在低速单片机上能很好的采集到摄像头图像数
据。该研究不仅给不带FIFO的摄像头节约了成本,也给广大熟悉51单片机的学者提供了方便。由于该程序独特的算法大大提高了数据采集效率,从而提升了数据采集速度,如果将程序移植到STM32单片机系统中,相对原有STM32系统来讲可进一步提升图像采集效率与速度,从而获取更高分辨率的图像,这可适用于更高要求场合。该驱动算法程序将共享到网络供广大学者共同学习研究。
[1] 樊冬雪,成怡,金海林. 四轴飞行器视觉导航系统设计[J]. 电子技术应用,2014,40(8):140-146.
[2] 黄战华,邓超,张尹馨,等. 基于时序相关双采样的紫外光谱CCD信号采集[J]. 传感技术学报,2013,26(2):216-220.
[3] 刘秀峰,王兴东,裴云,等. 基于图像灰度自适应控制的光源系统[J]. 电子器件,2015,38(2):269-273.
[4] 杨帆,张皓,马新文. 基于FPGA的图像处理系统[J]. 华中科技大学学报,2015,43(2):119-123.
[5] 戴智坚,林培杰,程树英. 基于太阳能电源的图像采集系统[J]. 电子技术应用,2012,38(10):41-43.
[6] OV6620datesheet.pdf.http://html.alldatasheet.com/html-pdf/103226/ETC/OV6620/53/1/OV6620.html.
[7] 马旭波,王宜怀. 基于KL25的同步时钟图像采集[J]. 计算机工程与设计,2014,35(6):1936-1940.
[8] 张宝龙,李丹,郭艳艳. 基于OV7962的车载全景摄像头设计[J]. 液晶与显示,2015,30(4):634-640.
[9] 隋修武,刘蕾,杜玉红,等. 基于线阵CCD的可吸收缝合线线径在线检测系统[J]. 传感技术学报,2014,27(8):1154-1158.
[10] 马其华,张春燕,任洪娟. 单目OV6620数字摄像头在视觉测距中的应用[J]. 机械设计与制造,2011(2):71-73.
[11] 陈张荣,贾俊铖,严建峰. 基于嵌入式系统的网络视频会议系统设计[J]. 电子器件,2016,39(1):156-159.
[12] 高云波,季聪,汉鹏武. 基于摄像头识别路径的智能车系统设计[J]. 兰州理工大学学报,2013,39(6):98-102.
[13] 邰玉民,耿艳峰,张朋举. 基于摄像头的直立自平衡智能车设计[J]. 计算机测量与控制,2016,24(1):99-101.
[14] 南通国芯微电子有限公司. STC12C5A60S2系列单片机器件手册.南通:南通国芯微电子有限公司,2011.
DesignandAlgorithmsofDataCollectorSystemsforHigh-SpeedCamera*
YANGHongli1,3,ZENGXianyang2,3*,YUHanqi2
(1.Department of Mathematics and Physics,Nanjing Institute of Technology,Nanjing 211167,China;2.Industrial Center,Nanjing Institute of Technology, Nanjing 211167,China;3.Department of Mathematics,Nanjing University,Nanjing 210093,China)
Because the camera output image data quantity is big and with high PCLK pixel synchronization signal frequency,it cannot be collected by 51 single-chip microcomputer which is known for many scholars. The application framework of program space for execution speed was proposed to improve the speed of data acquisition. To avoid dislocation images,the row set is put forward as high priority. In order to avoid invalid data collected,it is pointed out that line collection period must be line with the interrupt signal high level range alignment. The experimental results show that the 51 single-chip computer to run this program can collect a good camera image data,bring convenience to the user and at the same time also save on cost of FIFO.
electronic technology;camera;51 single-chip microcomputer;interlaced sampling;drive the algorithm
10.3969/j.issn.1005-9490.2017.05.022
项目来源:南京工程学院青年基金重点项目(QKJA201404);南京工程学院2014年校级教学改革项目(JG201440);南京工程学院创新基金重大项目(CKJA201410)
2016-07-17修改日期2016-11-17
TP212.9
A
1005-9490(2017)05-1161-06
杨红莉(1980-),女,汉族,江苏靖江人,南京大学博士后,南京工程学院讲师,主要研究方向为算法分析与设计,系统建模与仿真等,yanghongli1016@163.com;
曾宪阳(1979-),男,通信作者,汉族,湖北随州人,南京大学博士研究生,南京工程学院教师,主要研究方向为电子与通信,控制理论与控制工程等,zxy@njit.edu.cn。