APP下载

基于FPGA的HDMI多模式显示系统设计

2018-01-04山丹丛国涛张晓旭

电脑知识与技术 2018年29期

山丹 丛国涛 张晓旭

摘要:本文阐述了以FPGA为视频显示系统的控制核心,辅以OpenMV机器视觉模块实现对图像进行采集、处理,最终实现在HDMI接口显示器上显示。通过FPGA可以进行多种视频处理模式的选择,包括中值滤波、均值滤波、椒盐噪声滤波等多种滤波方式的选择,边沿检测、二值化等多种处理方式选择。系统具有抗干扰性较强、小巧、灵活、低功耗、通用性及可扩展性强等特点,即适合工业领域,又适合家居使用。

关键词:FPGA;OpenMV;视频处理;HDMI

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)29-0248-03

Abstract: In this paper, the video display system based on FPGA is designed, which is supplemented by OpenMV machine vision module capturing and processing video information. Finally, the processed image is displayed on the displayer with HDMI interface. Various video processing modes can be selected by FPGA, including median filtering, mean filtering, salt and pepper noise filtering, edge detection, binarization and others. The system has the characteristics of high anti-interference, compact, flexible, low power consumption, high versatility and extendibility, which is not only suitable for industrial areas, but also for home use.

Key words: FPGA; OpenMV; Video Processing; HDMI

随着社会信息化的快速发展,信息的可视化需求也急剧扩大,而设计一款小巧、便捷、灵活、低功耗、低成本、适应性强的视频采集及处理系统已经引起了人们的注意。而高清晰度多媒体接口HDMI(High-Definition Multimedia interface)作為一种专用数字音视频传输接口,已经在液晶显示器、液晶电视、高清相机等产品中得到广泛应用[1]。本文设计提出的以FPGA作为控制核心的视频采集及显示系统,不仅可以通过OpenMV机器视觉模块对像素、滤波方式等进行灵活多样的设置[4],而且可以实现HDMI接口芯片控制,以适应不同应用场合的需要。

目前,此类系统多采用ARM、DSP等作为控制核心[2],而此智能小车以FPGA作为核心控制芯片,其拥有大量逻辑单元和布线资源,可方便地实现各种逻辑功能,并可现场编程。其具有低功耗、并行控制优势,实时反映、快速处理、可靠性高、可扩展性强等优点[3]。

1系统总体设计方案

本系统是由FPGA核心板、视频采集及预处理模块、GPRS远程通信模块组成,HDMI显示器组成,如图1所示。

系统工作原理。 ① FPGA核心板采用Altera的CycloneIV系列 4CE115 FPGA作为控制中心,接收由按键设置的模式信息,经过同步处理、去抖处理后,作为控制模式转换的依据;并将模式信息通过UART接口发送给视频采集及预处理模块。②FPGA接收从视频采集及预处理模块,通过UART接口反馈回来的视频信息,产生HDMI接口芯片控制时序,完成图像在HDMI接口显示器上显示。③视频采集及预处理部分采用OpenMV机器视觉模块,通过Python编程,并根据FPGA控制中心的模式信息,调整像素设置,并完成滤波、边缘检测等处理功能。④GPRS远程控制模块采用SIM900A GPRS模块,实现与手机的信息交互,通过手机,以短信的方式,对系统的工作模式进行远程设置。

系统工作模式。上电后,首先检测是否存在系统运行模式设置,如果有设定则进入相应模式运行。这里,当选择30万像素摄像头时,所拍摄画面的窗口大小可以设置为:640ⅹ480、320ⅹ240等模式之一,通过选择更高像素的摄像头,可以提高窗口大小的设置;选用的滤波方式可设置为:中值滤波、均值滤波、边缘检测等模式,图像显示可设置为彩色原图像、灰度图像、二值化黑白图像、边缘检测、动态目标捕捉后图像五种模式可选。

2视频采集及处理模块

传统的视频采集,通常采用通用摄像头模组,采集图像后,经过白平衡等简单处理后,传送给单片机或其他中央处理单元,完成滤波等处理后,最终在显示器上显示出来。视频处理过程相对烦琐、实现周期长。而OpenMV视频采集及处理单元作为易用、低价的机器视觉开发组件,不仅可以采集视频数据,而且可以通过python编程,调用内置的常用算法函数,方便地实现视频窗口大小设置、滤波及各种检测功能,提高了系统开发效率,缩短了开发周期。

OpenMV模块通过UART端口接收来自FPGA核心控制模块的设置指令,当连续接收两个字节的数据,其中,第一个字节为0xFF,则表示第二个字节为设置指令,最多允许0x00~0x7F,共128种设置,波特率设置为115200bps。典型设置如下所示:

① 画面窗口大小可以设置为:VGA模式(640ⅹ480)、QVGA(320ⅹ240)、QQVGA(160ⅹ120)、QQQVGA(80ⅹ60),通过API函数sensor.set_framesize( )实现设置。

②选用的滤波方式可设置为:Midpoint(中值滤波)、Mean(均值滤波)、Edge(边缘检测)等模式。中值滤波可以通过img.midpoint()函数实现,均值滤波可以通过img.mean(1)实现,边缘检测可以通过img.erode()实现。

③图像显示可设置为Color(彩色原图像)、Grey(灰度图像)、Bianry(二值化黑白图像)、Edge(边缘检测后图像)、Difference(移动检测&拍照)五种模式。灰度化可以通过函数sensor.set_pixformat(sensor.GRAYSCALE)实现,黑白图像则可以通过img.binary()来实现。

④另外,还可实现拍照和对线、图形、颜色、人脸等的检测和追踪。

程序调试完成后,将程序固化到OpenMV模块的Flash中,脱机运行。

3远程通信模块

系统上电后,可以通过GPRS模块与手机随时建立无线通信,方便对系统进行远程设置以及获取系统当前状态。这里,系统搭载的GPRS模块选用SIM900A模块,支持四个频段,包括850,900,1800,1900MHz,最大数据速率,下载85.6Kbps,上传42.8Kbps,搭配3G手机卡,可方便实现短信收发功能。当通过手机向系统发送短信指令时,SIM900A模块将接收到的信息包通过IIC接口发送给FPGA,由FPGA进行拆包,对信息进行解析和判断,决定如何对视频采集及处理模块进行设置等。图4为英文短信读取流程图。如果手机发过来的指令是需要获取系统目前运行状态时,FPGA将需要发送的数据封装成SIM900A需要的包格式,通过IIC接口发送给SIM900A,再由SIM900A发送给手机端。

4 HDMI协议转换模块

HDMI模块采用的核心芯片是ADV7513,通过IIC接口协议配置其内部寄存器,配置成功后,ADV7513会将视频数据,通过最小化传输差分信号(TMDS)的编码技术将其编码为数据包,实现于HDMI接口显示器的连接。虽然FPGA也可以通过设置电平标准设置多种标准的LVDS,但其不能完全兼容TMDS,因此本设计选用HDMI接收/发送芯片来实现HDMI接口功能。而FPGA实现对接口芯片的控制和视频数据传输。

5 FPGA核心控制模块

FPGA模块是整个视频系统的控制核心,负责OpenMV视频数据和GPRS远程信息,将信息汇集到FPGA中,进行相应处理,并将视频数据转换为HDMI驱动芯片能接收的数据格式及时序特性后,传送给HDMI驱动芯片,最终实现与HDMI接口显示器的连接。图2为FPGA内部电路的模块图,包括控制单元和数据通道两大模块。视频数据及远程控制指令经过数据通道处理后,进入控制单元,控制状态机的状态跳转,并输出相应的控制信号,送给数据通道,最终输出给OpenMV模块、HDMI接口芯片、GPRS模块。

①数据通道模块主要包括视频数据接收子模块、GPRS接口模块、HDMI接口转换模块。其中视频数据接收子模块一方面实现UART串行数据到并行数据的转换,另一方面对视频数据进行缓存,实现不同时钟域数据的传输。对数据的缓存是通过片上FIFO和DPRAM来实现的。对OpenMV模块和HDMI接口芯片的设置指令保存在ROM中,数据线宽度和地址线宽度均为8,共支持255种设置类型。GPRS接口模块一方面对串行指令进行并行转换,之后对指令进行拆包,解析出指令类型;另一方面,将需要发送的数据封装成包,并将并行数据转成串行数据,按照IIC时序发送给FPGA外部的GPRS模块。HDMI接口转换模块用来产生HDMI驱动芯片所需的接口时序,包括同步时钟、行同步、场同步和数据总线使能信号,并通过并行数据总线发送要显示的视频数据。另外,在发送视频数据之前,通过IIC总线对HDMI接口芯片寄存器进行配置,配置数据以查找表的方式存储,指令支持0x80~0x9F,共32种设置。

这里,由于OpenMV串口通信速率的影响,以30万像素摄像头为例,采用隔行扫描方式,对于显示分辨率为640ⅹ480的HDMI显示器而言,更新1帧数据约1秒钟,适合应用于动态目标检测及拍照显示。

②控制单元模块作为FPGA控制模块的核心,根据系统现态以及外部输入,决定系统次态,并根据状态机所处状态,产生相应控制信号传送给数据通道,最终实现系统动作控制。状态机如图3所示,系统共9个状态,分别为系统初始化、OpenMV默认设置、HDMI默认设置、等待、GPRS短信解析、HDMI设置更新、OpenMV设置更新、获取视频信息、HDMI显示。其中,在HDMI显示状态,显示完1帧数据后,返回等待状态,检测是否接收到GPRS短信设置,如果接收到,则进行设置指令解析,更新HDMI设置或者OpenMV设置。

6系统调试与分析

①OpenMV视频采集及处理模块的调试。确认能够按照设置窗口大小正确采集图像信息,并实现滤波、边缘检测等功能。但由于所用HDMI显示器的分辨率与OpenMV可选窗口大小不匹配,无法正确显示,经过Python编程,对窗口大小进行了裁剪,实现了与显示器分辨率的匹配。

② GPRS远程控制模块的调试。主要分两步进行,先调试接收功能,再调试发送功能。调试之初发现通过手机发送短信给系统后,系统并没有按照相应指令,实现对OpenMV模块的设置,比如手机发送边缘检测指令后,显示器图像并没有边缘检测效果。后借助QuartusII自带的在线逻辑分析仪SignalTap,采集接收到的数据包,并进行解析,发现实际短信包格式与原预期格式存在差异。根据实际包格式,修改解析代码,最终实现了手机远程发送短信来对系统进行设置的功能。另外,实现了系统向手机发送应答短信的功能。

③HDMI芯片接口模块的调试。分成两步进行,首先通过IIC接口对芯片进行配置。配置结束后,传送固定色条数据,色条数据保存在FPGA的片内ROM中,仅在调试HDMI接口时使用。色条数据正常显示后,再显示正常动态图像。

④在调试上述功能时,均需要FPGA核心控制模块的支持,即完成上述功能模块调试,也就完成了FPGA部分的调试。

FPGA资源使用情况如图4所示,保留了充分的图像处理功能扩展空间。在窗口大小为VGA模式,经过中值滤波,边缘检测后,HDMI顯示器图像,如图5所示。

7结语

本系统设计充分利用OpenMV机器视觉模块可通过Python编程,调用内置的视频处理函数,方便、快捷的实现视频采集及预处理功能的特点,与FPGA具有并行处理、电路实现灵活、可现场编程的优点相结合,实现了图像的采集、处理、HDMI显示功能。另外,借助于GPRS模块,实现了远程控制。不仅功能灵活,而且可扩展性强,根据不同需要,进行合理设置,实现不同功能需要。既可应用于工业环境,也可作为家居安防的一部分使用。

参考文献:

[1] 梁义涛,唐矗,史卫亚,等. 基于Cyclone IV的Camera Link-HDMI高清视频转换器设计[J]. 电子技术应用, 2013,39(5): 12-14.

[2] 向梓豪,陆安江. 基于FPGA的HDMI多模式显示模块设计[J]. 电子技术应用, 2017,43(12): 48-51.

[3] 潘磊,葛中芹,庄建军,等. 基于FPGA的HDMI视频流图像处理的系统设计[J]. 实验室研究与探索, 2015,34(10):76-79.

[4] 凡哥.凡哥带你玩转OpenMV [EB/OL],https://blog.csdn.net/

HZ_CloudRiver/article/details/78177307?locationNum=6&fps;=1,2017

【通联编辑:梁书】