俞 強(qiáng),劉卿卿,2,董 龍
(1.南京信息工程大學(xué) 信息與控制學(xué)院,江蘇 南京 210044;2. 南京信息工程大學(xué) 大氣環(huán)境與裝備技術(shù)協(xié)同創(chuàng)新中心,江蘇 南京210044;3. 南京信息工程大學(xué) 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,江蘇 南京 210044)
基于ARM和MATLAB GUI的太陽(yáng)圖像數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)*
俞 強(qiáng)1,劉卿卿1,2,董 龍3
(1.南京信息工程大學(xué) 信息與控制學(xué)院,江蘇 南京 210044;2. 南京信息工程大學(xué) 大氣環(huán)境與裝備技術(shù)協(xié)同創(chuàng)新中心,江蘇 南京210044;3. 南京信息工程大學(xué) 數(shù)學(xué)與統(tǒng)計(jì)學(xué)院,江蘇 南京 210044)
對(duì)太陽(yáng)圖像數(shù)據(jù)進(jìn)行同步采集與分析,可以為輻射測(cè)量以及各種需要進(jìn)行復(fù)雜圖像算法處理的嵌入式系統(tǒng)提供重要參考。設(shè)計(jì)了一種能夠?qū)μ?yáng)圖像進(jìn)行同步數(shù)據(jù)采集的系統(tǒng),該系統(tǒng)主要包括圖像傳感器模塊、數(shù)據(jù)傳輸與存儲(chǔ)模塊、上位機(jī)軟件設(shè)計(jì)等。利用傳感器實(shí)現(xiàn)了對(duì)太陽(yáng)圖像的采集,通過(guò)ARM串口控制數(shù)據(jù)的讀寫(xiě),并利用MATLAB設(shè)計(jì)了上位機(jī)軟件,完成了對(duì)采集數(shù)據(jù)的計(jì)算與管理。
ARM;太陽(yáng)圖像;數(shù)據(jù)采集;MATLAB
太陽(yáng)輻射是自然界中各物理過(guò)程的重要能量來(lái)源,也是地球表面與大氣交換熱量的一種形式,可以作為反映氣候變化的重要信號(hào)。而太陽(yáng)跟蹤裝置是散射輻射測(cè)量中的一個(gè)基本部件,其精確度直接影響散射輻射測(cè)量的精度與準(zhǔn)確性。
光電式太陽(yáng)跟蹤方法因其結(jié)構(gòu)簡(jiǎn)單,易于實(shí)現(xiàn),同時(shí)具有較高的跟蹤精度而被廣泛地應(yīng)用于太陽(yáng)輻射測(cè)量以及太陽(yáng)能應(yīng)用等領(lǐng)域。但傳統(tǒng)的光電式跟蹤方法雖然瞬時(shí)跟蹤精度較高,但多數(shù)采用直接基于嵌入式平臺(tái)的跟蹤方法[1-3],受限于單片機(jī)等主控芯片的計(jì)算速度與開(kāi)發(fā)難度,往往不能實(shí)時(shí)精確地定位太陽(yáng)質(zhì)心,易出現(xiàn)累積誤差,影響太陽(yáng)跟蹤的穩(wěn)定性與連續(xù)性。因此,本文提出一種基于ARM和MATLAB GUI的太陽(yáng)圖像數(shù)據(jù)采集系統(tǒng),以基于ARM Cortex M3的STM32F103為硬件核心,利用CMOS傳感器對(duì)太陽(yáng)圖像數(shù)據(jù)進(jìn)行采集,并且提供可視化的上位機(jī)操作界面,對(duì)采集到的數(shù)據(jù)進(jìn)行存儲(chǔ)、分析、計(jì)算。本系統(tǒng)不僅可以對(duì)太陽(yáng)圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)采集和顯示,而且便于擴(kuò)展和后續(xù)對(duì)太陽(yáng)質(zhì)心圖像提取算法的研究,為進(jìn)一步消除太陽(yáng)跟蹤系統(tǒng)累積誤差以及準(zhǔn)確測(cè)定太陽(yáng)輻射提供基礎(chǔ)。同時(shí),該系統(tǒng)可以為其他需要實(shí)現(xiàn)較復(fù)雜圖像處理的嵌入式系統(tǒng)提供有利的技術(shù)參考。
圖像數(shù)據(jù)采集系統(tǒng)總體結(jié)構(gòu)如圖1所示。系統(tǒng)由兩部分組成:一部分是通過(guò)PC與STM32串口實(shí)現(xiàn)圖像數(shù)據(jù)的實(shí)時(shí)通信,另一部分是利用MATLAB GUI完成圖像存儲(chǔ)及圖像處理[4]。
系統(tǒng)下位機(jī)負(fù)責(zé)圖像數(shù)據(jù)的采集,并通過(guò)串行接口實(shí)時(shí)地將圖像數(shù)據(jù)傳送回上位機(jī)準(zhǔn)備進(jìn)行下一步處理。其中,圖像傳感器選用OV7725,以實(shí)現(xiàn)圖像的采集與存儲(chǔ)等功能。攝像頭模塊外接FIFO芯片,存儲(chǔ)采集的圖像,并在控制信號(hào)到來(lái)時(shí),由STM32讀取FIFO中存儲(chǔ)的圖像數(shù)據(jù)。STM32通過(guò)CP2102電平轉(zhuǎn)換芯片與PC的USB接口相連,利用芯片將TTL電平與RS232電平轉(zhuǎn)換,完成數(shù)據(jù)傳輸功能。
圖1 系統(tǒng)總體結(jié)構(gòu)
圖2 攝像頭接口電路
系統(tǒng)的上位機(jī)部分負(fù)責(zé)圖像數(shù)據(jù)的存儲(chǔ)與處理。通過(guò)調(diào)用MATLAB設(shè)備控制箱中的serial類(lèi),完成對(duì)串口的設(shè)置,接著根據(jù)自定義的傳輸協(xié)議在攝像頭與PC串口之間進(jìn)行實(shí)時(shí)通信。上位機(jī)的串口參數(shù)、圖像像素等設(shè)置均可通過(guò)采集系統(tǒng)的GUI界面,根據(jù)下位機(jī)配置進(jìn)行修改。對(duì)返回的圖像數(shù)據(jù),可利用MATLAB的圖像處理工具箱與直接面向矩陣操作的編程特點(diǎn),方便地進(jìn)行分析與處理,獲取所需信息。
2.1 攝像頭接口電路
鑒于CMOS傳感器兼容CMOS技術(shù),內(nèi)部集成了A/D轉(zhuǎn)換等芯片,簡(jiǎn)化了外圍模塊的設(shè)計(jì),提高了采集的抗噪聲能力,故本系統(tǒng)采用美國(guó)Omni Vision公司的CMOS數(shù)字圖像傳感器OV7725。其接口電路原理圖如圖2所示。OV7725是一個(gè)能夠提供單片VGA攝像頭和影像處理器的所有功能的圖像傳感器,實(shí)際有效像素為640×480,支持整幀輸出、子采樣、取窗口等模式,支持8/10位圖像分辨率,支持包括RAW RGB、RGB(RGB 4:2:2、RGB565/555/444)以及YCbCr(4:2:2)等多種數(shù)據(jù)格式。其體積小,工作電壓低,可以對(duì)圖像進(jìn)行伽馬曲線(xiàn)、白平衡、飽和度、色度等處理。
在OV7725后端搭載了FIFO來(lái)降低對(duì)單片機(jī)的性能依賴(lài)(當(dāng)前模塊對(duì)處理器的硬件要求僅僅為一個(gè)中斷,幾個(gè)GPIO管腳即可),節(jié)省片內(nèi)資源,方便后續(xù)對(duì)于單片機(jī)功能的擴(kuò)展。WEN與HREF作為與非門(mén)的輸入端,而與非門(mén)的輸出端口連接到FIFO的WE端口。當(dāng)WEN管腳和HREF管腳都為高電平時(shí),F(xiàn)IFO的WE端口的電平值才為低電平。因此,如果允許圖像數(shù)據(jù)傳入FIFO時(shí),可以把WEN拉高,當(dāng)攝像頭的HREF為低電平時(shí),WE的電平值為高電平,因此,即使PCLK仍在運(yùn)轉(zhuǎn),也不會(huì)傳送數(shù)據(jù)進(jìn)入FIFO,從而防止采集到無(wú)效數(shù)據(jù)[5]。
2.2 串行接口電路
接口電路采用CP2102芯片設(shè)計(jì)而成。CP2102集成度高,內(nèi)置USB2.0全速功能控制器、USB收發(fā)器、晶體振蕩器、EEPROM及異步串行數(shù)據(jù)總線(xiàn)(UART)。與其他電平轉(zhuǎn)接電路的工作原理類(lèi)似,CP2102通過(guò)驅(qū)動(dòng)程序?qū)C的USB口虛擬成COM口以達(dá)到擴(kuò)展的目的。電路原理如圖3所示。
圖3 串行接口電路
3.1 STM32數(shù)據(jù)傳輸流程
將攝像頭的場(chǎng)中斷信號(hào)送入單片機(jī),當(dāng)單片機(jī)捕捉到場(chǎng)中斷信號(hào)時(shí),拉高WEN管腳電平,之后整幅圖像的數(shù)據(jù)就會(huì)存入FIFO。當(dāng)單片機(jī)再次捕捉到場(chǎng)中斷時(shí),表明一幅圖像已經(jīng)送入FIFO,此時(shí)關(guān)閉場(chǎng)中斷,拉低WEN電平,防止攝像頭數(shù)據(jù)再次寫(xiě)入FIFO。當(dāng)上位機(jī)發(fā)送握手信號(hào)之后,開(kāi)始讀取FIFO數(shù)據(jù)到內(nèi)存緩沖區(qū),根據(jù)采集到的圖像做應(yīng)用處理,并通過(guò)串口發(fā)送至上位機(jī),發(fā)送完成后,再次開(kāi)啟場(chǎng)中斷,當(dāng)再次捕捉到場(chǎng)中斷時(shí),再次拉高WEN管腳電平,繼續(xù)讓攝像頭數(shù)據(jù)存入FIFO,完成后單片機(jī)等待上位機(jī)握手信號(hào),如此循環(huán)。
3.2 串行通信實(shí)現(xiàn)
MATLAB軟件的設(shè)備控制箱(Instrument Control Toolbox,ICT)提供了對(duì)RS232串口通信的正式支持。首先調(diào)用設(shè)備控制工具箱中的serial類(lèi)函數(shù),創(chuàng)建用戶(hù)自定義的串口設(shè)備對(duì)象。再通過(guò)自定義的文件句柄,以文件操作的方式,達(dá)到對(duì)PC串行口讀寫(xiě)操作的目的。
在進(jìn)行通信之前,需對(duì)控制器進(jìn)行配置,包括設(shè)置通信模式(全雙工、半雙工等)和串行口的通信參數(shù)(波特率、數(shù)據(jù)位、停止位等),使通信設(shè)備擁有相同的通信模式和串行通信參數(shù)。從通信的建立到結(jié)束通信主要包括如下5個(gè)基本步驟[6]:
(1)為應(yīng)用程序創(chuàng)建串口對(duì)象。
(2)連接打開(kāi)串口。
(3)設(shè)置或者修改串口通信參數(shù)。在能夠有效地進(jìn)行串口通信前,必須設(shè)置正確的串口通信參數(shù)。
(4)從串口讀寫(xiě)數(shù)據(jù)。在前面三個(gè)步驟正常完成后,既可以從串口讀數(shù)據(jù)也可以向串口寫(xiě)數(shù)據(jù),也就是接受或者發(fā)送數(shù)據(jù)。實(shí)現(xiàn)讀串口功能的函數(shù)有多個(gè),根據(jù)到達(dá)串口數(shù)據(jù)的類(lèi)型選擇合適的讀函數(shù)。
(5)關(guān)閉串口以及釋放串口對(duì)象在工作空間中占用的存儲(chǔ)空間。
基本步驟中參數(shù)的設(shè)置需要在回調(diào)函數(shù)中提前初始化,對(duì)于不同的STM32程序,需要找到回調(diào)函數(shù)相應(yīng)位置進(jìn)行修改,較為不便,本文中通過(guò)對(duì)用戶(hù)的選擇值進(jìn)行讀取,從而初始化串口參數(shù),同時(shí)添加了中斷函數(shù)以及數(shù)據(jù)轉(zhuǎn)換函數(shù)。數(shù)據(jù)傳輸流程如圖4所示。
圖4 數(shù)據(jù)傳輸流程
首先對(duì)用戶(hù)設(shè)置的參數(shù)進(jìn)行讀取,設(shè)置并初始化串口,接著打開(kāi)串口,發(fā)送握手信號(hào)0xff。當(dāng)單片機(jī)接收到相應(yīng)的握手信號(hào)后,開(kāi)始圖像傳輸。當(dāng)MATLAB接收到終止符 ‘ ’ 時(shí),表明已成功接收一幀圖像,從而觸發(fā)中斷。由于MATLAB接收到的數(shù)據(jù)是ASCII碼字符形式,所以需要將從緩沖區(qū)讀取到的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換:根據(jù)用戶(hù)設(shè)定的像素?cái)?shù)M×N,將數(shù)據(jù)轉(zhuǎn)換成M×N的整形圖像矩陣。最后以JPEG圖像格式存儲(chǔ)于工作區(qū)空間中。具體代碼如下:
a_temp = [0,0,0,0,0];
%定義一個(gè)像素值臨時(shí)存儲(chǔ)矩陣
b_count_flag = 1;
c_count_flag = 0;
data = zeros(M,N);
%定義圖像存儲(chǔ)矩陣,M,N為像素?cái)?shù)
n = s.BytesAvailable;
%讀取緩存區(qū)中當(dāng)前圖像大小
%讀取圖像
for a = 1:n
if out(a) ~= 13
%判斷是否是一幀圖像終止符
if out(a) ~= 10
%判斷是否是單個(gè)像素終止符
a_temp(b_count_flag) = int16(out(a) - 48);
b_count_flag = b_count_flag + 1;
end
if out(a) == 10
c_count_flag = c_count_flag + 1;
b_count_flag = b_count_flag - 1;
i = b_count_flag;
while b_count_flag~=0
data(c_count_flag) = a_temp(b_count_flag) * (10^(i - b_count_flag)) + data(c_count_flag);
b_count_flag = b_count_flag - 1;
end
b_count_flag = 1;
end
end
end
%將rgb565格式轉(zhuǎn)化成適合計(jì)算機(jī)處理的形式
imgR = uint8((255/31)*bitshift(bitand(data,63488),-11));
imgG = uint8((255/63)*bitshift(bitand(data,2016),-5));
imgB = uint8((255/31)*bitand(data,31));
imgRGB = cat(3,imgR,imgG,imgB);
%存儲(chǔ)當(dāng)前幀
3.3 GUI界面布局
利用MATLAB GUIDE開(kāi)發(fā)工具,添加完成必要的控制框,包括靜態(tài)文本框、彈出式菜單、可編輯文本框、按鈕、坐標(biāo)軸。
完成后的界面如圖5所示。界面設(shè)計(jì)了一般串行通信參數(shù)設(shè)置按鈕,可對(duì)波特率、數(shù)據(jù)位、停止位等數(shù)值進(jìn)行設(shè)置,這里根據(jù)STM32程序中的對(duì)應(yīng)設(shè)置,選擇相應(yīng)的參數(shù)。Pixel為像素?cái)?shù)的大小,由圖像傳感器寄存器中的相應(yīng)設(shè)置來(lái)選擇接收像素?cái)?shù)。方形靜態(tài)文本框顯示當(dāng)前執(zhí)行狀態(tài)。坐標(biāo)軸(axes1)顯示當(dāng)前接收到的圖像。右邊打開(kāi)串口(open serial)完成串口參數(shù)的讀取設(shè)置,并發(fā)送握手信號(hào)。發(fā)送控制信號(hào)(send control signal)通過(guò)串口發(fā)送控制信號(hào)給伺服電機(jī),完成精確的太陽(yáng)定位跟蹤。關(guān)閉(close)按鈕釋放串口對(duì)象在MATLAB工作區(qū)中占用的存儲(chǔ)空間,并退出應(yīng)用。
圖5 界面布局圖
設(shè)置波特率為115 200,數(shù)據(jù)位8 bit,停止位1 bit,無(wú)奇偶校驗(yàn)位,像素?cái)?shù)為240×240。圖片以45 s為周期進(jìn)行刷新,滿(mǎn)足預(yù)期。太陽(yáng)圖像顯示結(jié)果如圖6所示。
針對(duì)目前太陽(yáng)輻射測(cè)量中的跟蹤系統(tǒng)累積誤差較大、速度較慢等問(wèn)題,提出了一種基于MATLAB與ARM的太
圖6 太陽(yáng)圖像提取結(jié)果
陽(yáng)圖像采集系統(tǒng)。該系統(tǒng)可以直觀(guān)、快速地顯示當(dāng)前系統(tǒng)的運(yùn)行狀態(tài)與太陽(yáng)的實(shí)時(shí)變化,使控制過(guò)程可視化。同時(shí),上位機(jī)采用MATLAB編程實(shí)現(xiàn),可以利用軟件本身的圖像處理方法與工具箱,為下一步太陽(yáng)質(zhì)心提取算法的開(kāi)發(fā)提供良好的平臺(tái),可大大節(jié)省開(kāi)發(fā)時(shí)間。GUI程序發(fā)布后,移植方便,無(wú)需安裝MATLAB軟件,可在任意一臺(tái)PC上以靜態(tài)或動(dòng)態(tài)的圖像處理結(jié)果,驅(qū)動(dòng)電機(jī)等執(zhí)行器,實(shí)現(xiàn)高精度的太陽(yáng)跟蹤自動(dòng)控制。
[1] 陳麗娟, 周鑫. 基于ARM嵌入式圖像處理平臺(tái)的太陽(yáng)跟蹤系統(tǒng)[J]. 現(xiàn)代電子技術(shù), 2012, 35(4): 71-74.
[2] 劉麗微. 基于視覺(jué)的太陽(yáng)光線(xiàn)自動(dòng)跟蹤裝置[D]. 沈陽(yáng):沈陽(yáng)工業(yè)大學(xué), 2008.
[3] 任松林. 主動(dòng)式太陽(yáng)跟蹤及驅(qū)動(dòng)系統(tǒng)研究與設(shè)計(jì)[D]. 重慶:重慶大學(xué), 2008.
[4] 薛飛, 楊友良, 孟凡偉, 等. 基于Matlab GUI串口通信的實(shí)時(shí)溫度監(jiān)控系統(tǒng)設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用, 2014, 34(1): 292-296.
[5] 劉火良,楊森. STM32庫(kù)開(kāi)發(fā)實(shí)戰(zhàn)指南[M]. 北京:機(jī)械工業(yè)出版社,2013.
[6] 王戰(zhàn)軍, 沈明. 基于MATLAB GUI的串口通信編程實(shí)現(xiàn)[J]. 現(xiàn)代電子技術(shù), 2010, 39(9): 38-40.
Design of sun image data acquisition system based on ARM and MATLAB GUI
Yu Qiang1, Liu Qingqing1,2, Dong Long3
(1. Department of Information & Control, Nanjing University of Information Science & Technology, Nanjing 210044, China; 2. Collaborative Innovation Center on Atmospheric Environment and Equipment Technology, Nanjing University of Information Science & Technology, Nanjing 210044, China; 3. Department of Mathematics and Statistics, Nanjing University of Information Science & Technology, Nanjing 210044, China)
The synchronous data acquisition and analysis of sun image can provide an important reference for radiation measurement and various embedded systems which some complicate algorithms are needed. An analytic system which can acquire the data of sun image was designed. It included image sensor module, data transmission and storage module and software in PC. Sun image was acquired via senor. The reading and writing of data were controlled through ARM. The software in PC based on MATLAB was designed to calculate and manage the acquired data.
ARM; sun image; data acquisition; MATLAB
江蘇省自然科學(xué)基金(BK20130989);江蘇省高等學(xué)校大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計(jì)劃項(xiàng)目(201510300004)
TP391
A
10.19358/j.issn.1674- 7720.2017.03.021
俞強(qiáng),劉卿卿,董龍.基于ARM和MATLAB GUI的太陽(yáng)圖像數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].微型機(jī)與應(yīng)用,2017,36(3):71-74.
2016-09-03)
俞強(qiáng)(1995-),男,本科生,主要研究方向:嵌入式系統(tǒng),圖像信號(hào)處理。
劉卿卿(1983-),女,博士,講師,主要研究方向:光學(xué)儀器及光電檢測(cè)等。