摘 要: 系统以基于Cortex-M4内核的STM32F407作为控制核心,使用OV9655图像传感器采集图像,并利用TFT屏动态显示。图像传输模块基于LwIP协议实现向PC传输图像,最后PC接收并保存图像数据,利用MATLAB编程恢复图像,将其与TFT显示的图像对比。实验结果表明,图像传输稳定可靠,图像清晰,满足机器人通过图像识别目标的要求。
关键词: Cortex-M4 STM32F407;图像传输;LwIP
0 引言
图像是人类获取信息的主要来源,也是智能机器人感知环境和识别目标的重要信息源之一[1]。因此,如何通过相机传感器高速、有效地获取和传输图像信息,成为智能机器人利用图像正确感知环境和识别目标的前提。本文介绍了一种基于STM32F407芯片,利用LwIP协议的图像采集与传输系统。
1 系统的总体设计方案
本系统的总体设计思路为:以STM32F407为主控核心,通过DCMI接口接收图像传感器OV9655采集的图像,利用DMA方式将图像发送到外部SRAM,同时通过FSMC接口将此数据发送到TFT屏显示,然后将外部SRAM上的图像通过网络传输并保存到PC,最后,利用MATLAB软件将接收的图像数据进行恢复显示,并验证其正确性。系统总体结构如图1所示。
2 系统的硬件构成
本系统的硬件电路主要包括:微处理器、摄像头、以太网模块、SRAM、TFT、RJ45接口、JTAG接口、复位电路、电源等。
本系统的微处理器为ST公司的STM32F407IGT6[2],其主频达168 MHz,具有1 MB Flash,196 KB SRAM,专有DMA的10/100 Ethernet MAC,14 bit并行相机高速接口,为图像数据的采集提供了高速的传输速率。
摄像头采用Omni Vision 公司的OV9655[3],这是一款用于移动设备的130万像素CMOS图像传感器,具有照相和图像处理的多种功能(曝光控制、灰度调节、自动白平衡、色彩饱调节和噪声消除等)。其采用的Omni Pixel技术平台,独特的像素架构增加了信噪比,使传感器在低光照的条件下仍能良好工作。OV9655支持的图像格式包括:RGB(GRB 4:2:2,RGB 5:6:5/5:5:5)、YUV(4:2:2)和YCbCr(4:2:2),输出的图像尺寸包括SXGA、VGA、CIF和小于CIF至40×30的任何尺寸,本文设置图像输出格式为RGB 5:6:5,分辨率为320×240。
以太网模块的收发芯片为National公司的10/100 M以太网物理层收发芯片DP83848C,该芯片遵循Ethernet II和IEEE802.3u标准,支持MII、RMII、SNI三种数据连接方式,本文采用了RMII模式,见图1。对外采用RJ45接口连接,支持平行交叉网线自适应(Auto-MDIX),内部还集成了数据收发及滤波功能。在全双工模式下,可以同时实现发送和接收,理论上最高速度能达到100 Mb/s,本文对其配置为100 Mb/s。
3 系统的软件设计
系统软件的实现包括:图像数据采集、网络传输、图像数据存储与恢复显示。本文将重点介绍图像采集和网络传输的实现。
系统软件结构采用C/S(Client/Server)模式[4],在服务器端主要实现图像的采集和发送,在客户端实现图像的接收、保存与恢复显示。
3.1 图像采集
通过STM32F407IG控制DCMI接收OV9655采集的图像,再由DMA将图像发送到外部SRAM,并将其复制到TFT屏上显示,如图2所示。
图像采集流程具体为:
(1)图像采集模块初始化,包括TFT彩屏初始化、SRAM初始化、DMA初始化和DCMI接口初始化。初始化配置后,实现摄像头的DCMI接口和SRAM关联,即可通过DMA将DCMI接口的图像传输到SRAM。
(2)DCMI接口配置为帧中断。当获得的一帧图像数据后,产生中断,进入DCMI的中断服务函数,实现将SRAM中的图像复制到TFT屏进行显示的功能。
(3)使能DCMI接口捕获图像,并产生DCMI中断。
(4)使能DMA,将DCMI接口的数据复制到SRAM。
3.2 图像传输
本文利用LwIP(Light weight IP)实现图像到PC的传输。LwIP是瑞士计算机科学院的DUNKELS A等人开发的一套用于嵌入式系统旳开源代码TCP/IP协议栈,其在保持TCP/IP协议栈完整性的基础上,减少了RAM和ROM的占用,使LwIP适合在嵌入式系统中应用[5]。
嵌入式TCP/IP协议栈通常有以下两种实现方式:一种是将协议簇中的每个协议作为一个单独的进程,并指定进程之间的通信点。其优点在于结构清晰,代码易懂,占用系统资源较少,且方便调试;另一种方式是将协议栈驻留在操作系统内核中,应用程序通过系统调用与协议栈通信。该方式对系统RAM、ROM资源占用较高,且不能很好地支持MDK[5]环境下的断点调试,故本文选择第一种实现方式。
本文采用C/S模式来实现图像数据的发送和接收。其中,嵌入式系统作为服务器,PC作为客户端。服务器首先创建一个Socket,等待与客户端的连接,连接成功后发送图像。
服务器图像发送程序的基本步骤为:
(1)创建Socket,并指定SOCK_STREAM为TCP的Socket;
(2)初始化服务器端口和地址,并绑定Socket到服务器地址;
(3)监听Socket;
(4)接受客户端连接Socket的请求,并返回连接成功的Socket和客户端的地址;
(5)处理客户端连接,将图像采集模块存储到SRAM的图像数据,发送到客户端;
(6)关闭Socket,退出服务。
客户端首先通过网络助手设置其地址和端口:(1)协议类型为:TCP Client;(2)IP地址为:192.168.1.30;(3)端口为:5000。然后,客户端调用Connect函数与服务器建立连接,连接成功后,通过网络助手接收并保存从服务器发送的图像数据(如图3所示),最后关闭Socket。
通过网络助手接收的图像数据是将图像中所有像素的RGB值逐行以每像素16 bit的十六进制数进行保存的。为了验证接收到的图像数据的有效性和准确性,本文通过MATLAB软件编程,恢复并显示图像,如图4所示,与图2中TFT屏显示的图像相比,经网络传输到PC的图像无失真。实验结果表明,图像经网络传输有效而准确。
4 结论
图像是机器人智能识别目标的重要信源之一。本文介绍了一种基于STM32F407的图像采集和传输系统的设计与实现,利用轻量的TCP/IP协议进行Socket编程,实现将服务器端采集的图像数据网络传输到PC客户端。测试结果表明,其图像传输效果高速而有效,可满足客户端对图像采集与传输的需求,并且该系统的架构容易升级到无线网络进行远程的图像、视频和语音传输。
参考文献
[1] 马燕.图像目标跟踪算法研究[D].西安:西安电子科技大学,2011.
[2] STMicroelectronics. STM32F407xx datasheet[N]. STMicroelectronics Group of Companies, 2013-03.
[3] OmniVision. OV9655 datasheet v1.3[N]. OmniVision Technologies, Inc., 2005-11-15.
[4] 王永虹,徐炜,郝立平.STM32系列ARM Cortex-M3微控制器原理与实践[M].北京:北京航空航天大学出版社,2008.
[5] 胡亦万,基于Cortex-M3的LwIP移植以及嵌入式WEB的应用研究[D].南昌:南昌大学,2013.