俞強1,,劉卿卿1,,2,董龍3
?。?.南京信息工程大學 信息與控制學院,,江蘇 南京 210044;2. 南京信息工程大學 大氣環(huán)境與裝備技術
協(xié)同創(chuàng)新中心,,江蘇 南京210044,;3. 南京信息工程大學 數(shù)學與統(tǒng)計學院,江蘇 南京 210044)
摘要:對太陽圖像數(shù)據(jù)進行同步采集與分析,,可以為輻射測量以及各種需要進行復雜圖像算法處理的嵌入式系統(tǒng)提供重要參考,。設計了一種能夠對太陽圖像進行同步數(shù)據(jù)采集的系統(tǒng),該系統(tǒng)主要包括圖像傳感器模塊,、數(shù)據(jù)傳輸與存儲模塊,、上位機軟件設計等。利用傳感器實現(xiàn)了對太陽圖像的采集,,通過ARM串口控制數(shù)據(jù)的讀寫,,并利用MATLAB設計了上位機軟件,,完成了對采集數(shù)據(jù)的計算與管理,。
關鍵詞:ARM;太陽圖像,;數(shù)據(jù)采集,;MATLAB
中圖分類號:TP391文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2017.03.021
引用格式:俞強,劉卿卿,,董龍.基于ARM和MATLAB GUI的太陽圖像數(shù)據(jù)采集系統(tǒng)設計[J].微型機與應用,,2017,36(3):71-74.
0引言
太陽輻射是自然界中各物理過程的重要能量來源,,也是地球表面與大氣交換熱量的一種形式,可以作為反映氣候變化的重要信號,。而太陽跟蹤裝置是散射輻射測量中的一個基本部件,,其精確度直接影響散射輻射測量的精度與準確性。
光電式太陽跟蹤方法因其結構簡單,,易于實現(xiàn),,同時具有較高的跟蹤精度而被廣泛地應用于太陽輻射測量以及太陽能應用等領域。但傳統(tǒng)的光電式跟蹤方法雖然瞬時跟蹤精度較高,,但多數(shù)采用直接基于嵌入式平臺的跟蹤方法[13],,受限于單片機等主控芯片的計算速度與開發(fā)難度,往往不能實時精確地定位太陽質(zhì)心,,易出現(xiàn)累積誤差,,影響太陽跟蹤的穩(wěn)定性與連續(xù)性。因此,,本文提出一種基于ARM和MATLAB GUI的太陽圖像數(shù)據(jù)采集系統(tǒng),,以基于ARM Cortex M3的STM32F103為硬件核心,利用CMOS傳感器對太陽圖像數(shù)據(jù)進行采集,,并且提供可視化的上位機操作界面,,對采集到的數(shù)據(jù)進行存儲、分析,、計算,。本系統(tǒng)不僅可以對太陽圖像數(shù)據(jù)進行實時采集和顯示,而且便于擴展和后續(xù)對太陽質(zhì)心圖像提取算法的研究,,為進一步消除太陽跟蹤系統(tǒng)累積誤差以及準確測定太陽輻射提供基礎,。同時,該系統(tǒng)可以為其他需要實現(xiàn)較復雜圖像處理的嵌入式系統(tǒng)提供有利的技術參考,。
1總體設計
圖像數(shù)據(jù)采集系統(tǒng)總體結構如圖1所示,。系統(tǒng)由兩部分組成:一部分是通過PC與STM32串口實現(xiàn)圖像數(shù)據(jù)的實時通信,另一部分是利用MATLAB GUI完成圖像存儲及圖像處理[4],。
系統(tǒng)下位機負責圖像數(shù)據(jù)的采集,,并通過串行接口實時地將圖像數(shù)據(jù)傳送回上位機準備進行下一步處理。其中,,圖像傳感器選用OV7725,,以實現(xiàn)圖像的采集與存儲等功能。攝像頭模塊外接FIFO芯片,,存儲采集的圖像,,并在控制信號到來時,由STM32讀取FIFO中存儲的圖像數(shù)據(jù)。STM32通過CP2102電平轉換芯片與PC的USB接圖1系統(tǒng)總體結構圖2攝像頭接口電路口相連,,利用芯片將TTL電平與RS232電平轉換,,完成數(shù)據(jù)傳輸功能。
系統(tǒng)的上位機部分負責圖像數(shù)據(jù)的存儲與處理,。通過調(diào)用MATLAB設備控制箱中的serial類,,完成對串口的設置,接著根據(jù)自定義的傳輸協(xié)議在攝像頭與PC串口之間進行實時通信,。上位機的串口參數(shù),、圖像像素等設置均可通過采集系統(tǒng)的GUI界面,根據(jù)下位機配置進行修改,。對返回的圖像數(shù)據(jù),,可利用MATLAB的圖像處理工具箱與直接面向矩陣操作的編程特點,方便地進行分析與處理,,獲取所需信息,。
2硬件設計
2.1攝像頭接口電路
鑒于CMOS傳感器兼容CMOS技術,內(nèi)部集成了A/D轉換等芯片,,簡化了外圍模塊的設計,,提高了采集的抗噪聲能力,故本系統(tǒng)采用美國Omni Vision公司的CMOS數(shù)字圖像傳感器OV7725,。其接口電路原理圖如圖2所示,。OV7725是一個能夠提供單片VGA攝像頭和影像處理器的所有功能的圖像傳感器,實際有效像素為640×480,,支持整幀輸出,、子采樣、取窗口等模式,,支持8/10位圖像分辨率,,支持包括RAW RGB、RGB(RGB 4:2:2,、RGB565/555/444)以及YCbCr(4:2:2)等多種數(shù)據(jù)格式,。其體積小,工作電壓低,,可以對圖像進行伽馬曲線,、白平衡、飽和度,、色度等處理,。
在OV7725后端搭載了FIFO來降低對單片機的性能依賴(當前模塊對處理器的硬件要求僅僅為一個中斷,幾個GPIO管腳即可),,節(jié)省片內(nèi)資源,,方便后續(xù)對于單片機功能的擴展。WEN與HREF作為與非門的輸入端,,而與非門的輸出端口連接到FIFO的WE端口,。當WEN管腳和HREF管腳都為高電平時,F(xiàn)IFO的WE端口的電平值才為低電平,。因此,,如果允許圖像數(shù)據(jù)傳入FIFO時,可以把WEN拉高,,當攝像頭的HREF為低電平時,,WE的電平值為高電平,因此,,即使PCLK仍在運轉,,也不會傳送數(shù)據(jù)進入FIFO,從而防止采集到無效數(shù)據(jù)[5],。
2.2串行接口電路
接口電路采用CP2102芯片設計而成,。CP2102集成度高,內(nèi)置USB2.0全速功能控制器,、USB收發(fā)器,、晶體振蕩器、EEPROM及異步串行數(shù)據(jù)總線(UART),。與其他電平轉接電路的工作原理類似,,CP2102通過驅動程序將PC的USB口虛擬成COM口以達到擴展的目的。電路原理如圖3所示,。
3軟件設計
3.1STM32數(shù)據(jù)傳輸流程
將攝像頭的場中斷信號送入單片機,,當單片機捕捉到場中斷信號時,拉高WEN管腳電平,,之后整幅圖像的數(shù)據(jù)就會存入FIFO,。當單片機再次捕捉到場中斷時,表明一幅圖像已經(jīng)送入FIFO,,此時關閉場中斷,,拉低WEN電平,防止攝像頭數(shù)據(jù)再次寫入FIFO,。當上位機發(fā)送握手信號之后,,開始讀取FIFO數(shù)據(jù)到內(nèi)存緩沖區(qū),根據(jù)采集到的圖像做應用處理,,并通過串口發(fā)送至上位機,,發(fā)送完成后,再次開啟場中斷,,當再次捕捉到場中斷時,,再次拉高WEN管腳電平,繼續(xù)讓攝像頭數(shù)據(jù)存入FIFO,完成后單片機等待上位機握手信號,,如此循環(huán),。
3.2串行通信實現(xiàn)
MATLAB軟件的設備控制箱(Instrument Control Toolbox,ICT)提供了對RS232串口通信的正式支持,。首先調(diào)用設備控制工具箱中的serial類函數(shù),,創(chuàng)建用戶自定義的串口設備對象。再通過自定義的文件句柄,,以文件操作的方式,,達到對PC串行口讀寫操作的目的。
在進行通信之前,,需對控制器進行配置,,包括設置通信模式(全雙工、半雙工等)和串行口的通信參數(shù)(波特率,、數(shù)據(jù)位,、停止位等),使通信設備擁有相同的通信模式和串行通信參數(shù),。從通信的建立到結束通信主要包括如下5個基本步驟[6]:
?。?)為應用程序創(chuàng)建串口對象。
?。?)連接打開串口,。
(3)設置或者修改串口通信參數(shù),。在能夠有效地進行串口通信前,,必須設置正確的串口通信參數(shù)。
?。?)從串口讀寫數(shù)據(jù),。在前面三個步驟正常完成后,既可以從串口讀數(shù)據(jù)也可以向串口寫數(shù)據(jù),,也就是接受或者發(fā)送數(shù)據(jù),。實現(xiàn)讀串口功能的函數(shù)有多個,根據(jù)到達串口數(shù)據(jù)的類型選擇合適的讀函數(shù),。
?。?)關閉串口以及釋放串口對象在工作空間中占用的存儲空間。
基本步驟中參數(shù)的設置需要在回調(diào)函數(shù)中提前初始化,,對于不同的STM32程序,,需要找到回調(diào)函數(shù)相應位置進行修改,較為不便,,本文中通過對用戶的選擇值進行讀取,,從而初始化串口參數(shù),同時添加了中斷函數(shù)以及數(shù)據(jù)轉換函數(shù),。數(shù)據(jù)傳輸流程如圖4所示?!?/p>
首先對用戶設置的參數(shù)進行讀取,,設置并初始化串口,接著打開串口,,發(fā)送握手信號0xff,。當單片機接收到相應的握手信號后,,開始圖像傳輸,。當MATLAB接收到終止符 ‘\\n’ 時,表明已成功接收一幀圖像,,從而觸發(fā)中斷,。由于MATLAB接收到的數(shù)據(jù)是ASCII碼字符形式,所以需要將從緩沖區(qū)讀取到的數(shù)據(jù)進行格式轉換:根據(jù)用戶設定的像素數(shù)M×N,,將數(shù)據(jù)轉換成M×N的整形圖像矩陣,。最后以JPEG圖像格式存儲于工作區(qū)空間中。具體代碼如下:
a_temp = [0,0,0,0,0];%定義一個像素值臨時存儲矩陣
b_count_flag = 1;
c_count_flag = 0;
data = zeros(M,N);%定義圖像存儲矩陣,,M,N為像素數(shù)
n = s.BytesAvailable;%讀取緩存區(qū)中當前圖像大小
out = fread(s,n,char);%讀取圖像
out = char(out);
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);
imwrite(imgRGB,Sun.jpg);%存儲當前幀
3.3GUI界面布局
利用MATLAB GUIDE開發(fā)工具,,添加完成必要的控制框,包括靜態(tài)文本框,、彈出式菜單,、可編輯文本框、按鈕,、坐標軸,。
完成后的界面如圖5所示。界面設計了一般串行通信參數(shù)設置按鈕,,可對波特率,、數(shù)據(jù)位、停止位等數(shù)值進行設置,,這里根據(jù)STM32程序中的對應設置,,選擇相應的參數(shù)。Pixel為像素數(shù)的大小,,由圖像傳感器寄存器中的相應設置來選擇接收像素數(shù),。方形靜態(tài)文本框顯示當前執(zhí)行狀態(tài)。坐標軸(axes1)顯示當前接收到的圖像,。右邊打開串口(open serial)完成串口參數(shù)的讀取設置,,并發(fā)送握手信號。發(fā)送控制信號(send control signal)通過串口發(fā)送控制信號給伺服電機,,完成精確的太陽定位跟蹤,。關閉(close)按鈕釋放串口對象在MATLAB工作區(qū)中占用的存儲空間,,并退出應用。
4實驗
設置波特率為115 200,,數(shù)據(jù)位8 bit,,停止位1 bit,無奇偶校驗位,,像素數(shù)為240×240,。圖片以45 s為周期進行刷新,滿足預期,。太陽圖像顯示結果如圖6所示,。
5結論
針對目前太陽輻射測量中的跟蹤系統(tǒng)累積誤差較大、速度較慢等問題,,提出了一種基于MATLAB與ARM的太陽圖像采集系統(tǒng),。該系統(tǒng)可以直觀、快速地顯示當前系統(tǒng)的運行狀態(tài)與太陽的實時變化,,使控制過程可視化,。同時,上位機采用MATLAB編程實現(xiàn),,可以利用軟件本身的圖像處理方法與工具箱,,為下一步太陽質(zhì)心提取算法的開發(fā)提供良好的平臺,可大大節(jié)省開發(fā)時間,。GUI程序發(fā)布后,,移植方便,無需安裝MATLAB軟件,,可在任意一臺PC上以靜態(tài)或動態(tài)的圖像處理結果,,驅動電機等執(zhí)行器,實現(xiàn)高精度的太陽跟蹤自動控制,。
參考文獻
?。?] 陳麗娟, 周鑫. 基于ARM嵌入式圖像處理平臺的太陽跟蹤系統(tǒng)[J]. 現(xiàn)代電子技術, 2012, 35(4): 71-74.
[2] 劉麗微. 基于視覺的太陽光線自動跟蹤裝置[D]. 沈陽:沈陽工業(yè)大學, 2008.
?。?] 任松林. 主動式太陽跟蹤及驅動系統(tǒng)研究與設計[D]. 重慶:重慶大學, 2008.
?。?] 薛飛, 楊友良, 孟凡偉, 等. 基于Matlab GUI串口通信的實時溫度監(jiān)控系統(tǒng)設計[J]. 計算機應用, 2014, 34(1): 292-296.
[5] 劉火良,,楊森. STM32庫開發(fā)實戰(zhàn)指南[M]. 北京:機械工業(yè)出版社,,2013.
[6] 王戰(zhàn)軍, 沈明. 基于MATLAB GUI的串口通信編程實現(xiàn)[J]. 現(xiàn)代電子技術, 2010, 39(9): 38-40.