视频防抖摄像_【博文连载】CMOS摄像头视频图像采集接口设计

原创标题:【博文连载】CMOS相机影像收集接口设计

如果硬件/通信正常,OV7725已经完成了OV7725的初始化,并且工作正如我们所期望的那样。 关于CMOS摄像机的视频序列,我们主要关注的是以下信号

视频防抖摄像

因为Altera Quartus II提供强大的Signal Tap II在线逻辑分析器并且能够经由JTAG简单地捕获硬件定时信号,所以Bingo这里应用Signal Tap II来介绍CMOS视频定时

(1)VSYNC = L Valid时的视频流数据

OV7725的默认状态,即在没有初始化时,输出VSYNC信号在低电平有效。 或者将I2C_OV7725_RGB565_Config中的0x15寄存器的值设定为默认值0x00,则得到如下波形

视频防抖摄像

该波形是从OV7725输出的默认电平的影像信号的定时。 由波形可知,数据无效时OV7725输出0,而数据有效时HREF与数据同时有效,场信号VSYNC默认为低电平有效。

(2)VSYNC = H Valid时视频流数据

Micron、VGA等在VSYNC为高电平时有效,因为数据在逻辑上与VGA定时一致,所以将I2C_OV7725_RGB565_Config中0x15寄存器的值设定为默认值的0x02,即,VSYNC被翻转

视频防抖摄像

可知场有效信号VSYNC从低电平变化为高电平,其他信号不变化。 在Bingo以后的设计中,将OV7725 VSYNC设定为高电平有效、低电平场同步模式。

(3)视频信号深度分析

放大②的波形,开始行有效信号HREF时,从低电平输出Data同步,结束行有效信号HREF时,Data同步从输出变为低电平。 如下图所示

视频防抖摄像

从图中可以看出,当输出当前行的有效信号时,HREF在采样点3199处开始并结束于5759。 由于输入数据为24MHz,采样时钟为48MHz(SignalTap II采样时钟),因此对1个数据进行2次采样,输出至各行的数据计算如下

再次结合OV7725的数据手册,观察OV7725的时序图

视频防抖摄像

注意Bingo在初始化OV7725时,VSYNC设置为低电平同步,即VSYNC设置为与上图中的相反,这与VGA扫描定时相同,除了时间间隔之外完全相同。

同时,通过示波器验证和分析基于宾果初始化列表初始化的视频流的格式,快照如下

视频防抖摄像

由图可知,数据在VSYNC的高电平有效,在VSYNC的低电平同步。 同时,VSYNC为25FPS (图中看不到),这主要与寄存器的配置有关。 在手动说明书中对于CMOS 24MHz像素时钟的情况下,帧率是30FPS,用于海外的60Hz交流电。 国内的交流电力为50Hz,为了避免商用频率的闪烁,将寄存器0x2B设置在9e,25Hz正好受到50Hz的制约,容易实现自动曝光避免。

此外,由于上述的Bingo选择了RGB565模式的初始化,因此从OV7725的数据手册可知,以RGB565模式输出的图像数据的形式如下

视频防抖摄像

RGB565即{R

此时,cmos_vsync_end被用作计数使能信号,并且当计数达到10时,计数操作停止

视频防抖摄像

其中CMOS_FRAME_WAITCNT定义了变量作为外部输入的帧延迟宏,该变量在实例化期间定义了10秒(即10秒)的延迟。 有些摄像机不需要10FPS的延迟,或者出于某种原因,在上述步骤之后,为了实现帧同步,需要等待下一帧的结束信号。 即,如果完成10 FPS的延迟(如果CMOS请求),然后等待下一帧完成信号并打开帧同步信号frame_sync_flag,则相关代码为

视频防抖摄像0

这里的frame_sync_flag对于整个CMOS视频采集模块是非常重要的。 只有frame_sync_flag有效,并且正常输出收集的信号是指示收集模块成功的标志。

接着,基本上开始RGB565数据的收集。 RGB565的{r}是众所周知的

byte_flag是高低8比特的标志,即,在0的情况下是高8比特,在1的情况下是低8比特。 每次byte_flag == 0登记像素数据,每次byte_flag == 1将{登记像素数据、当前像素数据}连接起来获取RGB565。 连接的数据为cmos_frame_data_r。

当然,这里关于frame_sync_flag同步信号,最后实现数据流的使能控制。 cmos_frame_data是最终延迟、同步和拼接输出的16位RGB 565数据,如下所示

RGB565还发出两次最完整的数据像素数据,并且因此,可以认为生成数据读取使能时钟作为用于随后数据读取的标注信号。 当byte_flag == 1时,为了连接并输出数据,当byte_flag == 0时应该输出使能信号。 但是,由于在初次byte_flag == 0的时刻还没有数据的同时,连接最后的数据后byte_flag == 0消失,所以,这里将byte_flag延迟1个时钟,并且byte_flag == 1(为什么1自己想知道)被返回到RGB565

另外,因为相对于数据流的输入以2时钟输出了拼接的数据,所以VSYNC和HREF都应该延迟2时钟,与帧同步信号同步地,帧同步信号cmos_frame_vsync和行同步信号CMOS _ frame _ hs

在此部分的代码中,Bingo为当前工程目录提供了完整的Modelsim模拟文件。 此处得到的测试波形如下所示。 如需详细资讯,请分析CMOS_Capture_RGB565_TB

视频防抖摄像

完美是没有界限的,Verilog HDL是万能的。 Bingo教授如何实时计算RTL帧速率。 首先,以24MHz的像素时钟获得2S个周期,代码如下

视频防抖摄像

在这个2S以内,我们应该做的是累计这个时间内的帧数。 每次计数2S时,以存储的帧数/2得到实时的帧速率。 2S更新是一次一个相对值,10S,可以一次更新,但在提高准确性的同时,实时更新速度会降低。 此处更新的相关代码如下所示

视频防抖摄像

输出端的cmos_fps_rate是获得的2S更新一次的帧速率值。

更无聊的是,我们终于收集完了CMOS视频流数据。 这里给出了实例化代码。 如下所示

视频防抖摄像

从复位实例化开始,每当初始化CMOS传感器和SDRAM时,通过开启CMOS视频流收集电路,使数据的取入和写入成为有效,能够防止因不稳定性引起的数据丢失。

大家都在看

相关专题