【正点原子FPGA连载】 第三十五章双目OV5640摄像头HDMI显示实验 摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0

news2024/11/29 13:44:39

1)实验平台:正点原子MPSoC开发板
2)平台购买地址:https://detail.tmall.com/item.htm?id=692450874670
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html

第三十五章双目OV5640摄像头HDMI显示实验

在双目OV5640摄像头RGB-LCD显示实验中,成功地在LCD屏上实时显示出了摄像头采集的图像。本章将使用FPGA开发板实现对双目OV5640的数字图像采集并在HDMI显示器上实时显示。本章包括以下几个部分:
3535.1简介
35.2实验任务
35.3硬件设计
35.4程序设计
35.5下载验证

35.1简介
在“OV5640摄像头RGB-LCD显示实验”中对OV5640的视频传输时序、SCCB协议以及寄存器的配置信息等内容作了详细的介绍,如果大家对这部分内容不是很熟悉的话,请参考“OV5640摄像头RGB-LCD显示实验”中的OV5640简介部分。本次实验将在前面“双目OV5640摄像头RGB-LCD显示实验”的基础上学习双目摄像头的HDMI显示。
35.2实验任务
本章的实验任务是利用双目OV5640摄像头采集图像,将采集到的图像实时显示在HDMI显示器上,两幅图像分别占据HDMI显示器的左右半边。
35.3硬件设计
摄像头扩展接口原理图及双目OV5640模块说明与“双目OV5640摄像头RGB-LCD显示实验”完全相同,请参考“双目OV5640摄像头RGB-LCD显示实验”硬件设计部分。HDMI接口部分的硬件设计请参考“HDMI彩条显示实验”中的硬件设计部分。
由于双目OV5640、HDMI接口和DDR4引脚数目较多且在前面相应的章节中已经给出它们的管脚列表,这里不再列出管脚分配。
35.4程序设计
根据实验任务,首先设计如图 35.4.1所示的系统框图,本章实验的系统框架延续了“双目OV5640摄像头RGB-LCD显示实验”的整体架构。本次实验包括以下模块: DDR4控制器模块(ddr4_top)、摄像头驱动顶层模块(ov5640_dri)和HDMI顶层模块(HDMI顶层模块包含时钟模块(clk_wiz_0)、视频显示模块(video_driver)、HDMI驱动模块(dvi_transmitter_top)以及字符串显示模块(lcd_disply))。其中DDR4控制器顶层模块、字符串显示模块、和摄像头驱动模块完全延用了“双目OV5640摄像头RGB-LCD显示实验”中的模块,没有做任何修改,而MMCM时钟IP核模块、HDMI驱动模块和视频显示模块也是完全延用了“HDMI彩条显示实验”中的模块,这几个模块除了视频显示模块中的数据请求信号(data_req)提前了两个时钟之外(原本相对于video_de是只需要提前一个时钟周期用来提前准备好数据,但是本节实验数据是先进入字符串显示模块,再将携带字符串信息的像素数据传输到视频显示模块,这中间耗费了一个时钟周期,因此本节实验data_req信号需要提前两个时钟周期),其他也是没有做任何修改的,所以本节实验完全可以看成是将“双目OV5640摄像头RGB-LCD显示实验”中的LCD显示模块,替换成了“HDMI彩条显示实验”中的HDMI显示模块。因此本节实验就不再对程序代码做讲解了,大家有不懂的地方可以去看前面的“双目OV5640摄像头RGB-LCD显示实验”和“HDMI彩条显示实验”这两个例程。下面我们来分析一下本节实验软件工程的整体架构。
在这里插入图片描述

图 35.4.1 顶层系统框图
我们先来分析一下上图中的时钟网络,首先板载时钟芯片提供一对差分时钟(系统时钟),直接进入MIG IP核,一方面作为MIG IP核的驱动时钟,另一方面由MIG IP核内部派生出一路50MHz的时钟,进入ov5640顶层模块和MMCM时钟IP核模块。而MMCM时钟IP核模块又分频出三路时钟(像素时钟、2.5倍像素时钟、5倍像素时钟,频率大小由HDMI显示分辨率决定)进入HDMI驱动模块,其中像素时钟还进入了视频显示模块作为视频显示模块的驱动时钟。
分析完了时钟网络之后我们再来看看数据流,先是ov5640顶层模块配置ov5640摄像头,配置成功后采集ov5640摄像头传入的数据,并将数据传输到DDR4顶层模块;DDR4顶层模块通过MIG IP核驱动外部DDR4芯片,将摄像头数据写入DDR4芯片,当接收到视频显示模块的读数据请求后,就会把外部DDR4芯片中缓存的数据再读回来传递给字符串显示模块,字符串显示模块会将字符串信息加载到像素数据中去,然后再将数据传递给视频显示模块;视频显示模块会将数据和行场同步信息一起发给HDMI驱动模块,HDMI驱动模块会将像素数据、行场同步信息以及像素时钟分别进行TMDS编码(不了解TMDS编码的同学可以看前面的HDMI彩条显示实验),最后驱动HDMI显示器,将摄像头采集到的图像显示在HDMI显示屏上。下面是顶层模块的原理图:

在这里插入图片描述

图 35.4.2 顶层模块原理图
FPGA顶层模块(ov5640_hdmi)例化了以下三个模块: OV5640驱动模块(ov5640_dri)、DDR控制模块(DDR4_top)以及HDMI顶层模块(HDMI顶层模块包含时钟模块(clk_wiz_0)、视频显示模块(video_driver)、HDMI驱动模块(dvi_transmitter_top)以及字符串显示模块(lcd_disply))。
时钟模块(clk_wiz_0):时钟模块通过调用MMCM IP核实现,共输出3个时钟,频率分别为75Mhz时钟(HDMI像素时钟)、187.5Mhz(HDMI像素时钟的2.5倍频)时钟和375Mhz时钟(HDMI像素时钟的5倍频)。其中75Mhz时钟就是根据HDMI显示规范来设定的标准像素驱动时钟,因为本节实验采用的是720P的分辨率所以像素时钟选择75Mhz(实际规范是74.5Mhz,这里比实际规范要求的时钟频率稍微大一点,不影响功能)。而187.5Mhz时钟和375Mhz时钟分别是像素时钟的2.5倍和5倍,他们的作用一个用于10bit进4bit出的ram,另一个是用于10bit并行数据转1bit串行数据,详细讲解请参考前面的HDMI彩条显示实验例程。
OV5640驱动模块(ov5640_dri):OV5640驱动模块负责驱动OV5640 SCCB接口总线,将像素时钟驱动下的传感器输出的场同步信号、行同步信号以及8位数据转换成DDR读写控制模块的写使能信号和16位写数据信号,完成对OV5640传感器图像的采集。
DDR控制模块(DDR4_top):DDR读写控制器模块负责驱动DDR片外存储器,缓存图像传感器输出的图像数据。该模块将MIG IP核复杂的读写操作封装成类似FIFO的用户接口,非常方便用户的使用。
有关DDR控制模块的详细介绍请大家参考“OV5640摄像头RGB-LCD显示实验”章节。
字符串显示模块(lcd_disply):字符串显示模块定义了“0V5640 1”和“0V5640 2”两个字符串的字模信息,会在HDMI显示屏上显示这两个字符串,具体的显示原理请大家参考“双目OV5640_LCD显示实验”例程。
视频显示驱动模块(video_driver):视频显示驱动模块主要作用就是生成HDMI的行场同步时序和数据读取请求,并将摄像头的rgb565数据转换成rgb888数据。
HDMI驱动模块(dvi_transmitter_top):HDMI驱动模块的作用就是将行场同步信息、像素数据以及像素时钟进行TMDS编码,再将并行数据转换成串行数据输出给外界的HDMI显示屏,从而实现将摄像头采集的图像数据在HDMI显示屏上显示的功能。
有关HDMI视频显示驱动模块和HDMI驱动转换模块的详细介绍请大家参考“HDMI彩条显示实验”章节。
35.5下载验证
编译完工程之后我们就可以开始下载程序了。将双目OV5640摄像头模块插在DFZU2EG/4EV MPSoC开发板的J19扩展口上,并将HDMI电缆一端连接到开发板上的HDMI插座,另一端连接到显示器。将下载器一端连电脑,另一端与开发板上的JTAG端口连接,然后连接电源线后拨动开关按键给开发板上电。硬件连接如下图所示:
在这里插入图片描述

图 35.5.1DFZU2EG/4EV MPSoC开发板连接HDMI显示器
接下来我们下载程序,验证双目OV5640 HDMI实时显示功能。下载完成后观察HDMI显示器显示的图案如下图所示,说明双目OV5640 HDMI实时显示程序下载验证成功。
在这里插入图片描述

图 35.5.2 HDMI实时显示图像

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

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

相关文章

基于jsp+mysql+ssm二手书交易管理系统-计算机毕业设计

项目介绍 这样一个二手书交易网站为用户提供了一个可以在网上买卖图书的平台,用户可以通过二手书交易管理系统进行注册或登录操作,登录成功后可以查看自己已发布的售书信息或者求购信息。同时,用户可以浏览其他用户发布的售书信息和求购信息…

基于51单片机的多层电梯(1-16层)运行系统仿真设计_层数可改

基于51单片机的多层电梯(1-16层)运行系统仿真设计_层数可改 仿真图proteus 8.9 程序编译器:keil 4/5 编程语言:C语言 设计编号:S0027 视频演示 基于51单片机的多层电梯(1-16层)运行系统仿真设计演示视频主要功能: 结合实际情…

[附源码]Python计算机毕业设计SSM基于web的学生社团管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]Python计算机毕业设计SSM基于的二手房交易系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 Ma…

基于Java+SQL Server2008开发的(WinForm)个人财物管理系统【100010036】

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展,计算机在管理方面应用的旁及,利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的,其次对个人财务管理…

2022年12月中国数据库排行榜:OceanBase立足创新登榜首,华为腾讯排名上升树雄心

不经一番寒彻骨,怎得梅花扑鼻香。 2022年12月的 墨天轮中国数据库流行度排行榜 火热出炉,本月共有249个数据库参与排名,相比上月新增3个数据库。本月排行榜前十用一句话可以概括为:榜单前十一片红,TODO 格局重洗牌&…

[附源码]Python计算机毕业设计SSM基于web技术的米其林轮胎管理系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

SpringBoot中使用Spring-Retry重试框架 - 第454篇

悟纤:最近我看到自己之前的try/catch、while代码进行请求的重试,看着很不舒服。 师傅:确实了,为师以前也是写出过这样的一堆难看的代码。 悟纤:那师傅这个事情有解吗? ​师傅:徒儿,…

博客网页制作基础大二dw作业 web课程设计网页制作 个人网页设计与实现 我的个人博客网页开发

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

2022全年度平板电视十大热门品牌销量榜单

随着社会的发展,近年来,平板电视成为了彩电转型升级的新方向。随着我国传统彩电进入存量竞争阶段,平板电视已成为我国彩电行业结构调整和转型升级的主要方向。 根据鲸参谋数据统计,今年京东平台平板电视的年度累计销量达到1300多万…

< 在element-ui中: 使用el-tree + el-table组件,联动请求用户数据表格组件 (基础版,后续可能更新) >

文章目录👉 前言👉 一、效果演示👉 二、原理👉 三、实现代码往期内容 💨👉 前言 在 Vue elementUi 开发中,实现通过树状组织机构,点击查询用户信息联动效果! 组件较为简…

MySQL数据库学习(6)

一、MySQL索引简介 索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录。 通过索引,查询数据时不用读完记录的所有信息,而只是查询索引列。不然的话,数据库系统将…

强化学习_06_pytorch-doubleDQN实践(Pendulum-v1)

环境描述 环境是倒立摆(Inverted Pendulum),该环境下有一个处于随机位置的倒立摆。环境的状态包括倒立摆角度的正弦值,余弦值,角速度;动作为对倒立摆施加的力矩(action Box(-2.0, 2.0, (1,), float32))。…

windows11安装cuda+cudnn

安装Nvidia显卡驱动 如需安装显卡驱动,在官方驱动下载网站找到自己的显卡型号对应的驱动下载并安装:官方驱动 | NVIDIA 安装CUDA 前言 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkit(toolkit就是指工具包)cu…

Qt扫盲-QLineEdit理论总结

QLineEdit理论总结1. 简述2. 输入模式3. 输入限制4. 文本操作槽函数3. 信号4. 快捷键5. 外观1. 简述 QLineEdit 是一个有用的编辑功能类,主要是处理输入和编辑单行纯文本 ,主要是单行哦,就用来输入简单,短小的字符串。内部其实已…

极客时间Kafka - 09 Kafka Java Consumer 多线程开发实例

文章目录1. Kafka Java Consumer 设计原理2. 多线程方案3. 代码实现4. 问题思考目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序…

JSP ssh科研管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 JSP ssh科研管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myec…

Core Scheduling

Core Scheduling要解决什么问题? core scheduling是v5.14中新增的功能,下图是内核数据结构为该功能所添加的字段。 为什么有core scheduling呢?因为当开启超线程(HyperThreading)时,一个物理核就变成了两个逻辑核,但&…

postgres 源码解析43 元组的插入流程详解 heap_insert

本文讲解postgres中元组的插入流程,深入了解其实现原理。同时此过程涉及元组xmin/xmax与标识位的设置细节,与事务的可见性部分密切相关相关,借此复习一下。 heappage结构 执行流程框架图 heap_prepare_insert 该函数执行内容较为简单&#…

课设项目之——教学辅助系统(学生考试监考系统)

在考试场中为学生监考十分枯燥,因此,建立一个可靠的作弊检测系统来识别学生是否存在作弊行为。 使用一个名为 Yolo3 的训练模型和一个名为 coco 的数据集,我们测试了考场中学生的书籍和手机,并将他们标记为作弊者。 使用haarcasc…