ov9650的dummy pixel和dummy line

最近给ov9650摄像头调了下帧率,需要用到dummy pixel和dummy line,为了便于观察,有个24M采样的USB逻辑分析仪采集VSYNC和HREF信号验证会好得多。

ov9650调整帧率的当然也可以通过0x11寄存器bit[5:0]对外部时钟分频的方法降低,这里介绍通过插入dummy pixel或dummy line降低帧率。在VSYNC极性为正,HREF输出的情况下,插入一个dummy pixel就是在一个行周期的低电平期间内插入一个PCLK,插入dummy line就是在一个场周期低电平期间内插入一行。


接着以24MHz输入时钟,无分频,内部时钟也是24MHz,时序输出为VGA,格式YUV帧率30fps的条件下进行说明。

     首先通过计算来验证上图的确是30fps的,内部时钟24MHz,一个像素时间tp=2*1/24M=1/12 us,一行时间tLine=800tp=66.67us,那么一个场周期就是500tLine=33.33ms,那么帧率就是1/33.33ms=30fps。

         接着ov9650的0x2A寄存器的高四位和0x2B寄存器八位构成插入的dummy pixel格式,比如0x2A的值为0x10,0x2B的值为40,那么插入了1*256+64=320个dummy pixel,ov9650在YUV输出格式下,平均一个像素两个字节,那么也就是两个PCLK,所以可以认为插入了320/2=160个像素,插入位置在一行的低电平,也就是上图中的160tp位置处,那个位置的脉宽将增加160tp,那么一行时间就增加了160tp,一共500行,所以一个场周期就增加了80000tp=100tLine,那么场周期就为600tLine=40ms,帧率就变为了1/40ms=25fps。

       那么我们在上面的条件下,如果插入x个dummy pixel,那么插入x/2个像素周期,那么场周期就为500+500*x/2/800=(500+0.3125x)tLine=(500+0.3125)*66.67us,那么帧率就是15000/(500+0.3125*x)。

          如果是SXGA模式下的话,24MHz输入时钟,通过验证发现有一个dummy pixel为一个像素,所以公式就是7.5/(1+x/1520)

           ov9650应用手册 里面有介绍达到某些特定的帧率需要调整哪些寄存器,但是没有讲为什么,所以下面来说明。

           3.1节在24MHz输入时钟下,为了输出30fps需要调整分频为无分频。dummy pixel为0,那么就是输出30fps了,我们在上面有验证过。

           3.2节是输出15fps VGA,那么直接2分频,dummy pixel依然为0,那么帧率就下降一半了

           3.3节是输出25fps VGA,无分频,dummy pixel为1*256+64=320,就是我们刚才计算过的。

           3.4节是输出12.5fps VGA,很简单,dummy pixel为1*256+64=320变为25fps,再设置2分频即可。

           3.5节输出7.5fps SXGA,由于SXGA在48MHz输入时钟下最大帧率为15fps,所以对于24MHz输入时钟,帧率直接就是7.5fps了,无分频,dummy pixel为0。

           3.6节输出6.25 fps,很简单,设置无分频,dummy pixel为1*256+52=308个,将其带入7.5/(1+x/1520)就得到6.25fps。

      第4节是调整夜视模式,为了达到3.125fps,需要在25fps的dummy pixel设置基础上8分频即可。


0x2D和0x2E寄存器组成的值可以增加VSYNC脉冲的宽度,原本VGA下是4*tLine,如果0x2D为0x00,0x2E值为0x02的话,那么VSYNC脉冲宽度就增加两个tLine。如下图所示


0x92和0x93寄存器组成的值增加场周期的低电平时间,增加在VSYNC脉冲和第一个HREF之间,加到6546.5tp上面。值为多少就增加多少tLine。这通过逻辑分析仪可以得到验证。




猜你喜欢

转载自blog.csdn.net/a694543965/article/details/80488931