FPGA 20个例程篇:19.OV7725摄像头实时采集送HDMI显示(一)

news2024/11/25 16:58:09

第七章 实战项目提升,完善简历

19.OV7725摄像头实时采集送HDMI显示(一)

       在例程“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几项关键性特征参数。

  1. 具有标准的SCCB配置接口,可以配置输出RAW RGB、YUV422、RGB565、RGB444、YCbCr422这几种格式的视频流;
  2. 支持VGA、QVGA,以及40像素*30像素到352像素*288像素分辨率的图像尺寸;
  3. 支持AEC(自动曝光)、AWB(自动白平衡)、ABF(自动带通滤波)、ABLC(自动黑电平校准);
  4. 图像饱和度、色相、伽马、锐度、噪声比等参数可调节;
  5. 支持配置实现帧同步模式、自动调节边缘增强、自动调节噪声抑制;

     如图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. AVDD(VDD_A)是模拟电源,而DOVDD(VDD_IO)是数字电源,为了保证电源的稳定性,一般情况下都会选择通过0欧电阻或者磁珠进行隔离;
  2. 对于摄像头的SCCB接口,实际上是一种和IIC相似的通信协议,所以需要对SCL和SDA进行4.7K电阻上拉;
  3. DOVDD、AVDD电源按照电路设计的一般规则,需要通过10uf、4.7uf、0.1uf电容进行滤波,保证电源的稳定性;
  4. DVDD(VDD_C)1.8V电源由OV7725 CMOS Sensor内部直接产生,最好也用常规容值的电容10uf、4.7uf、0.1uf进行滤波;
  5. 一般情况下不对OV7725 CMOS Sensor复位,只需把RESET拉高即可,所以在模块的二次开发中可以用典型的RC复位电路,并把RESET上拉3.3V这样FPGA把对应的IO口置高即把RESET上拉到3.3V电平;
  6. 模拟地和数字地直接需要用0欧电阻或者磁珠进行隔离;
  7. PWDN引脚低电平代表正常工作,高电平代表低功耗模式,在模块的二次开发中可以将其引出,也可以直接下拉到数字地上,这里用户基本都会去选择低电平的正常工作模式;

序号

引脚

说明

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模块统一接口的电路

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

k8s ingress概念和实践

什么是Ingress Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP/HTTPS 该特性从1.19版本开始作为stable状态进行发布 Ingress 公开从集群外部到集群内服务的 HTTP 和 HTTPS 路由。 流量路由由 Ingress 资源上定义的规则控制。 如下…

Python算法:三种简单排序的方法

目录 前言 1、插入排序 实例 2、选择排序 实例 3、冒泡排序 实例 前言 声明:本文所有动图来源为菜鸟教程 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红…

监督学习、半监督学习、无监督学习、自监督学习、强化学习和对比学习

目录 一、监督学习 二、半监督学习 三、无监督学习 3.1.聚类算法 3.2.降维算法 3.3.异常检测 3.4.自动编码器 3.5.生成模型 3.6.关联规则学习 3.7.自组织映射(SOM) 四、自监督学习 4.1. 基于上下文(Context based) 4.2. 基于时序&#xff08…

85.【Vue-细刷-01】

Vue(一)、利用Vscode开发Vue1.在桌面创建文件夹code2.使用Vscode进行打开这个文件夹3.在Vscode的右键创建文件夹4.右键创建.html文件(二)、第一个Vue程序1.下载并引入Vue.js2.引入vue.js3.创建视图层4.创建Model层5.获取Vue实列中的数据6.效果展示⭐为什么要使用new 关键字来创…

文件操作(二):学习笔记10

目录 一.概念梳理 1.文件的分类 2.程序运行时,内存和外存数据交流的过程 二.文件缓冲区 三.常用的文件读写函数笔记 1.常用格式化文件读写函数 (1)格式化文件写入函数 用fprintf进行文件写入操作: (2)格式化文件读取函数 用fscanf进行文件读取 2…

Java枚举类与注解

目录 一、枚举类的使用 枚举类的实现 枚举类的属性 自定义枚举类 步骤 举例 使用enum定义枚举类 使用说明 举例 Enum类的主要方法 实现接口的枚举类 二、注解的使用 概述 常见的Annotation示例 自定义Annotation(参照SupressWarnings 定义&#xff09…

一不小心,登上支付宝开发者社区热文榜单Top3

大家好,我是小悟 那天中午要午休的时候,看到微信通讯录新朋友有个红色1,像俺这种有强迫症的,那不得去把它点掉。打开一看,加好友的备注是“我是熊二,支付宝开发者社区运营”。 收到支付宝社区的运营添加微…

【ROS】dynamic_reconfigure配置详细说明

文章目录 文章目录 前言 一、编写.cfg文件 二、为节点配置dynamic_reconfigure 总结 前言 dynamic_reconfigure配置是ROS中为了方便用户对程序中的参数进行实时调整而推出的工具,配置好自己的dynamic_reconfigure文件后,可以很方便的使用ROS提供的r…

2022-12-18 网工进阶(三十八)MPLS LDP---LDP基础、工作原理(会话、标签的发布和管理、特性)、配置举例

LDP概述 LDP是MPLS的一种控制协议,相当于传统网络中的信令协议,负责FEC的分类、标签的分配以及LSP的建立和维护等操作。LDP规定了标签分发过程中的各种消息以及相关处理过程。 LDP的工作过程主要分为两部分:LSR之间建立LDP会话;…

一种小型项目的超时机制方案

设计背景 在小型项目中,状态机的跳转往往依赖于某个事件的状态,因此监控某个事件是否处于超时状态就至关重要; 注意事项 超时机制应该能够准确的判断出事件是否真正超时,并预留出设置自定义超时处理的接口;超时机制…

什么是大数?大数有什么用?如何使用大数?

0 什么是大数 如果基本的整数和浮点数精度不能够满足需求,那么可以使用 javamath 包中两个很有用的类:BigInteger和 BiDecimal。 这两个类可以处理包含任意长度数字序列的数值。 BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数运算…

Android | Fragment

Android Fragment Fragment 概念 Fragment 表示应用界面中可重复的一部分,Fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。fragment 不能独立存在,而是必须由 Activity 或另一个 fragment 托管…

麦克纳姆轮(麦轮)原理

一、麦轮原理 麦克纳姆轮:简称麦轮,由轮毂和围绕轮毂的辊子组成。 辊子:没有动力的从动小滚轮。 麦克纳姆轮辊子轴线和轮毂轴线夹角是45度。 A轮(左旋)与B轮(右旋)互为镜像关系 麦轮在车上的…

Go语言开发小技巧易错点100例(五)

往期回顾: Go语言开发小技巧&易错点100例(一)Go语言开发小技巧&易错点100例(二)Go语言开发小技巧&易错点100例(三)Go语言开发小技巧&易错点100例(四) …

打工人必学的法律知识(五)——《女职工劳动保护特别规定》

女职工劳动保护特别规定https://flk.npc.gov.cn/detail2.html?ZmY4MDgwODE2ZjNjYmIzYzAxNmY0MTBmMWVkNTE0NTE (2012年4月18日国务院第200次常务会议通过 2012年4月28日中华人民共和国国务院令第619号公布 自公布之日起施行)第一条 为了减少和解决女职工…

如何减少频繁创建数据库连接的性能损耗?

为极速开发出一套某垂直领域电商系统,采用最简架构: 前端一台Web服务器运行业务代码后端一台DB服务器存储业务数据 大多系统初生时就是这样,只是随业务不但发展变得复杂,架构迭代。系统上线后,虽用户量不大&#xf…

第十三届蓝桥杯大赛软件类决赛Java大学B组C题——左移右移

【问题描述】 小蓝有一个长度为 N 的数组,初始时从左到右依次是 1, 2, 3, . . . N。 之后小蓝对这个数组进行了 M 次操作,每次操作可能是以下 2 种之一: 左移 x,即把 x 移动到最左边。右移 x,即把 x 移动到最右边。 …

数字信号处理音频FIR去噪滤波器(基于MATLAB GUI的开发完整代码+报告+课设)

1、内容简介利用MATLAB GUI设计平台,用窗函数法设计FIR数字滤波器,对所给出的含有噪声的声音信号进行数字滤波处理,得到降噪的声音信号,进行时域频域分析,同时分析不同窗函数的效果。将文件解压至一个目录下&#xff0…

ithewei的2022年度总结

窗外的雨,顺着晒衣架汇聚成豆大的珠,落到一楼庭院顶棚上,嘀嗒不停; 路上的车,由远及近,又由近及远,疾驰而过; 床边的猫,也已入睡,时不时发出一两声细微的鼾声…

面试问:@Resource 和@Autowired 的区别是什么?该怎么回答

Resource 和 Autowired 这两个注解的作用都是Spring生态里面去实现 Bean 的依赖注入 Autowired注解的作用 Autowired是Spring里面提供的一个注解,它默认是根据类型来实现Bean的依赖注入。 Autowired注解里面有一个required属性,它的默认值是true&#…