一种应用于ARM7的CMOS图像采集系统
中两根线的上升和下降时延、高低电平的维持时间都有较严格的要求,软件的延时时间要根据CPU速度和GPIO口的速度精确的计算后才能使通讯保持顺畅。如图2所示:
配置的具体方法如下:采用三相写数据的方式,即在写寄存器过程中要先发送OV7640的ID地址,然后发送数据的目的寄存器地址,接着为要写的数据。如果给连续的寄存器写数据,写完一个寄存器后,OV7640会自动把寄存器地址加1,程序可继续向下写,而不需要再次输入地址,从而三相写数据变为了两相写数据,由于本系统中只需要对有限个不连续寄存器的数据进行更改,如果采用对全部寄存器都加以配置这一方法的话,会浪费很多时间和资源,所以我们只对需要更改数据的寄存器进行写数据。对于每一个变化的寄存器,都采用三相写数据的方法。三相写数据的传输周期如图3所示。
2) 图像数据的采集
系统配置完毕后,将进行图像数据的采集。在采集图像的过程中,最主要的是判别一帧图像数据的开始和结束时刻。在仔细研究了OV7640输出同步信号(VSYNC是垂直同步信号、HREF是水平同步信号、PCLK是输出数据同步信号)的基础上,用C语言实现了采集过程起始点的精确控制。图4表示了图像采集期间三个同步信号的时序关系示意图。
VSYNC的上升沿表示一帧新的图像的到来,下降沿表示一帧图像数据采集的开始(CMOS图像传感器是按列采集图像的)。HREF是水平同步信号,其上升沿表示一列图像数据的开始。PCLK是输出数据同步信号。当HREF为高电平期间,才能开始有效的数据采集,PCLK下降沿的到来表明数据的产生,PCLK每出现一个下降沿传输一位数据。HREF为高电平期间共传输640位数据。在一帧图像中,即VSYNC为低电平期间,HREF出现480次高电平。当下一个VSYNC信号的上升沿到来时,就表明分辨率640*480的图像采集过程结束。
4. 软件编程设计
本文的软件设计是运行于uCLinux环境下的标准C程序。软件设计的主要步骤是,在系统加电时,对系统进行初始化,包括S3C4510B的初始化和SCCB的配置,配置完后,当接受到开始采集信号后,根据同步信号的状态判断是否开始采集数据,采集完一帧图像后将数据存入FLASH中。由于篇幅有限,下面给出了采集部分的程序代码:
void collect()
{
int pixel_count = 0;
int line_count = 0;
int i,j;
IOPMOD = IOPMOD 0x00000000; /*设置IO口为输入*/
while (!VSYNC); /*等待新的一帧开始*/
for (line_count=0; line_count480; line_count++)
{
while (!HREF); /*等待新的一列开始*/
for (pixel_count=0; pixel_count640; pixel_count++)
{
while (PCLK); /*等待一个新的象素点*/
buf[line_count][pixel_count] = PIXEL;
while (!PCLK); /*等待这个象素点传输完毕*/
}
while (HREF); /*等待这一列传输完毕*/
}
while (VSYNC); /*等待这一帧传输完毕*/
}
5.结束语
用ARM控制OV7640的数据采集系统性能良好,这种信号采集方法适合应用在对速率要求不高,追求高性价比的场合,以最简单的方式构建自主式系统。本系统已实现了SCCB总线的写功能,读功能需要一个更严格的时序,由于S3C4510B的I/O口速度较慢难以实现。另外,S3C4510B的时钟频率只有50MHz左右,信号的同步是个难题,可以考虑在接收端再加上一个时钟电路以实现严格的信号同步。
总而言之,本系统具有两大特点:一是开放性,由于采用的是通用的uCLinux操作系统,使用标准的C程序即可,然后通过以太网接口便可实现远程连接功能以改变目标任务。二是自主性,该系统自成体系,可以实现自启动,具有某些方面的识别能力和较高的性价比。
参考文献:
1. OmnVision Corp Public OV7640 Datasheet, 27 October 2003
2. OmnVision Corp, Serial Camera Controls Function Specification, 26 February 2003
3. 邹思轶.Linux嵌入式设计与应用.清华大学出版社,2002年1月第1版
4. 段峰,王耀南,雷晓峰,吴立钊,谭文。机器视觉技术及其应用综述,自动化博览,2002年1月
5. 刁修民,多分辨率图像实时采集系统的FPGA逻辑设计,电子技术应用2003(3)
6. 陈志辉,I2C总线在MCS51系列单片机数据采集系统中的实现,微计算机信息2005年第1期No.36
- 基于Linux的便携式RFID信息采集处理系统 (07-03)
- 一种基FPGA和DSP的高性能PCI数据采集处理卡设计(08-26)
- 基于LabVIEW的USB实时数据采集处理系统的实现(03-26)
- 基于DSP和USB的高速数据采集与处理系统设计(05-01)
- 基于DSP的图象采集与处理系统的设计(06-15)
- 基于DSP的信号采集处理系统(07-21)