在例程“OV7725摄像头实时采集送HDMI显示”中,我们将走近FPGA图像处理的世界,图像处理、数字信号、高速接口也一直被业界公认为FPGA应用的三大主流领域,这个例程主要基于OV7725摄像头的视频图像采集项目,进行了详细地需求分析,从顶层到底层,从框架到功能,层层细分整个项目的模块,从而实现流程化项目设计,所以笔者在这一节里想多花些笔墨把FPGA图像处理的基本开发技巧和相关背景知识等整理清楚,同时也为大家再扩展一些知识面。
真诚地希望大家通过对本例程的学习,能更加深刻地了解到基于FPGA的视频图像开发流程,同时掌握摄像头开发的基本知识和调试方法,感兴趣的朋友可以在消化完例程后进行OV5640等其他CMOS摄像头视频采集系统的设计。
开门见山地在详细介绍OV7725摄像头之前,首先来了解CMOS和CCD Sensor传感器的背景知识,目前市面上主流的图像传感器Sensor主要有CMOS和CCD两种,CCD Sensor的技术相对成熟、其一致性较好、色彩更加逼真,但制作工艺复杂、成本功耗较高、像素很难提高,相比而言CMOS Sensor制作简单、成本低廉、开发灵活,更受到现在市场的青睐,大家每天使用的手机、笔记本电脑等移动端设备中一般也都选择CMOS Sensor。
CMOS Sensor的驱动电路相对于CCD Sensor而言简单很多,同时在成本上具有巨大的优势,成像质量上随着工艺技术的迭代更新有了显著提升,当然我们的手机之所以能取得如此清晰准确的图像质量还归功于与图像处理模块(ISP),感兴趣的朋友可以去了解一下相关知识。
目前市面上的CMOS Sensor,主要的生产厂家有Sony(日本索尼)、Panasonic(日本松下)、OmniVison(豪威)、Smartsens(思特微)等,虽然不同厂家生产的CMOS Sensor在工艺质量、成像效果、帧率色彩、感光噪声等方面有些许差别,但是对于FPGA开发而言,设计流程都基本一致,即只需要通过芯片手册进行寄存器配置就可以让CMOS Sensor输出预期格式的视频流数据。
在这个例程中,我们选取了OmniVision(豪威)所生产的OV7725 CMOS Sensor作为图像采集的前端,该传感器具有功耗低、可靠性高、采集速率快等优势,其广泛应用在电子玩具、安防监控、电脑多媒体等领域,如图1示是OV7725的实物照片,OmniVision生产的数字图像传感器,从最低VGA分辨率的CMOS Sensor到十几兆像素分辨率的输出Sensor,产品涵盖了低中高端,支持不同应用场景成为数字成像领域的主打品牌。
图1 OmniVision(豪威)的OV7725 CMOS Sensor实物图
OV7725拥有640像素*480像素的感光阵列,其最高支持640*480@60Hz图像输出,并且支持分辨率、输出视频格式、图像特征等可配置,满足很多产品的实际应用场景,笔者在这里也简单为大家归纳总结了这款经典的CMOS Sensors几项关键性特征参数。
如图2所示是OV7725 CMOS Sensor内部功能模块的框架,大家可以清楚地看到整个OV7725 CMOS Sensor在XCLK外部时钟的驱动下,感光元件阵列进行图像的采样输出640*480阵列的模拟数据,其次再通过内部12bit的A/D转换后,输入的模拟数据即变成了数字信号,再次通过DSP进行相关图像的前处理,最终会输出用户配置格式的10bit视频流数据。
图2 OV7725 CMOS Sensor内部功能模块的框架
如图3所示是OV7725 CMOS Sensor的DC特性参数,对于OV7725一共需要3种电压,在这里主要关注VDD_A、VDD_C、VDD_IO这3组电压,其中VDD_A即OV7725的模拟电压范围是3.0-3.6V,推荐值是3.3V,VDD_IO即I/O驱动电压范围是2.5-3.3V,VDD_C是OV7725内部的数字内核电压可以由其内部的LDO直接给出,为了电路设计更加方便,大部分OV7725模块把模拟电压VDD_A和I/O驱动电压VDD_IO均设置成3.3V。
值得注意的是虽然OV7725内部非常复杂,但是由于OmniVision公司对CMOS Sensor做了集成封装,使其集图像采集、模数转换、DSP计算功能于一体,所以对于用户二次开发来说,硬件上不需要太多外围电路做支持。
图3 OV7725 CMOS Sensor的DC特性参数
大家可以对照如图4所示“骑远飞电子科技”推出的OV7725 CMOS Sensor模块来观察,如图5所示是对应的硬件模块的内部构造,如表1所示是OV7725 CMOS Sensor控制信号引脚定义,在模块二次开发的硬件电路设计中应该需要注意几个地方:
序号 |
引脚 |
说明 |
1 |
PWDN |
低电平代表正常工作;高电平代表低功耗模式 |
2 |
RSTB |
传感器复位输入,低电平有效 |
3 |
SCL |
SCCB接口的串行时钟信号 |
4 |
SDA |
SCCB接口的串行数据信号 |
5 |
FSIN |
帧同步输入,高电平有效 |
6 |
XCLK |
传感器内部驱动时钟的输入 |
7 |
PCLK |
像素输出时钟 |
8 |
VSYNC |
像素数据的场同步信号输出 |
9 |
HREF |
像素数据的行同步信号输出 |
10 |
DATA |
10bit固定格式的数据输出 |
表1 OV7725 CMOS Sensor的控制信号引脚定义
图4 OV7725 CMOS Sensor模块的硬件电路图
图5 OV7725 CMOS Sensor模块的内部构造
在这个例程中我们通过OV7725模块实时采集图像视频并使用640*480分辨率一帧一帧地通过HDMI传输视频流给屏幕显示,这也是一个比较有代表性的项目类例程,如图6所示是豌豆开发板Artix7上CMOS模块统一接口的电路。
实际上笔者在绘制豌豆开发板原理图时,也参考了市面上大量开发板,但遗憾的是会发现不同开发板几乎都有自己一套自定义的接口,导致了很多不能兼容,也意味着当用了一家的开发板,如果想要做摄像头实验就必须购买对应的接口板和摄像头模块,不同开发板之间的摄像头模组不能通用,模块转接板不能通用,甚至连JTAG下载器接口也不能通用,就带来很多不必要的麻烦,所以笔者在这里采用了CMOS模块的统一接口,使其可以兼容市面上各家开发板的摄像头模块。
图6 豌豆开发板Artix7上CMOS模块统一接口的电路