顾静静 姜 平
(南通大学电气工程学院,江苏南通226019)
摘要:针对传统的图像采集面临的主要问题,提出了基于STM32的高性价比的图像采集与重现方案。重点介绍了该方案的硬件组成和软件设计,主要设计思想是用STM32读取COMS摄像头OV7670缓存数据,通过串口传送到上位机;在VS2010编译环境下,利用微软serialPort类实现STM32与上位机的串口通信,以模板填充的方式重现图片。实验结果表明,该系统可以实现轴承图像的采集与重现功能,且重现图像与实际图像吻合,清晰度高,稳定性好,能够满足后续轴承图像处理的要求。
关键词:图像采集STM32 COMS摄像头轴承传感器串行通信软件设计数据处理
中图分类号:TP368+.2;TH86 DOI:10.16086/j.cnki. issnl000 - 0380. 201604011
0引言
轴承是机械设计中重要的基础件之一,轴承质量的好坏关系到机械运行的质量和效率,因此机械制造业对轴承质量提出了较高的要求。而人工检测轴承的效率比较低,利用先进的检测技术检测轴承已经成为一种必然趋势。其中,较为常见的方法就是利用机器视觉技术。
图像采集在机器视觉处理中起着基础性的作用,传统的图像采集系统一般由CCD摄像机、图像采集卡及匹配的采集软件组成。使用图像采集卡采集图像具有实时性高的优点,但是其价格较高、操作复杂,且上位机须配备有PIC接口。此外,传统的图像采集系统经常会因为驱动的问题出现死机现象,严重影响了图像的后续处理。为了解决这一系列问题,本文提出了基于串行通信的图像采集方案。
串行通信具有硬件电路接口简单、串口编程简单等特点,使用串口通信减少了开发周期,降低了开发成本,且能满足各项性能要求。本文以COMS摄像头为例,以STM32为核心处理器,读取COMS摄像头FIFO缓存数据,通过串口传输实现图像的采集与重现。该系统克服了使用采集卡过程的弊端,开发周期短、成本低,性价比高,为灵活使用COMS摄像头采集图像进行图像处理的研究奠定了基础。
1 图像采集硬件系统设计
1.1硬件设计
本文设计了基于COMS摄像头的图像采集与传输平台。该平台的系统硬件框图如图1所示。
STM32最高只有72 MHz,采用直接抓取的方式非常困难,且占用CPU,而OV7670的像素时钟最高可达24 MHz,所以本课题采用的是OV7670摄像头模块,该模块中带有缓存图像功能。单片机STM32的主要任务是实现图像的采集与传送。STM32通过串口与上位机连接,在上位机上,本文采用C#语言编写图像数据处理及显示程序。
1.2硬件选择
(1)摄像头。
目前主流摄像头主要分两类,一类是CCD摄像头,其具有光学灵敏度高、噪声低、像素高等优点;但是其价格昂贵,且需要配合图像采集卡才能使用。在满足采集要求的情况下,本课题采取另一类摄像头,即CMOS摄像头,其具有体积小、工作电压低、灵敏度高等优点,且大幅降低了设计成本。综上所述,本课题决定选择OmniVision公司开发的30万像素的
OV7670CMOS彩色图像传感器芯片。
(2)控制器。
STM32是ST公司开发的高性能、低成本、低功耗的芯片,它相当于一个小型的PC机,其优势主要体现在控制方面。综合考虑系统的实时性要求及设计成本,本系统采用高性价比的STM32FI03ZET6芯片。
(3)图像采集系统。
图像采集系统主要由支架、摄像头、轴承、背光源4个部分组成。支架采用可移动支架来固定摄像头的位置,使其镜头朝下,对准轴承的位置。要判断轴承是否存在缺珠、涂油等缺陷,在采集图像时必须采集到轴承的孔洞信息。为了使摄像头采集到高质量的图片以便于后续的处理,本课题采用背光源来采集图像。但是由于轴承孔洞比较小,给采集带来了很大的挑战。为了能够采集到清晰的孔洞信息,对光源提出了比较严格的要求,光照要求柔和、均匀,否则采集到的图像轮廓不清,不便于后续处理。
2 图像采集软件设计
2.1 0V7670图像采集模块设计
OmniVision公司的OV7670是数字图像传感器,它具有体积小、工作电压低等优点,其视频图形阵列( video graphics array,VGA)图像刷新最高速率为30帧/S。OV7670的所有图像处理功能都可以通过SCCB接口编程,支持多种图像输出格式,广泛应用于嵌入式系统中。
OV7670输出数据接口提供的主要控制信号如表1所示。
本文通过设定OV_PCLK、OV_VSYNC和OV_HREF/HSYNC等控制信号,实现对OV7670的输出控制。本文采用QVG时序输出,RGB565格式,行扫描输出,即分辨率为320×240的输出格式。当OV-HREF为高时,系统输出图像,每个OV_PCLK输出一个字节。在输出行时,每行共需要320 x2个OV_PCLK周期,320 x2个字节输出,其中每两个字节组成一个像素,先高字节后低字节。在帧输出时,240行组成一帧,帧同步信号控制图像输出。通过硬件连接,图片在时钟信号下存储到FIFO缓存,STM32在FIFO读时序下,读出一帧图片。
图像采集系统的整体编程思想是:采用外部中断捕获的方法,捕获帧同步信号;在中断处理程序中,启动OV7670图像存储;当下一个帧同步信号到来,即关闭数据存储。采集系统的设计流程如图2所示。
2.2数字图像数据串口发送模块设计
在串口发送时,STM32对一个像素点提取R、G、B这3个颜色分量,再分别发送这3个分量到上位机。
图像采用高彩色的方式表示,即一帧图像中,每个色素用16位即两个字节表示。通常情况下,接收两种格式的位域,即555、565。采用红、绿、蓝的掩码表示红、绿、蓝3个分量在16位中所占的位置。在565的格式中,红、绿、蓝的掩码分别是0xF800、0x07E0、0x001F。R、G、B这3个分量的提取如下所示。
式中:C为像素值;R为红色分量;G为绿色分量;B为蓝色分量。
在编写串口发送程序的过程中,首先设置使能串口时钟、GPIO时钟、串口复位、GPIO端口模式;再初始化串口参数,包括波特率、数据格式、起始位、停止位、奇偶校验位、收发模式等。数据发送调用STM32库函数,函数如下:
Void USART_ SendData ( USART_ TypeDef*
USARTx , uint16_t Data);
通过该函数,向串口寄存器USART_DR写入一个数据。其中:USART_T ypeDef* USARTx表示串口名,uint16_t Data表示要发送的数据。
3上位机图像重现软件设计
上位机软件的主要作用是接收从下位机上传的图像数据并重现。图像重现的核心技术就是与STM32的串口通信技术和基于模板填充的图像重现技术。
串口通信目前实现的方法一般有3种。其一,是利用MSComm控件。MSComm控件能完成简单串口的设定,其方法简单、使用方便,但只能对应一个串口。当需要使用多线程技术时,利用MSComm控件很难实现。其次,是基于API的串口编程。其功能强大,可以编写高效、灵活的通信程序;但是其编程难度大,必须对API底层编程及多线程技术特别熟悉,且存在编写程序可移植性差的缺点,需要一定的开发周期。最后,是基于SerialPort类的多线程的串口编程。其编程方法简单,能够高效地实现多线程串口编程。SerialPort类提供了同步I/O和事件驱动的I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问。权衡利弊,本文采用基于SerialPort类的编程方法。
系统功能结构主要由串口初始化模块、串口数据接收模块、串口数据处理模块和图像重现模块等模块组成。程序设计的思想如图3所示。
串口初始化模块主要定义SerialPort类对象,设置通信端口号及波特率、数据位、停止位和校验位等。串口数据接收模块主要在串口监听线程中完成。当串口开启时,SerialPoIt类会建立ListenThread监听线程,监听线程用来等待注册的串口中断。当中断事件发生时,调用数据处理事件(DataReceived事件),直到串口关闭而退出线程,否则继续进入循环等待。由于每次接收到的串口缓存数据长度不一致,但又要对所有接收到的数据进行处理,防止丢包,所以先将接收的字符存人数据缓冲区。串口数据处理模块将图像中每个像素点的R、G、B这3个分量存储在数组中。
本文采用ArrayList数组缓存数据。ArrayList数组能够动态地添加和删除元素,可以根据需要自动扩充容量。图像重现模块将串口接收的数据显示成图像,在串口接收完成时,ArrayList数组中存储有一帧图像中每个像素点的R、G、B这3个分量数据。但是要将接收的数据以图片的形式显示,就要对数据进行编码。由于图像的编码技术比较复杂,本文采用图像填充技术,主要是读取一幅320 x 240的BMP图片,然后根据串口接收的数据对图像进行填充修改,再现轴承图片。
4实验及分析
以STM32拍摄的轴承图像为例,在本例中设置串口波特率为38 400 B/s。打开串口,显示串口上传的R、G、B三色分量,当数据传输结束,显示所拍摄的轴承样本图像。
实验结果表明,系统采集的轴承图像数据准确,系统重现图像与实际图像吻合,拍摄的图像分辨率能够满足后续的图像处理要求,且该系统设计价格低廉,有比较好的实用性和市场竞争力。数据交互模块的读写接口,读写存储区域的数据。读写接口不仅提供了根据设备点的关键字和类型读写数据存储单位的接口,还提供了按地址方式读写数据、整体读写数据等接口。
数据交互模块在与外部的轨道交通综合监控系统进行数据交互时,模拟各类通信从站设备,接收轨道交通综合监控系统的命令包后,回送数据包,完成读写操作。
这样,两者通过对数据交互模块中数据存储区数据的读写,有效地实现了数据交互。
(5)退出程序。
在培训结束之后,轨道综合监控系统和仿真模拟器要释放数据交互模块资源,并销毁申请的共享内存。当判定共享内存完全销毁时,就可以执行退出程序,完成此次的培训任务。
3结束语
随着轨道交通的快速发展及专业人才的大量需求,开发仿真培训系统成为迅速培养人才的一条有效途径。目前,市场上轨道交通综合监控系统种类较多,解决其与仿真培训系统间交互接口的问题非常重要。本文设计的数据交换模块具有很好的实用性和扩展性,有效地实现了两者之间的数据交互。
上一篇:基于SDN的跨数据中心承载技术
下一篇:返回列表