这个图像传感器是我第一次接触成像器件,大概是在2007~2008年左右的事情了。从此之后,我便对成像器件产生浓厚的兴趣。第一次设计并不成功,并没有充分发挥出传感器本身的优势特点,但是这也为我以后的设计工作奠定了坚实的理论和实践基础。
OV9620是OmniVision Technologies生产的130万彩色CMOS图像传感器:
全分辨率为:1280*1024.1/2”
像原尺寸为:5.2um正方
成像区面积:6.66mm*5.32mm
数字输出分辨率:10bits RGB Raw data
帧率:15fps@1280*1024, 30fps@640*480
图像传输接口采用了Cypress公司的CY7C68013-56 USB2.0专用接口芯片,最高实现480Mbits数据率。
设计采用68013+OV9620的设计方案,设置PA7为图像采集控制信号线,PA7与HSYNC相与操作送给68013的SLWR,9620的VDSYNC送到68013的PA0。9620的pixel_clk送给68013的IFCLK。
68013工作模式设置为slavefifo模式,通过控制接口传输控制命令。
上位机采集软件发送采集命令,68013接收后,判断VSYNC的上升沿到来,然后使能PA7,开始往68013的内部fifo里面写数据。每存储512字节后,传输到上位机,进行色彩还原(bayer Raw to RGB--插值)处理,并且显示。
OV9620 cmos芯片有一个很大的优点,就是不对内部寄存器做任何初始化设置的前提下,就能够输出图像。
从上面的图片中,可以看到VSYNC、HSYNC、信号之间的关系,这个关系是很重要的,特别是Tdvh延迟,要严格的把握,才能保证一幅完整图像被正确接收。
该设计完成后,我曾指导过多名网友做同类设计 ,同时也总结出对于VSYNC场同步信号的判断方法:
1. 查询式:
if (PA0==0)
{
null或者复位所有内部fifo
}
else PA7=1;
2. 中断式:
首先在USBJmpTb.a51文件中,添加INT0中断和中断地址,
extrn code ( ISR_INT0,ISR_INT1)
CSEG AT 03H
ljmp ISR_INT0
CSEG AT 13H
ljmp ISR_INT1
然后在TD_Init初始化函数中,设置中断类型,上升沿触发,并开启总中断标志
在自定义用户命令DR_VendorCmnd中,响应上位机图像采集命令,并开启INT0中断
添加中断响应函数,用于使能PA7,进而使能SLWR
void INT0_ISR( void ) interrupt 0
{
EX0 = 0; // 关中断
PA7 = 1; // 拉高PA7,使能slwr,使得cmos图像数据允许写入fifo
//其它处理
return;
}
对于中断式来说,由于中断响应时间不确定,所以会导致丢失数据,一般情况下,据网友经验,很少用中断式。
图像送到PC机后,经过Raw to RGB 插值处理,还原彩色图像。
第一次设计成像电路,有许多概念性的东西了解的不是特别透彻,所以我的第一台小摄像头设计的不是太成功,在以后的设计中,随着经验的积累,使我对该类器件把握更加自如。