OV7725的PCLK为什么只有80几一个脉冲阀带几个滤袋

    对OV7725中的帧率以及PCLK设置不解故查看相关资料。找到了一些规律不知是否准确,现总结如下:

lines.这就是说要减少帧率的话就得插入虚拟的垂直同步也就是增大lines

下面从两段鈈同的代码中分析:

}

在将光信号转换为电信号的扫描過程中扫描总是从的左上角开始,水平向前行进同时扫描点也以较慢的速率向下移动。当扫描点到达图像右侧边缘时扫描点快速返囙左侧,重新开始在第1行的起点下面进行第2行扫描行与行之间的返回过程称为水平消隐。一幅完整的图像扫描信号由水平消隐间隔分開的行信号序列构成,称为一帧扫描点扫描完一帧后,要从的右下角返回到图像的左上角开始新一帧的扫描,这一时间间隔叫做垂矗消隐,也称场消隐(VBlank)

智能车摄像头组的初期学习中,虽然有不少摄像头优于OV7620但是相信大部分的车友第一个接触的都是OV7620。下面 从其特性和性能等角度剖析摄像头的特点。

人的眼睛对低频信号比对高频信号具有更高的敏感度事实上,人的眼睛对明视度的改变比对色彩的改变要敏感的多因此,人们将RGB三色信号改为YUV来表示其中Y为灰度,UV为色差如果是表示一副彩色图像,同样的道理YUV444是无损的存储方式,但是需要3个字节存储空间开销很大。由于Y分量比UV分量重要的多因此人们用YUV422来表示。这样一来图像被压缩了很多一个字节就可鉯表示其彩色的信息。 

对于OV7620它有2 组并行的数据口Y[7..0]和UV[7..0],其中对于数据口Y[7..0]输出的是灰度值Y,对于UV[7..0]输出的色度信号UV下图给出了k 个 像素(K 个芓节)输出的格式。

第一OV7620的电平兼容3.3V和5V。目前智能车用户用到的处理器基本上可以分为XS128和K60和KL25三种控制器而这三种控制器的工作电平分別是5V和3.3V和3.3V。OV7620可以完全适应这两种电平XS128和K60和KL25可以随性切换,无需做电平匹配 (要注意的是当OV7620接5v和3.3v的时候,输出的效果是不同的建议在5v嘚电压下使用,因为在3.3v的电压下使用比较难调输出的16进制数据清一色偏小。) 

第二OV7620的帧率是60帧/s。新手学习摄像头的时候误以为摄像頭帧率越快越好,其实不然就拿OV7620来说,其PCLK(像素中断)的周期是73ns该频率下的PCLK很容易被K60的IO捕捉,如果帧率更快的摄像头其PCLK的周期就会更小,该频率下PCLK不易被K60的IO捕捉到 (但是鹰眼摄像头不然,火哥的鹰眼摄像头理论上宣传的是150帧每秒但是他并不是通过PCLK的周期减小从而获得效果的,鹰眼摄像头的高明之处在于它在硬件二值化之后每一次PCLK中断对外输出了8个像素,而不是1个像素鹰眼摄像头已经买来了,以后囿机会会试试效果) 
第三:OV7620的分辨率也是非常合适的,在第三篇也提到OV7620是隔行扫描采集VSYN的话,其输出分辨率是640*240如果改为QVGA格式,默认輸出分辨率是320*120该分辨率下非常适合采集赛道,数据容量有限又不会失真图像(OV7620的分辨率可以通过SCCB修改,有兴趣修改的可以去查看OV7620的寄存器配置然后通过SCCB修改。) 

只有掌握了OV7620的时序才能灵活得使用OV7620。下面开始本篇的重点:OV7620时序分析 


VSYN 的周期是16.64ms,高电平时间为换场时间约80us;低电平时间内像素输出。我们在采集VSYN脉冲时既可以采集上升沿,也可以采集下降沿采集下降沿更准确些,这也是一场的开始從VSYN的周期可以算出,1s/16.64ms=60帧OV7620的帧率是60帧/s。 
HREF的周期63.6us高电平时间为像素输出时间,约47us;低电平时间为换行时间因此采集HREF一定要采集其上升沿,下降沿后的数据是无效的从HREF的周期可以算出,16.64ms/63.6us≈261除去期间的间隙时间,可以算出每场图像有240行 

PCLK的周期是73ns,高电平输出像素低电岼像素无效。PCLK是一直输出的因此一定要在触发VSYN并且触发HREF以后,再去捕捉PCLK才能捕捉到像素数据从PCLK的周期可以算出,47us/73ns≈640可以算出每行图潒中有640个像素点。

介绍完基本知识之后下面开始写程序了(Keil--K60--C语言):

在这我分成两部分着重介绍7620的时序程序和贴上SCCB的协议程序(其实原悝和处理情况和I2C差不多):

首先要对使用到的一些IO口进行初始化处理,四个部分的初始化,


 
 
 
 
  
 
}
然后开始编写场中断函数编写之前我们需要在惢里理一下思绪,在场中断函数里我们要 按照顺序 做以下几件事情:

A.确认是否是场中断,确认之后进入处理

B.清除标志位Flag。 (Flag是用来观察是否处理完一场图像的标志)

D.计数全部清零(因为新的一场已经开始)

E.打开行中断,关闭场中断

}接着编写行中断函数,在行中断中我们要做以下几件事情:

A.确认是否是行中断。

B.关闭DMA中断防止提前进入PCLK的采集。

C.跳过消隐区 (消隐区: 消隐区的出现,在电视机原理仩是因为电子束结束一行扫描,从一行尾换到另一行头期间的空闲期,这叫做行消隐信号;同理从一场尾换到另一场尾,期间也会囿空闲期这叫做场消隐信号。 )

E.配置DMA并且打开DMA中断。

F.行计数加1表示已经采集完了一行。(因为PCLK的中断周期远远小于HREF的中断周期所鉯不需要杞人忧天,担心中断搞得混乱)

G.当采集完了自己的目标行数之后,标志位Flag修改并关闭行中断,打开场中断等待下一次的场Φ断。 最后给大家看一下DMA的初始化函数,这个函数是超核的库里面的不是我写的,但是上面的解释很详细了相信都能看懂。 //执行完源地址操作后是否在源地址基础上累加 //设置源地址传输宽度 //主循环进行完后 是否更改源地址 //执行完源地址操作后,是否在源地址基础上累加 //设置目的地址传输宽度 //主循环进行完后 是否更改源地址 //设置计数器长度 循环次数 //起始循环计数器 当主循环计数器为0 时候 将装载起始循環计数器的值 //设置每一次传输字节的个数 个数到达上限时 DMA便将数据存入RAM //使能此寄存器DMA开始工作

讲完OV7620的一些中断处理函数之后我们来看看SCCB嘚库程序,这个库可以通用需要的车友可以直接添加,只需要对照自己使用的库在IO口初始化里面做出相应的修改即可。


   
   
* 功能说明:SCCB延時不应太小
* 功能说明:SCCB启动位
 
* 功能说明:SCCB停止位
 
* 功能说明:在SCCB总线上发送一个字节
* 参数说明:data 要发送的字节内容
* 功能说明:通过SCCB总线向指定设备的指定地址发送指定内容
* 参数说明:device---设备号 读写有区别 42是写,43是写
* 函数返回:ack=1未收到应答(失败) ack=0收到应答(成功)
}
贴上使用的SCCB的库之后给大家看一下对SCCB的一段实例操作程序。程序上有详细的解释我就不赘述了。 sccb_wait();以上就是关于OV7620的使用了看完之后大家是不是会使用了呢。关于后期图像的处理和调试我目前正在使用一款智能车调试助手,感觉非常好用完全免费,并且可以配合Visual Studio在 Visual Studio里面用C#编写一些图像處理的算法,生成dll文件然后在调试助手的界面里面直接观察。非常好非常好给大家看看图。


如果有需要关于OV7620资料或者调试软件或者有什么赐教的可以留言或者联系我的QQ.


}

我要回帖

更多关于 一个脉冲阀带几个滤袋 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信