相關(guān)鏈接: 中國(guó)安全網(wǎng) 中國(guó)質(zhì)量網(wǎng) 中國(guó)論文網(wǎng) 中國(guó)資訊網(wǎng)
顧靜靜 姜 平
(南通大學(xué)電氣工程學(xué)院,江蘇南通226019)
摘要:針對(duì)傳統(tǒng)的圖像采集面臨的主要問(wèn)題,提出了基于STM32的高性?xún)r(jià)比的圖像采集與重現(xiàn)方案。重點(diǎn)介紹了該方案的硬件組成和軟件設(shè)計(jì),主要設(shè)計(jì)思想是用STM32讀取COMS攝像頭OV7670緩存數(shù)據(jù),通過(guò)串口傳送到上位機(jī);在VS2010編譯環(huán)境下,利用微軟serialPort類(lèi)實(shí)現(xiàn)STM32與上位機(jī)的串口通信,以模板填充的方式重現(xiàn)圖片。實(shí)驗(yàn)結(jié)果表明,該系統(tǒng)可以實(shí)現(xiàn)軸承圖像的采集與重現(xiàn)功能,且重現(xiàn)圖像與實(shí)際圖像吻合,清晰度高,穩(wěn)定性好,能夠滿(mǎn)足后續(xù)軸承圖像處理的要求。
關(guān)鍵詞:圖像采集STM32 COMS攝像頭軸承傳感器串行通信軟件設(shè)計(jì)數(shù)據(jù)處理
中圖分類(lèi)號(hào):TP368+.2;TH86 DOI:10.16086/j.cnki. issnl000 - 0380. 201604011
0引言
軸承是機(jī)械設(shè)計(jì)中重要的基礎(chǔ)件之一,軸承質(zhì)量的好壞關(guān)系到機(jī)械運(yùn)行的質(zhì)量和效率,因此機(jī)械制造業(yè)對(duì)軸承質(zhì)量提出了較高的要求。而人工檢測(cè)軸承的效率比較低,利用先進(jìn)的檢測(cè)技術(shù)檢測(cè)軸承已經(jīng)成為一種必然趨勢(shì)。其中,較為常見(jiàn)的方法就是利用機(jī)器視覺(jué)技術(shù)。
圖像采集在機(jī)器視覺(jué)處理中起著基礎(chǔ)性的作用,傳統(tǒng)的圖像采集系統(tǒng)一般由CCD攝像機(jī)、圖像采集卡及匹配的采集軟件組成。使用圖像采集卡采集圖像具有實(shí)時(shí)性高的優(yōu)點(diǎn),但是其價(jià)格較高、操作復(fù)雜,且上位機(jī)須配備有PIC接口。此外,傳統(tǒng)的圖像采集系統(tǒng)經(jīng)常會(huì)因?yàn)轵?qū)動(dòng)的問(wèn)題出現(xiàn)死機(jī)現(xiàn)象,嚴(yán)重影響了圖像的后續(xù)處理。為了解決這一系列問(wèn)題,本文提出了基于串行通信的圖像采集方案。
串行通信具有硬件電路接口簡(jiǎn)單、串口編程簡(jiǎn)單等特點(diǎn),使用串口通信減少了開(kāi)發(fā)周期,降低了開(kāi)發(fā)成本,且能滿(mǎn)足各項(xiàng)性能要求。本文以COMS攝像頭為例,以STM32為核心處理器,讀取COMS攝像頭FIFO緩存數(shù)據(jù),通過(guò)串口傳輸實(shí)現(xiàn)圖像的采集與重現(xiàn)。該系統(tǒng)克服了使用采集卡過(guò)程的弊端,開(kāi)發(fā)周期短、成本低,性?xún)r(jià)比高,為靈活使用COMS攝像頭采集圖像進(jìn)行圖像處理的研究奠定了基礎(chǔ)。
1 圖像采集硬件系統(tǒng)設(shè)計(jì)
1.1硬件設(shè)計(jì)
本文設(shè)計(jì)了基于COMS攝像頭的圖像采集與傳輸平臺(tái)。該平臺(tái)的系統(tǒng)硬件框圖如圖1所示。
STM32最高只有72 MHz,采用直接抓取的方式非常困難,且占用CPU,而OV7670的像素時(shí)鐘最高可達(dá)24 MHz,所以本課題采用的是OV7670攝像頭模塊,該模塊中帶有緩存圖像功能。單片機(jī)STM32的主要任務(wù)是實(shí)現(xiàn)圖像的采集與傳送。STM32通過(guò)串口與上位機(jī)連接,在上位機(jī)上,本文采用C#語(yǔ)言編寫(xiě)圖像數(shù)據(jù)處理及顯示程序。
1.2硬件選擇
(1)攝像頭。
目前主流攝像頭主要分兩類(lèi),一類(lèi)是CCD攝像頭,其具有光學(xué)靈敏度高、噪聲低、像素高等優(yōu)點(diǎn);但是其價(jià)格昂貴,且需要配合圖像采集卡才能使用。在滿(mǎn)足采集要求的情況下,本課題采取另一類(lèi)攝像頭,即CMOS攝像頭,其具有體積小、工作電壓低、靈敏度高等優(yōu)點(diǎn),且大幅降低了設(shè)計(jì)成本。綜上所述,本課題決定選擇OmniVision公司開(kāi)發(fā)的30萬(wàn)像素的
OV7670CMOS彩色圖像傳感器芯片。
(2)控制器。
STM32是ST公司開(kāi)發(fā)的高性能、低成本、低功耗的芯片,它相當(dāng)于一個(gè)小型的PC機(jī),其優(yōu)勢(shì)主要體現(xiàn)在控制方面。綜合考慮系統(tǒng)的實(shí)時(shí)性要求及設(shè)計(jì)成本,本系統(tǒng)采用高性?xún)r(jià)比的STM32FI03ZET6芯片。
(3)圖像采集系統(tǒng)。
圖像采集系統(tǒng)主要由支架、攝像頭、軸承、背光源4個(gè)部分組成。支架采用可移動(dòng)支架來(lái)固定攝像頭的位置,使其鏡頭朝下,對(duì)準(zhǔn)軸承的位置。要判斷軸承是否存在缺珠、涂油等缺陷,在采集圖像時(shí)必須采集到軸承的孔洞信息。為了使攝像頭采集到高質(zhì)量的圖片以便于后續(xù)的處理,本課題采用背光源來(lái)采集圖像。但是由于軸承孔洞比較小,給采集帶來(lái)了很大的挑戰(zhàn)。為了能夠采集到清晰的孔洞信息,對(duì)光源提出了比較嚴(yán)格的要求,光照要求柔和、均勻,否則采集到的圖像輪廓不清,不便于后續(xù)處理。
2 圖像采集軟件設(shè)計(jì)
2.1 0V7670圖像采集模塊設(shè)計(jì)
OmniVision公司的OV7670是數(shù)字圖像傳感器,它具有體積小、工作電壓低等優(yōu)點(diǎn),其視頻圖形陣列( video graphics array,VGA)圖像刷新最高速率為30幀/S。OV7670的所有圖像處理功能都可以通過(guò)SCCB接口編程,支持多種圖像輸出格式,廣泛應(yīng)用于嵌入式系統(tǒng)中。
OV7670輸出數(shù)據(jù)接口提供的主要控制信號(hào)如表1所示。
本文通過(guò)設(shè)定OV_PCLK、OV_VSYNC和OV_HREF/HSYNC等控制信號(hào),實(shí)現(xiàn)對(duì)OV7670的輸出控制。本文采用QVG時(shí)序輸出,RGB565格式,行掃描輸出,即分辨率為320×240的輸出格式。當(dāng)OV-HREF為高時(shí),系統(tǒng)輸出圖像,每個(gè)OV_PCLK輸出一個(gè)字節(jié)。在輸出行時(shí),每行共需要320 x2個(gè)OV_PCLK周期,320 x2個(gè)字節(jié)輸出,其中每?jī)蓚(gè)字節(jié)組成一個(gè)像素,先高字節(jié)后低字節(jié)。在幀輸出時(shí),240行組成一幀,幀同步信號(hào)控制圖像輸出。通過(guò)硬件連接,圖片在時(shí)鐘信號(hào)下存儲(chǔ)到FIFO緩存,STM32在FIFO讀時(shí)序下,讀出一幀圖片。
圖像采集系統(tǒng)的整體編程思想是:采用外部中斷捕獲的方法,捕獲幀同步信號(hào);在中斷處理程序中,啟動(dòng)OV7670圖像存儲(chǔ);當(dāng)下一個(gè)幀同步信號(hào)到來(lái),即關(guān)閉數(shù)據(jù)存儲(chǔ)。采集系統(tǒng)的設(shè)計(jì)流程如圖2所示。
2.2數(shù)字圖像數(shù)據(jù)串口發(fā)送模塊設(shè)計(jì)
在串口發(fā)送時(shí),STM32對(duì)一個(gè)像素點(diǎn)提取R、G、B這3個(gè)顏色分量,再分別發(fā)送這3個(gè)分量到上位機(jī)。
圖像采用高彩色的方式表示,即一幀圖像中,每個(gè)色素用16位即兩個(gè)字節(jié)表示。通常情況下,接收兩種格式的位域,即555、565。采用紅、綠、藍(lán)的掩碼表示紅、綠、藍(lán)3個(gè)分量在16位中所占的位置。在565的格式中,紅、綠、藍(lán)的掩碼分別是0xF800、0x07E0、0x001F。R、G、B這3個(gè)分量的提取如下所示。
式中:C為像素值;R為紅色分量;G為綠色分量;B為藍(lán)色分量。
在編寫(xiě)串口發(fā)送程序的過(guò)程中,首先設(shè)置使能串口時(shí)鐘、GPIO時(shí)鐘、串口復(fù)位、GPIO端口模式;再初始化串口參數(shù),包括波特率、數(shù)據(jù)格式、起始位、停止位、奇偶校驗(yàn)位、收發(fā)模式等。數(shù)據(jù)發(fā)送調(diào)用STM32庫(kù)函數(shù),函數(shù)如下:
Void USART_ SendData ( USART_ TypeDef*
USARTx , uint16_t Data);
通過(guò)該函數(shù),向串口寄存器USART_DR寫(xiě)入一個(gè)數(shù)據(jù)。其中:USART_T ypeDef* USARTx表示串口名,uint16_t Data表示要發(fā)送的數(shù)據(jù)。
3上位機(jī)圖像重現(xiàn)軟件設(shè)計(jì)
上位機(jī)軟件的主要作用是接收從下位機(jī)上傳的圖像數(shù)據(jù)并重現(xiàn)。圖像重現(xiàn)的核心技術(shù)就是與STM32的串口通信技術(shù)和基于模板填充的圖像重現(xiàn)技術(shù)。
串口通信目前實(shí)現(xiàn)的方法一般有3種。其一,是利用MSComm控件。MSComm控件能完成簡(jiǎn)單串口的設(shè)定,其方法簡(jiǎn)單、使用方便,但只能對(duì)應(yīng)一個(gè)串口。當(dāng)需要使用多線(xiàn)程技術(shù)時(shí),利用MSComm控件很難實(shí)現(xiàn)。其次,是基于A(yíng)PI的串口編程。其功能強(qiáng)大,可以編寫(xiě)高效、靈活的通信程序;但是其編程難度大,必須對(duì)API底層編程及多線(xiàn)程技術(shù)特別熟悉,且存在編寫(xiě)程序可移植性差的缺點(diǎn),需要一定的開(kāi)發(fā)周期。最后,是基于SerialPort類(lèi)的多線(xiàn)程的串口編程。其編程方法簡(jiǎn)單,能夠高效地實(shí)現(xiàn)多線(xiàn)程串口編程。SerialPort類(lèi)提供了同步I/O和事件驅(qū)動(dòng)的I/O、對(duì)管腳和中斷狀態(tài)的訪(fǎng)問(wèn)以及對(duì)串行驅(qū)動(dòng)程序?qū)傩缘脑L(fǎng)問(wèn)。權(quán)衡利弊,本文采用基于SerialPort類(lèi)的編程方法。
系統(tǒng)功能結(jié)構(gòu)主要由串口初始化模塊、串口數(shù)據(jù)接收模塊、串口數(shù)據(jù)處理模塊和圖像重現(xiàn)模塊等模塊組成。程序設(shè)計(jì)的思想如圖3所示。
串口初始化模塊主要定義SerialPort類(lèi)對(duì)象,設(shè)置通信端口號(hào)及波特率、數(shù)據(jù)位、停止位和校驗(yàn)位等。串口數(shù)據(jù)接收模塊主要在串口監(jiān)聽(tīng)線(xiàn)程中完成。當(dāng)串口開(kāi)啟時(shí),SerialPoIt類(lèi)會(huì)建立ListenThread監(jiān)聽(tīng)線(xiàn)程,監(jiān)聽(tīng)線(xiàn)程用來(lái)等待注冊(cè)的串口中斷。當(dāng)中斷事件發(fā)生時(shí),調(diào)用數(shù)據(jù)處理事件(DataReceived事件),直到串口關(guān)閉而退出線(xiàn)程,否則繼續(xù)進(jìn)入循環(huán)等待。由于每次接收到的串口緩存數(shù)據(jù)長(zhǎng)度不一致,但又要對(duì)所有接收到的數(shù)據(jù)進(jìn)行處理,防止丟包,所以先將接收的字符存人數(shù)據(jù)緩沖區(qū)。串口數(shù)據(jù)處理模塊將圖像中每個(gè)像素點(diǎn)的R、G、B這3個(gè)分量存儲(chǔ)在數(shù)組中。
本文采用ArrayList數(shù)組緩存數(shù)據(jù)。ArrayList數(shù)組能夠動(dòng)態(tài)地添加和刪除元素,可以根據(jù)需要自動(dòng)擴(kuò)充容量。圖像重現(xiàn)模塊將串口接收的數(shù)據(jù)顯示成圖像,在串口接收完成時(shí),ArrayList數(shù)組中存儲(chǔ)有一幀圖像中每個(gè)像素點(diǎn)的R、G、B這3個(gè)分量數(shù)據(jù)。但是要將接收的數(shù)據(jù)以圖片的形式顯示,就要對(duì)數(shù)據(jù)進(jìn)行編碼。由于圖像的編碼技術(shù)比較復(fù)雜,本文采用圖像填充技術(shù),主要是讀取一幅320 x 240的BMP圖片,然后根據(jù)串口接收的數(shù)據(jù)對(duì)圖像進(jìn)行填充修改,再現(xiàn)軸承圖片。
4實(shí)驗(yàn)及分析
以STM32拍攝的軸承圖像為例,在本例中設(shè)置串口波特率為38 400 B/s。打開(kāi)串口,顯示串口上傳的R、G、B三色分量,當(dāng)數(shù)據(jù)傳輸結(jié)束,顯示所拍攝的軸承樣本圖像。
實(shí)驗(yàn)結(jié)果表明,系統(tǒng)采集的軸承圖像數(shù)據(jù)準(zhǔn)確,系統(tǒng)重現(xiàn)圖像與實(shí)際圖像吻合,拍攝的圖像分辨率能夠滿(mǎn)足后續(xù)的圖像處理要求,且該系統(tǒng)設(shè)計(jì)價(jià)格低廉,有比較好的實(shí)用性和市場(chǎng)競(jìng)爭(zhēng)力。數(shù)據(jù)交互模塊的讀寫(xiě)接口,讀寫(xiě)存儲(chǔ)區(qū)域的數(shù)據(jù)。讀寫(xiě)接口不僅提供了根據(jù)設(shè)備點(diǎn)的關(guān)鍵字和類(lèi)型讀寫(xiě)數(shù)據(jù)存儲(chǔ)單位的接口,還提供了按地址方式讀寫(xiě)數(shù)據(jù)、整體讀寫(xiě)數(shù)據(jù)等接口。
數(shù)據(jù)交互模塊在與外部的軌道交通綜合監(jiān)控系統(tǒng)進(jìn)行數(shù)據(jù)交互時(shí),模擬各類(lèi)通信從站設(shè)備,接收軌道交通綜合監(jiān)控系統(tǒng)的命令包后,回送數(shù)據(jù)包,完成讀寫(xiě)操作。
這樣,兩者通過(guò)對(duì)數(shù)據(jù)交互模塊中數(shù)據(jù)存儲(chǔ)區(qū)數(shù)據(jù)的讀寫(xiě),有效地實(shí)現(xiàn)了數(shù)據(jù)交互。
(5)退出程序。
在培訓(xùn)結(jié)束之后,軌道綜合監(jiān)控系統(tǒng)和仿真模擬器要釋放數(shù)據(jù)交互模塊資源,并銷(xiāo)毀申請(qǐng)的共享內(nèi)存。當(dāng)判定共享內(nèi)存完全銷(xiāo)毀時(shí),就可以執(zhí)行退出程序,完成此次的培訓(xùn)任務(wù)。
3結(jié)束語(yǔ)
隨著軌道交通的快速發(fā)展及專(zhuān)業(yè)人才的大量需求,開(kāi)發(fā)仿真培訓(xùn)系統(tǒng)成為迅速培養(yǎng)人才的一條有效途徑。目前,市場(chǎng)上軌道交通綜合監(jiān)控系統(tǒng)種類(lèi)較多,解決其與仿真培訓(xùn)系統(tǒng)間交互接口的問(wèn)題非常重要。本文設(shè)計(jì)的數(shù)據(jù)交換模塊具有很好的實(shí)用性和擴(kuò)展性,有效地實(shí)現(xiàn)了兩者之間的數(shù)據(jù)交互。