俞 強,劉卿卿,2,董 龍
(1.南京信息工程大學 信息與控制學院,江蘇 南京 210044;2. 南京信息工程大學 大氣環境與裝備技術協同創新中心,江蘇 南京210044;3. 南京信息工程大學 數學與統計學院,江蘇 南京 210044)
基于ARM和MATLAB GUI的太陽圖像數據采集系統設計*
俞 強1,劉卿卿1,2,董 龍3
(1.南京信息工程大學 信息與控制學院,江蘇 南京 210044;2. 南京信息工程大學 大氣環境與裝備技術協同創新中心,江蘇 南京210044;3. 南京信息工程大學 數學與統計學院,江蘇 南京 210044)
對太陽圖像數據進行同步采集與分析,可以為輻射測量以及各種需要進行復雜圖像算法處理的嵌入式系統提供重要參考。設計了一種能夠對太陽圖像進行同步數據采集的系統,該系統主要包括圖像傳感器模塊、數據傳輸與存儲模塊、上位機軟件設計等。利用傳感器實現了對太陽圖像的采集,通過ARM串口控制數據的讀寫,并利用MATLAB設計了上位機軟件,完成了對采集數據的計算與管理。
ARM;太陽圖像;數據采集;MATLAB
太陽輻射是自然界中各物理過程的重要能量來源,也是地球表面與大氣交換熱量的一種形式,可以作為反映氣候變化的重要信號。而太陽跟蹤裝置是散射輻射測量中的一個基本部件,其精確度直接影響散射輻射測量的精度與準確性。
光電式太陽跟蹤方法因其結構簡單,易于實現,同時具有較高的跟蹤精度而被廣泛地應用于太陽輻射測量以及太陽能應用等領域。但傳統的光電式跟蹤方法雖然瞬時跟蹤精度較高,但多數采用直接基于嵌入式平臺的跟蹤方法[1-3],受限于單片機等主控芯片的計算速度與開發難度,往往不能實時精確地定位太陽質心,易出現累積誤差,影響太陽跟蹤的穩定性與連續性。因此,本文提出一種基于ARM和MATLAB GUI的太陽圖像數據采集系統,以基于ARM Cortex M3的STM32F103為硬件核心,利用CMOS傳感器對太陽圖像數據進行采集,并且提供可視化的上位機操作界面,對采集到的數據進行存儲、分析、計算。本系統不僅可以對太陽圖像數據進行實時采集和顯示,而且便于擴展和后續對太陽質心圖像提取算法的研究,為進一步消除太陽跟蹤系統累積誤差以及準確測定太陽輻射提供基礎。同時,該系統可以為其他需要實現較復雜圖像處理的嵌入式系統提供有利的技術參考。
圖像數據采集系統總體結構如圖1所示。系統由兩部分組成:一部分是通過PC與STM32串口實現圖像數據的實時通信,另一部分是利用MATLAB GUI完成圖像存儲及圖像處理[4]。
系統下位機負責圖像數據的采集,并通過串行接口實時地將圖像數據傳送回上位機準備進行下一步處理。其中,圖像傳感器選用OV7725,以實現圖像的采集與存儲等功能。攝像頭模塊外接FIFO芯片,存儲采集的圖像,并在控制信號到來時,由STM32讀取FIFO中存儲的圖像數據。STM32通過CP2102電平轉換芯片與PC的USB接口相連,利用芯片將TTL電平與RS232電平轉換,完成數據傳輸功能。

圖1 系統總體結構

圖2 攝像頭接口電路
系統的上位機部分負責圖像數據的存儲與處理。通過調用MATLAB設備控制箱中的serial類,完成對串口的設置,接著根據自定義的傳輸協議在攝像頭與PC串口之間進行實時通信。上位機的串口參數、圖像像素等設置均可通過采集系統的GUI界面,根據下位機配置進行修改。對返回的圖像數據,可利用MATLAB的圖像處理工具箱與直接面向矩陣操作的編程特點,方便地進行分析與處理,獲取所需信息。
2.1 攝像頭接口電路
鑒于CMOS傳感器兼容CMOS技術,內部集成了A/D轉換等芯片,簡化了外圍模塊的設計,提高了采集的抗噪聲能力,故本系統采用美國Omni Vision公司的CMOS數字圖像傳感器OV7725。其接口電路原理圖如圖2所示。OV7725是一個能夠提供單片VGA攝像頭和影像處理器的所有功能的圖像傳感器,實際有效像素為640×480,支持整幀輸出、子采樣、取窗口等模式,支持8/10位圖像分辨率,支持包括RAW RGB、RGB(RGB 4:2:2、RGB565/555/444)以及YCbCr(4:2:2)等多種數據格式。其體積小,工作電壓低,可以對圖像進行伽馬曲線、白平衡、飽和度、色度等處理。
在OV7725后端搭載了FIFO來降低對單片機的性能依賴(當前模塊對處理器的硬件要求僅僅為一個中斷,幾個GPIO管腳即可),節省片內資源,方便后續對于單片機功能的擴展。WEN與HREF作為與非門的輸入端,而與非門的輸出端口連接到FIFO的WE端口。當WEN管腳和HREF管腳都為高電平時,FIFO的WE端口的電平值才為低電平。因此,如果允許圖像數據傳入FIFO時,可以把WEN拉高,當攝像頭的HREF為低電平時,WE的電平值為高電平,因此,即使PCLK仍在運轉,也不會傳送數據進入FIFO,從而防止采集到無效數據[5]。
2.2 串行接口電路
接口電路采用CP2102芯片設計而成。CP2102集成度高,內置USB2.0全速功能控制器、USB收發器、晶體振蕩器、EEPROM及異步串行數據總線(UART)。與其他電平轉接電路的工作原理類似,CP2102通過驅動程序將PC的USB口虛擬成COM口以達到擴展的目的。電路原理如圖3所示。

圖3 串行接口電路
3.1 STM32數據傳輸流程
將攝像頭的場中斷信號送入單片機,當單片機捕捉到場中斷信號時,拉高WEN管腳電平,之后整幅圖像的數據就會存入FIFO。當單片機再次捕捉到場中斷時,表明一幅圖像已經送入FIFO,此時關閉場中斷,拉低WEN電平,防止攝像頭數據再次寫入FIFO。當上位機發送握手信號之后,開始讀取FIFO數據到內存緩沖區,根據采集到的圖像做應用處理,并通過串口發送至上位機,發送完成后,再次開啟場中斷,當再次捕捉到場中斷時,再次拉高WEN管腳電平,繼續讓攝像頭數據存入FIFO,完成后單片機等待上位機握手信號,如此循環。
3.2 串行通信實現
MATLAB軟件的設備控制箱(Instrument Control Toolbox,ICT)提供了對RS232串口通信的正式支持。首先調用設備控制工具箱中的serial類函數,創建用戶自定義的串口設備對象。再通過自定義的文件句柄,以文件操作的方式,達到對PC串行口讀寫操作的目的。
在進行通信之前,需對控制器進行配置,包括設置通信模式(全雙工、半雙工等)和串行口的通信參數(波特率、數據位、停止位等),使通信設備擁有相同的通信模式和串行通信參數。從通信的建立到結束通信主要包括如下5個基本步驟[6]:
(1)為應用程序創建串口對象。
(2)連接打開串口。
(3)設置或者修改串口通信參數。在能夠有效地進行串口通信前,必須設置正確的串口通信參數。
(4)從串口讀寫數據。在前面三個步驟正常完成后,既可以從串口讀數據也可以向串口寫數據,也就是接受或者發送數據。實現讀串口功能的函數有多個,根據到達串口數據的類型選擇合適的讀函數。
(5)關閉串口以及釋放串口對象在工作空間中占用的存儲空間。
基本步驟中參數的設置需要在回調函數中提前初始化,對于不同的STM32程序,需要找到回調函數相應位置進行修改,較為不便,本文中通過對用戶的選擇值進行讀取,從而初始化串口參數,同時添加了中斷函數以及數據轉換函數。數據傳輸流程如圖4所示。

圖4 數據傳輸流程
首先對用戶設置的參數進行讀取,設置并初始化串口,接著打開串口,發送握手信號0xff。當單片機接收到相應的握手信號后,開始圖像傳輸。當MATLAB接收到終止符 ‘ ’ 時,表明已成功接收一幀圖像,從而觸發中斷。由于MATLAB接收到的數據是ASCII碼字符形式,所以需要將從緩沖區讀取到的數據進行格式轉換:根據用戶設定的像素數M×N,將數據轉換成M×N的整形圖像矩陣。最后以JPEG圖像格式存儲于工作區空間中。具體代碼如下:
a_temp = [0,0,0,0,0];
%定義一個像素值臨時存儲矩陣
b_count_flag = 1;
c_count_flag = 0;
data = zeros(M,N);
%定義圖像存儲矩陣,M,N為像素數
n = s.BytesAvailable;
%讀取緩存區中當前圖像大小
%讀取圖像
for a = 1:n
if out(a) ~= 13
%判斷是否是一幀圖像終止符
if out(a) ~= 10
%判斷是否是單個像素終止符
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格式轉化成適合計算機處理的形式
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);
%存儲當前幀
3.3 GUI界面布局
利用MATLAB GUIDE開發工具,添加完成必要的控制框,包括靜態文本框、彈出式菜單、可編輯文本框、按鈕、坐標軸。
完成后的界面如圖5所示。界面設計了一般串行通信參數設置按鈕,可對波特率、數據位、停止位等數值進行設置,這里根據STM32程序中的對應設置,選擇相應的參數。Pixel為像素數的大小,由圖像傳感器寄存器中的相應設置來選擇接收像素數。方形靜態文本框顯示當前執行狀態。坐標軸(axes1)顯示當前接收到的圖像。右邊打開串口(open serial)完成串口參數的讀取設置,并發送握手信號。發送控制信號(send control signal)通過串口發送控制信號給伺服電機,完成精確的太陽定位跟蹤。關閉(close)按鈕釋放串口對象在MATLAB工作區中占用的存儲空間,并退出應用。

圖5 界面布局圖
設置波特率為115 200,數據位8 bit,停止位1 bit,無奇偶校驗位,像素數為240×240。圖片以45 s為周期進行刷新,滿足預期。太陽圖像顯示結果如圖6所示。
針對目前太陽輻射測量中的跟蹤系統累積誤差較大、速度較慢等問題,提出了一種基于MATLAB與ARM的太

圖6 太陽圖像提取結果
陽圖像采集系統。該系統可以直觀、快速地顯示當前系統的運行狀態與太陽的實時變化,使控制過程可視化。同時,上位機采用MATLAB編程實現,可以利用軟件本身的圖像處理方法與工具箱,為下一步太陽質心提取算法的開發提供良好的平臺,可大大節省開發時間。GUI程序發布后,移植方便,無需安裝MATLAB軟件,可在任意一臺PC上以靜態或動態的圖像處理結果,驅動電機等執行器,實現高精度的太陽跟蹤自動控制。
[1] 陳麗娟, 周鑫. 基于ARM嵌入式圖像處理平臺的太陽跟蹤系統[J]. 現代電子技術, 2012, 35(4): 71-74.
[2] 劉麗微. 基于視覺的太陽光線自動跟蹤裝置[D]. 沈陽:沈陽工業大學, 2008.
[3] 任松林. 主動式太陽跟蹤及驅動系統研究與設計[D]. 重慶:重慶大學, 2008.
[4] 薛飛, 楊友良, 孟凡偉, 等. 基于Matlab GUI串口通信的實時溫度監控系統設計[J]. 計算機應用, 2014, 34(1): 292-296.
[5] 劉火良,楊森. STM32庫開發實戰指南[M]. 北京:機械工業出版社,2013.
[6] 王戰軍, 沈明. 基于MATLAB GUI的串口通信編程實現[J]. 現代電子技術, 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
江蘇省自然科學基金(BK20130989);江蘇省高等學校大學生創新創業訓練計劃項目(201510300004)
TP391
A
10.19358/j.issn.1674- 7720.2017.03.021
俞強,劉卿卿,董龍.基于ARM和MATLAB GUI的太陽圖像數據采集系統設計[J].微型機與應用,2017,36(3):71-74.
2016-09-03)
俞強(1995-),男,本科生,主要研究方向:嵌入式系統,圖像信號處理。
劉卿卿(1983-),女,博士,講師,主要研究方向:光學儀器及光電檢測等。