摘要 OV3620是美国OmniVision推出的一款320万像素彩色CMOS图像传感器,本文介绍了OV3620的原理,性能及特点,给出了OV3620在基于DSP的图像采集系统中的具体应用
1引言
CCD与CMOS传感器是数字图像采集系统中普遍采用的两种图像传感器,它们都是利用感光二极管进行光电转换,将图像转换为数字数据
CCD传感器技术成熟、图像噪声小,但制作工艺复杂,与标准工艺不兼容,且需要较高电压供电,芯片功耗大,目前多在高端数码产品中应用
CMOS传感器采用 CMOS 工艺,可以把图像采集单元和信号处理单元集成到同一块芯片上,因而集成度高、功耗低、使用方便,且具有价格上的优势
笔者在开发数字图像采集系统中选用了美国OmniVision公司的CMOS图像传感器OV3620作为采集芯片
2OV3620介绍
OV3620是一款320万象素的彩色数字图像/视频采集芯片,数据输出RAW RGB格式
其内部结构如图1所示
OV3620内置2072×1542分辨率的图像阵列,模拟放大器,10位A/D转换器、可调视频窗、SCCB接口、可编程帧速率控制、可编程/自动曝光增益控制、内外帧同步、亮度均衡计数器、数字视频端口、定时产生器、黑电平校准及白平衡控制等电路
OV3620可输出QXGA、XGA、DV、HF四种镜像格式,高速帧模式速率可达到78fps
QXGA模式下可输出高达2048×1536分辨的图像
其它基本参数如下:
图像尺寸:6.59×4.90mm,像素尺寸,3.18μm×3.18μm;
信噪比>46dB;
QXGA输出时,阵列大小为2048×1536,图像传输速率为7.5fps
XGA输出时,阵列大小为1024×768
图像传输速率为20fps
DV输出时,阵列大小为1024×510
图像传输速率为30fps
HF输出时,阵列大小为1024×190
图像传输速率为78fps;
供电电源电压为直流3.3V和1.8V;
动态范围:60dB
图1 OV3620内部功能模块图
OV3620有为主、从两种工作模式
上电后芯片缺省工作模式为主模式,如果需要改变工作模式,可通过OV3620的SCCB接口修改其内部寄存器 COMM
从模式下OV3620使用SLHS
SLVS从外部接收水平同步信号和垂直同步信号;主模式下水平同步信号和垂直同步信号由OV3620输出
3OV3620在采集系统中的应用
3.1 系统构成
本系统中OV3620工作在主模式,OV3620输出像素同步时钟PCLK
行同步时钟HREF,帧同步时钟VSYNC
数据输出管脚D[2:9]接入FPGA,经过锁存处理组合成1个字(32比特)
帧同步时钟VSYNC通过FPGA连接DSP的中断int7
行同步时钟HREF通过FPGA连接DSP的中断int6
OV3620使用24M系统时钟
图2 基于DSP的图像采集系统
图2中OV3620的SCCB 接口是omnivision 公司的三线串行摄像机控制总线,它包含三个信号: SCCB_E、SIO_C、SIO_D
其中SCCB_E为片选信号,SIO_C 是串行时钟接口,SIO_D 是双向数据线
由于SCCB是I2C 总线的一个子集
所以TMS320C6713的I2C 总线可直接与其互联互通
TMS320C6713的I2C 仅提供SIO_C、SIO_D信号,SCCB_E信号由FPGA提供,数据通信时需要把SCCB_E置低
SIO_C、SIO_D信号与SCCB的连接采用集电极开路门以“线与”方式进行,需要把它们上拉
此外DSP外围扩充USB接口
SDRAM
USB接口用于配置OV3620的内部寄存器及接收上行的图像数据;SDRAM用于整帧图像数据存储
SCCB接口的控制
OV3620提供SCCB总线控制接口实现对内部寄存器的读写
SCCB总线包含三个信号: SCCB_E、SIO_C、SIO_D
其中SCCB_E为片选信号,SIO_C 是串行时钟接口,SIO_D 是双向数据线
SCCB是I2C 总线的一个子集
因此用户可通过TMS320C6713的I2C 总线直接对芯片进行操作
TMS320C6713的I2C 仅提供SIO_C、SIO_D信号,与SCCB的连接采用集电极开路门以“线与”方式进行,笔者在FPGA内部设计了SCCB_E信号,数据通信时需要把SCCB_E置低
在I2C总线上TMS320C6713作为主设备,OV3620作为从设备,时钟信号由TMS320C6713产生
笔者采用CCS2.0集成开发环境对DSP编程,下面给出I2C总线读写OV3620内部寄存器的C语言代码
I2C_Config MyI2CCfgT = {
I2C_FMKS(I2COAR
A
OF(0x00))
I2C_FMKS(I2CIMR
ICXRDY
MSK)|
I2C_FMKS(I2CIMR
ICRRDY
MSK)|
I2C_FMKS(I2CIMR
ARDY
MSK)|
I2C_FMKS(I2CIMR
NACK
MSK)|
I2C_FMKS(I2CIMR
AL
MSK)
/*设置主时钟频率为100kHz*/
I2C_FMKS(I2CCLKL
ICCL
OF(44))
I2C_FMKS(I2CCLKH
ICCH
OF(44))
I2C_FMKS(I2CCNT
ICDC
OF(2))
/*设置从设备地址*/
I2C_FMKS(I2CSAR
A
OF(0x30))
I2C_FMKS(I2CMDR
FREE
RFREE)|
I2C_FMKS(I2CMDR
STT
START)|
I2C_FMKS(I2CMDR
MST
MASTER)|
I2C_FMKS(I2CMDR
TRX
XMT)|
I2C_FMKS(I2CMDR
RM
REPEAD)|
I2C_FMKS(I2CMDR
IRS
NRST)|
I2C_FMKS(I2CMDR
STB
NONE)
|
I2C_FMKS(I2CPSC
IPSC
OF(15-1))
};
该代码中结构体MyI2CCfgT用于对TMS320C6713中IIC总线上的寄存器进行初始化,值得注意的是OmniVision公司文档称OV3620 在SCCB总线上的读写地址分别为0x61、0x60
这是包含读写标志位的8位地址,TMS320C6713的IIC总线读写从设备地址配置为7位后,IIC总线上读写OV3620 地址应均为0x30
下面是TMS320C6713操作SCCB接口寄存器的写函数I2C_write16()
Uint16 I2C_write16(I2C_Handle hI2C
Uint8 regnum
Uint8 regval)
{
Uint8 tempdata = 0;
waitForBusFree(hI2C);
I2C_config(hI2C
&MyI2CCfgT);
//写OV3620寄存器地址到发送寄存器
tempdata = regnum;
I2C_writeByte(hI2C
tempdata&0xFF);
//启动传送标志
I2C_start(hI2C);
while(!I2C_xrdy(hI2C));
//写数据到发送寄存器
tempdata = regval;
I2C_writeByte(hI2C
tempdata&0xFF);
//停止传输
I2C_sendStop(hI2C);
//等I2C总线空闲
waitForBusFree(hI2C);
return TRUE;
};
3.3 图像采集与传输
OV3620最大帧图像数据在3MB以上,XCV200S内部块RAM仅有7KB
无法保存完整一帧数据,因此在FPGA内部设计两个容量为32×1024比特的FIFO来分别缓存奇数行和偶数行图像数据
一行数据采满后由HREF下降沿触发DSP中断int6,DSP读取数据到SDRAM
这样一行数据被缓存时另外一行数据就可以被DSP读出
一帧数据采满后由VSYNC下降沿触发DSP中断int7
采集过程有正在处理帧和采集未完成帧这两种帧状态,在SDRAM内开辟两个区域分别存储这重
通过设置OV3620的寄存器 ADDVSL、ADDVSH可以保证一帧未采集完全前不被DSP压缩
4小结
随着CMOS 工艺水平的不断提高,CMOS图像传感器正在向高分辨率、低成本的方向发展,应用领域逐渐向高端延伸
本文描述的320万象素帧的采集系统方案,具有结构简单,易于扩展的优点,但是在图像采集过程中DSP的负荷有些大,将DSP内的图像处理工作移入FPGA内部是今后考虑的方向
本文作者创新点: 随着CMOS传感器技术的不断进步,工商业应用领域内的图像采集系统正在向基于CMOS的图像采集系统发展
本文所述的采集卡采用CMOS+FPGA+DSP的硬件结构,具有通用性强,易于扩展的特点