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