基于STM32的轴承图像采集与重现系统设计
0引言
轴承是机械设计中重要的基础件之一,轴承质量的好坏关系到机械运行的质量和效率,因此机械制造业对轴承质量提出了较高的要求。而人工检测轴承的效率比较低,利用先进的检测技术检测轴承已经成为一种必然趋势。其中,较为常见的方法就是利用机器视觉技术。
图像采集在机器视觉处理中起着基础性的作用,传统的图像采集系统一般由CCD摄像机、图像采集卡及匹配的采集软件组成。使用图像采集卡采集图像具有实时性高的优点,但是其价格较高、操作复杂,且上位机须配备有PIC接口[1]。此外,传统的图像采集系统经常会因为驱动的问题出现死机现象,严重影响了图像的后续处理。为了解决这一系列问题,本文提出了基于串行通信的图像采集方案。
串行通信具有硬件电路接口简单、串口编程简单等特点,使用串口通信减少了开发周期,降低了开发成本,且能满足各项性能要求。本文以COMS摄像头为例,以STM32为核心处理器,读取COMS摄像头FIFO缓存数据,通过串口传输实现图像的采集与重现。该系统克服了使用采集卡过程的弊端,开发周期短、成本低,性价比高,为灵活使用COMS摄像头采集图像进行图像处理的研究奠定了基础。
1图像采集硬件系统设计
本文设计了基于COMS摄像头的图像采集与传输平台。该平台的系统硬件框图如图1所示。
图1 系统硬件总体框图
OV7670的像素时钟最高可达24 MHz,由于STM32最高只有72 MHz,采用直接抓取的方式非常困难,且占用CPU,而OV7670的像素时钟最高可达24 MHz,所以本课题采用的是OV7670摄像头模块,该模块中带有缓存图像功能。单片机STM32的主要任务是实现图像的采集与传送。STM32通过串口与上位机连接,在上位机上,本文采用C#语言编写图像数据处理及显示程序。
1.2硬件选择
(1)摄像头。
目前主流摄像头主要分两类,一类是CCD摄像头,其具有光学灵敏度高、噪声低、像素高等优点;但是其价格昂贵,且需要配合图像采集卡才能使用。在满足采集要求的情况下,本课题采取另一类摄像头,即CMOS摄像头,其具有体积小、工作电压低、灵敏度高[2]等优点,且大幅降低了设计成本。综上所述,本课题决定选择OmniVision公司开发的30万像素的OV7670CMOS彩色图像传感器芯片。
(2)控制器。
STM32是ST公司开发的高性能、低成本、低功耗的芯片,它相当于一个小型的PC机,其优势主要体现在控制方面[3]。综合考虑系统的实时性要求及设计成本,本系统采用高性价比的STM32FI03ZET6芯片。
专题教学可以是同一作者相似作品连类而成的学习,比如,学习苏轼的《前赤壁赋》时,和《后赤壁赋》进行比较阅读;学习莫泊桑的《项链》时,和其《珠宝》进行比较阅读。相对于《前赤壁赋》和《项链》的单篇学习,这样的比较阅读会让学生更好地把握单篇的特点,丰富对作者及作品的认识。
(3)图像采集系统。
图像采集系统主要由支架、摄像头、轴承、背光源4个部分组成。支架采用可移动支架来固定摄像头的位置,使其镜头朝下,对准轴承的位置。要判断轴承是否存在缺珠、涂油等缺陷,在采集图像时必须采集到轴承的孔洞信息。为了使摄像头采集到高质量的图片以便于后续的处理,本课题采用背光源来采集图像。但是由于轴承孔洞比较小,给采集带来了很大的挑战。为了能够采集到清晰的孔洞信息,对光源提出了比较严格的要求,光照要求柔和、均匀,否则采集到的图像轮廓不清,不便于后续处理。
2图像采集软件设计
2.1OV7670图像采集模块设计
OmniVision公司的OV7670是数字图像传感器,它具有体积小、工作电压低等优点,其视频图形阵列(video graphics array,VGA)图像刷新最高速率为30帧/s[4]。OV7670的所有图像处理功能都可以通过SCCB接口编程,支持多种图像输出格式,广泛应用于嵌入式系统中。
OV7670输出数据接口提供的主要控制信号如表1所示。
表1 OV7670接口信号
本文通过设定OV_PCLK、OV_VSYNC和OV_HREF/HSYNC等控制信号,实现对OV7670的输出控制。本文采用QVG时序输出,RGB565格式,行扫描输出,即分辨率为320×240的输出格式。当OV_HREF为高时,系统输出图像,每个OV_PCLK输出一个字节。在输出行时,每行共需要320×2个OV_PCLK周期,320×2个字节输出,其中每两个字节组成一个像素,先高字节后低字节。在帧输出时,240行组成一帧,帧同步信号控制图像输出。通过硬件连接,图片在时钟信号下存储到FIFO缓存,STM32在FIFO读时序下,读出一帧图片。
图像采集系统的整体编程思想是:采用外部中断捕获的方法,捕获帧同步信号;在中断处理程序中,启动OV7670图像存储;当下一个帧同步信号到来,即关闭数据存储。采集系统的设计流程如图2所示。
图2 图像采集系统流程图
2.2数字图像数据串口发送模块设计
在串口发送时,STM32对一个像素点提取R、G、B这3个颜色分量,再分别发送这3个分量到上位机。
图像采用高彩色的方式表示,即一帧图像中,每个色素用16位即两个字节表示。通常情况下,接收两种格式的位域,即555、565。采用红、绿、蓝的掩码表示红、绿、蓝3个分量在16位中所占的位置。在565的格式中,红、绿、蓝的掩码分别是0xF800、0x07E0、0x001F。R、G、B这3个分量的提取如下所示。
(1)
(2)
B=C×0x001F
(3)
式中:C为像素值;R为红色分量;G为绿色分量;B为蓝色分量。
在编写串口发送程序的过程中,首先设置使能串口时钟、GPIO时钟、串口复位、GPIO端口模式;再初始化串口参数,包括波特率、数据格式、起始位、停止位、奇偶校验位、收发模式等。数据发送调用STM32库函数,函数如下:
Void USART_SendData(USART_TypeDef*
USARTx ,uint16_t Data);
通过该函数,向串口寄存器USART_DR写入一个数据。其中:USART_TypeDef* USARTx 表示串口名,uint16_t Data表示要发送的数据。
3上位机图像重现软件设计
上位机软件的主要作用是接收从下位机上传的图像数据并重现。图像重现的核心技术就是与STM32的串口通信技术和基于模板填充的图像重现技术。
串口通信目前实现的方法一般有3种。其一,是利用MSComm控件。MSComm控件能完成简单串口的设定,其方法简单、使用方便,但只能对应一个串口。当需要使用多线程技术时,利用MSComm控件很难实现。其次,是基于API的串口编程。其功能强大,可以编写高效、灵活的通信程序;但是其编程难度大,必须对API底层编程及多线程技术特别熟悉,且存在编写程序可移植性差的缺点[5],需要一定的开发周期。最后,是基于SerialPort类的多线程的串口编程。其编程方法简单,能够高效地实现多线程串口编程。SerialPort 类提供了同步I/O和事件驱动的 I/O、对管脚和中断状态的访问以及对串行驱动程序属性的访问[6]。权衡利弊,本文采用基于SerialPort类的编程方法。
系统功能结构主要由串口初始化模块、串口数据接收模块、串口数据处理模块和图像重现模块等模块组成。程序设计的思想如图3所示。
图3 串口通信程序框图
串口初始化模块主要定义SerialPort类对象,设置通信端口号及波特率、数据位、停止位和校验位等。串口数据接收模块主要在串口监听线程中完成。当串口开启时,SerialPort类会建立ListenThread监听线程,监听线程用来等待注册的串口中断。当中断事件发生时,调用数据处理事件(DataReceived事件),直到串口关闭而退出线程,否则继续进入循环等待。由于每次接收到的串口缓存数据长度不一致,但又要对所有接收到的数据进行处理,防止丢包,所以先将接收的字符存入数据缓冲区。串口数据处理模块将图像中每个像素点的R、G、B这3个分量存储在数组中。
本文采用ArrayList数组缓存数据。ArrayList数组能够动态地添加和删除元素,可以根据需要自动扩充容量。 图像重现模块将串口接收的数据显示成图像,在串口接收完成时,ArrayList数组中存储有一帧图像中每个像素点的R、G、B这3个分量数据。但是要将接收的数据以图片的形式显示,就要对数据进行编码。由于图像的编码技术比较复杂,本文采用图像填充技术,主要是读取一幅320×240的BMP图片,然后根据串口接收的数据对图像进行填充修改,再现轴承图片。
4实验及分析
以STM32拍摄的轴承图像为例,在本例中设置串口波特率为38 400 B/s。打开串口,显示串口上传的R、G、B三色分量,当数据传输结束,显示所拍摄的轴承样本图像。
实验结果表明,系统采集的轴承图像数据准确,系统重现图像与实际图像吻合,拍摄的图像分辨率能够满足后续的图像处理要求,且该系统设计价格低廉,有比较好的实用性和市场竞争力。
5结束语
本文介绍了基于STM32的低成本COMS图像采集系统的硬件和软件组成。与传统的图像采集系统相比,基于STM32的图像采集系统优势比较明显:第一,成本低,市场厂竞争力强[7];第二,结构简单,小巧方便;第三,提出了以图像填充更新图像的方式,实时性好;第四,应用到轴承检测行业,使得轴承检测系统具有图像采集和传输功能,方便用户调试、观测轴承。
参考文献
[1] 张冬阳,薄振桐.基于FPGA与USB 2.0接口的红外图像采集系
统设计[J].电子科技,2014,27(11):48-51.
[2] 李德明,韩剑,姜国强.基于OV7670的图像采集与显示系统设计[J].仪器仪表学报,2010,31(8):30-33.
[3] 郑凌.基于图像的轴承套加工缺陷检测研究[D].杭州:浙江大学,2012.
[4] 王晗,李翔,李忠敏,等.基于OV7670的图像采集与显示设计[J].信息科技,2013(11):90-91.
[5] 陈超,李灿平,韩立昌.SerialPort类在雷达串口通信中的应用[J].电脑知识与技术,2011(7):5921-5922,5927.
[6] 邬蓉蓉,滕召胜,谭旗,等.基于 C # .NET的智能化汽车衡称重管理系统[J].仪表技术与传感器,2010(7):48-50.
[7] 董大波,王湘云,赵柏秦,等.基于单片机的低成本CMOS图像采集系统[J].仪表技术与传感器,2014(2):45-49.
Design of the Bearing Image Acquisition and Reproduction System Based on STM32
顾静静姜平
(南通大学电气工程学院,江苏 南通226019)
摘要:针对传统的图像采集面临的主要问题,提出了基于STM32的高性价比的图像采集与重现方案。重点介绍了该方案的硬件组成和软件设计,主要设计思想是用STM32读取COMS摄像头OV7670缓存数据,通过串口传送到上位机;在VS2010编译环境下,利用微软SerialPort类实现STM32与上位机的串口通信,以模板填充的方式重现图片。实验结果表明,该系统可以实现轴承图像的采集与重现功能,且重现图像与实际图像吻合,清晰度高,稳定性好,能够满足后续轴承图像处理的要求。
关键词:图像采集STM32COMS摄像头轴承传感器串行通信软件设计数据处理
Abstract:Aiming at the main problems in the traditional image acquisition,the cost-effective image acquisition and reproduction system based on STM32 are proposed.The hardware composition and software design are introduced.STM32 is used to read OV7670 cache data of COMS camera,then the data are sent to host computer through serial port; the serial port communication between STM32 and host computer is implemented by adopting Microsoft SerialPort under VS2010 compiling environment to reproduce the images in the template filling mode.Experimental results show that the system can realize the functions of image acquisition and reproduction,and the reproduced images are clear,stable and consistent with the actual images.The system meets the requirements of subsequent bearing image processing.
Keywords:Image acquisitionSTM32COMS cameraBearingSensorSerial communicationSoftware designData processing
中图分类号:TP368+.2;TH86
文献标志码:A
DOI:10.16086/j.cnki.issn1000-0380.201604011
江苏省2014年度普通高校研究生科研创新计划基金资助项目(编号:KYLX_1306)。
修改稿收到日期:2015-08-30。
第一作者顾静静(1990-),女,现为南通大学控制科学与工程专业在读硕士研究生;主要从事智能检测与控制技术的研究。