《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于ARM和MATLAB GUI的太陽圖像數(shù)據(jù)采集系統(tǒng)設(shè)計
基于ARM和MATLAB GUI的太陽圖像數(shù)據(jù)采集系統(tǒng)設(shè)計
2017年微型機與應(yīng)用第3期
俞強1,劉卿卿1,2,董龍3
1.南京信息工程大學(xué) 信息與控制學(xué)院,江蘇 南京 2100442. 南京信息工程大學(xué) 大氣環(huán)境與裝備技術(shù) 協(xié)同創(chuàng)新中心,江蘇 南京210044;3. 南京信息工程大學(xué) 數(shù)學(xué)與統(tǒng)計學(xué)院,江蘇 南京 210044
摘要: 對太陽圖像數(shù)據(jù)進(jìn)行同步采集與分析,可以為輻射測量以及各種需要進(jìn)行復(fù)雜圖像算法處理的嵌入式系統(tǒng)提供重要參考。設(shè)計了一種能夠?qū)μ枅D像進(jìn)行同步數(shù)據(jù)采集的系統(tǒng),該系統(tǒng)主要包括圖像傳感器模塊、數(shù)據(jù)傳輸與存儲模塊、上位機軟件設(shè)計等。利用傳感器實現(xiàn)了對太陽圖像的采集,通過ARM串口控制數(shù)據(jù)的讀寫,并利用MATLAB設(shè)計了上位機軟件,完成了對采集數(shù)據(jù)的計算與管理。
Abstract:
Key words :

  俞強1,劉卿卿1,2,董龍3

 ?。?.南京信息工程大學(xué) 信息與控制學(xué)院,江蘇 南京 210044;2. 南京信息工程大學(xué) 大氣環(huán)境與裝備技術(shù)

協(xié)同創(chuàng)新中心,江蘇 南京210044;3. 南京信息工程大學(xué) 數(shù)學(xué)與統(tǒng)計學(xué)院,江蘇 南京 210044)

       摘要:對太陽圖像數(shù)據(jù)進(jìn)行同步采集與分析,可以為輻射測量以及各種需要進(jìn)行復(fù)雜圖像算法處理的嵌入式系統(tǒng)提供重要參考。設(shè)計了一種能夠?qū)μ枅D像進(jìn)行同步數(shù)據(jù)采集的系統(tǒng),該系統(tǒng)主要包括圖像傳感器模塊、數(shù)據(jù)傳輸與存儲模塊、上位機軟件設(shè)計等。利用傳感器實現(xiàn)了對太陽圖像的采集,通過ARM串口控制數(shù)據(jù)的讀寫,并利用MATLAB設(shè)計了上位機軟件,完成了對采集數(shù)據(jù)的計算與管理。

  關(guān)鍵詞:ARM;太陽圖像;數(shù)據(jù)采集;MATLAB

  中圖分類號:TP391文獻(xiàn)標(biāo)識碼:ADOI: 10.19358/j.issn.1674-7720.2017.03.021

  引用格式:俞強,劉卿卿,董龍.基于ARM和MATLAB GUI的太陽圖像數(shù)據(jù)采集系統(tǒng)設(shè)計[J].微型機與應(yīng)用,2017,36(3):71-74.

0引言

  太陽輻射是自然界中各物理過程的重要能量來源,也是地球表面與大氣交換熱量的一種形式,可以作為反映氣候變化的重要信號。而太陽跟蹤裝置是散射輻射測量中的一個基本部件,其精確度直接影響散射輻射測量的精度與準(zhǔn)確性。

  光電式太陽跟蹤方法因其結(jié)構(gòu)簡單,易于實現(xiàn),同時具有較高的跟蹤精度而被廣泛地應(yīng)用于太陽輻射測量以及太陽能應(yīng)用等領(lǐng)域。但傳統(tǒng)的光電式跟蹤方法雖然瞬時跟蹤精度較高,但多數(shù)采用直接基于嵌入式平臺的跟蹤方法[13],受限于單片機等主控芯片的計算速度與開發(fā)難度,往往不能實時精確地定位太陽質(zhì)心,易出現(xiàn)累積誤差,影響太陽跟蹤的穩(wěn)定性與連續(xù)性。因此,本文提出一種基于ARM和MATLAB GUI的太陽圖像數(shù)據(jù)采集系統(tǒng),以基于ARM Cortex M3的STM32F103為硬件核心,利用CMOS傳感器對太陽圖像數(shù)據(jù)進(jìn)行采集,并且提供可視化的上位機操作界面,對采集到的數(shù)據(jù)進(jìn)行存儲、分析、計算。本系統(tǒng)不僅可以對太陽圖像數(shù)據(jù)進(jìn)行實時采集和顯示,而且便于擴(kuò)展和后續(xù)對太陽質(zhì)心圖像提取算法的研究,為進(jìn)一步消除太陽跟蹤系統(tǒng)累積誤差以及準(zhǔn)確測定太陽輻射提供基礎(chǔ)。同時,該系統(tǒng)可以為其他需要實現(xiàn)較復(fù)雜圖像處理的嵌入式系統(tǒng)提供有利的技術(shù)參考。

1總體設(shè)計

001.jpg

  圖像數(shù)據(jù)采集系統(tǒng)總體結(jié)構(gòu)如圖1所示。系統(tǒng)由兩部分組成:一部分是通過PC與STM32串口實現(xiàn)圖像數(shù)據(jù)的實時通信,另一部分是利用MATLAB GUI完成圖像存儲及圖像處理[4]。

  系統(tǒng)下位機負(fù)責(zé)圖像數(shù)據(jù)的采集,并通過串行接口實時地將圖像數(shù)據(jù)傳送回上位機準(zhǔn)備進(jìn)行下一步處理。其中,圖像傳感器選用OV7725,以實現(xiàn)圖像的采集與存儲等功能。攝像頭模塊外接FIFO芯片,存儲采集的圖像,并在控制信號到來時,由STM32讀取FIFO中存儲的圖像數(shù)據(jù)。STM32通過CP2102電平轉(zhuǎn)換芯片與PC的USB接圖1系統(tǒng)總體結(jié)構(gòu)圖2攝像頭接口電路口相連,利用芯片將TTL電平與RS232電平轉(zhuǎn)換,完成數(shù)據(jù)傳輸功能。

002.jpg

  系統(tǒng)的上位機部分負(fù)責(zé)圖像數(shù)據(jù)的存儲與處理。通過調(diào)用MATLAB設(shè)備控制箱中的serial類,完成對串口的設(shè)置,接著根據(jù)自定義的傳輸協(xié)議在攝像頭與PC串口之間進(jìn)行實時通信。上位機的串口參數(shù)、圖像像素等設(shè)置均可通過采集系統(tǒng)的GUI界面,根據(jù)下位機配置進(jìn)行修改。對返回的圖像數(shù)據(jù),可利用MATLAB的圖像處理工具箱與直接面向矩陣操作的編程特點,方便地進(jìn)行分析與處理,獲取所需信息。

2硬件設(shè)計

  2.1攝像頭接口電路

  鑒于CMOS傳感器兼容CMOS技術(shù),內(nèi)部集成了A/D轉(zhuǎn)換等芯片,簡化了外圍模塊的設(shè)計,提高了采集的抗噪聲能力,故本系統(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ù)格式。其體積小,工作電壓低,可以對圖像進(jìn)行伽馬曲線、白平衡、飽和度、色度等處理。

  在OV7725后端搭載了FIFO來降低對單片機的性能依賴(當(dāng)前模塊對處理器的硬件要求僅僅為一個中斷,幾個GPIO管腳即可),節(jié)省片內(nèi)資源,方便后續(xù)對于單片機功能的擴(kuò)展。WEN與HREF作為與非門的輸入端,而與非門的輸出端口連接到FIFO的WE端口。當(dāng)WEN管腳和HREF管腳都為高電平時,F(xiàn)IFO的WE端口的電平值才為低電平。因此,如果允許圖像數(shù)據(jù)傳入FIFO時,可以把WEN拉高,當(dāng)攝像頭的HREF為低電平時,WE的電平值為高電平,因此,即使PCLK仍在運轉(zhuǎn),也不會傳送數(shù)據(jù)進(jìn)入FIFO,從而防止采集到無效數(shù)據(jù)[5]。

  2.2串行接口電路

  接口電路采用CP2102芯片設(shè)計而成。CP2102集成度高,內(nèi)置USB2.0全速功能控制器、USB收發(fā)器、晶體振蕩器、EEPROM及異步串行數(shù)據(jù)總線(UART)。與其他電平轉(zhuǎn)接電路的工作原理類似,CP2102通過驅(qū)動程序?qū)C的USB口虛擬成COM口以達(dá)到擴(kuò)展的目的。電路原理如圖3所示。

003.jpg

3軟件設(shè)計

  3.1STM32數(shù)據(jù)傳輸流程

  將攝像頭的場中斷信號送入單片機,當(dāng)單片機捕捉到場中斷信號時,拉高WEN管腳電平,之后整幅圖像的數(shù)據(jù)就會存入FIFO。當(dāng)單片機再次捕捉到場中斷時,表明一幅圖像已經(jīng)送入FIFO,此時關(guān)閉場中斷,拉低WEN電平,防止攝像頭數(shù)據(jù)再次寫入FIFO。當(dāng)上位機發(fā)送握手信號之后,開始讀取FIFO數(shù)據(jù)到內(nèi)存緩沖區(qū),根據(jù)采集到的圖像做應(yīng)用處理,并通過串口發(fā)送至上位機,發(fā)送完成后,再次開啟場中斷,當(dāng)再次捕捉到場中斷時,再次拉高WEN管腳電平,繼續(xù)讓攝像頭數(shù)據(jù)存入FIFO,完成后單片機等待上位機握手信號,如此循環(huán)。

  3.2串行通信實現(xiàn)

  MATLAB軟件的設(shè)備控制箱(Instrument Control Toolbox,ICT)提供了對RS232串口通信的正式支持。首先調(diào)用設(shè)備控制工具箱中的serial類函數(shù),創(chuàng)建用戶自定義的串口設(shè)備對象。再通過自定義的文件句柄,以文件操作的方式,達(dá)到對PC串行口讀寫操作的目的。

  在進(jìn)行通信之前,需對控制器進(jìn)行配置,包括設(shè)置通信模式(全雙工、半雙工等)和串行口的通信參數(shù)(波特率、數(shù)據(jù)位、停止位等),使通信設(shè)備擁有相同的通信模式和串行通信參數(shù)。從通信的建立到結(jié)束通信主要包括如下5個基本步驟[6]:

 ?。?)為應(yīng)用程序創(chuàng)建串口對象。

 ?。?)連接打開串口。

  (3)設(shè)置或者修改串口通信參數(shù)。在能夠有效地進(jìn)行串口通信前,必須設(shè)置正確的串口通信參數(shù)。

  (4)從串口讀寫數(shù)據(jù)。在前面三個步驟正常完成后,既可以從串口讀數(shù)據(jù)也可以向串口寫數(shù)據(jù),也就是接受或者發(fā)送數(shù)據(jù)。實現(xiàn)讀串口功能的函數(shù)有多個,根據(jù)到達(dá)串口數(shù)據(jù)的類型選擇合適的讀函數(shù)。

 ?。?)關(guān)閉串口以及釋放串口對象在工作空間中占用的存儲空間。

  基本步驟中參數(shù)的設(shè)置需要在回調(diào)函數(shù)中提前初始化,對于不同的STM32程序,需要找到回調(diào)函數(shù)相應(yīng)位置進(jìn)行修改,較為不便,本文中通過對用戶的選擇值進(jìn)行讀取,從而初始化串口參數(shù),同時添加了中斷函數(shù)以及數(shù)據(jù)轉(zhuǎn)換函數(shù)。數(shù)據(jù)傳輸流程如圖4所示。 

004.jpg

  首先對用戶設(shè)置的參數(shù)進(jìn)行讀取,設(shè)置并初始化串口,接著打開串口,發(fā)送握手信號0xff。當(dāng)單片機接收到相應(yīng)的握手信號后,開始圖像傳輸。當(dāng)MATLAB接收到終止符 ‘\\n’ 時,表明已成功接收一幀圖像,從而觸發(fā)中斷。由于MATLAB接收到的數(shù)據(jù)是ASCII碼字符形式,所以需要將從緩沖區(qū)讀取到的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換:根據(jù)用戶設(shè)定的像素數(shù)M×N,將數(shù)據(jù)轉(zhuǎn)換成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ū)中當(dāng)前圖像大小

  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格式轉(zhuǎn)化成適合計算機處理的形式

  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);%存儲當(dāng)前幀

  3.3GUI界面布局

  利用MATLAB GUIDE開發(fā)工具,添加完成必要的控制框,包括靜態(tài)文本框、彈出式菜單、可編輯文本框、按鈕、坐標(biāo)軸。

  完成后的界面如圖5所示。界面設(shè)計了一般串行通信參數(shù)設(shè)置按鈕,可對波特率、數(shù)據(jù)位、停止位等數(shù)值進(jìn)行設(shè)置,這里根據(jù)STM32程序中的對應(yīng)設(shè)置,選擇相應(yīng)的參數(shù)。Pixel為像素數(shù)的大小,由圖像傳感器寄存器中的相應(yīng)設(shè)置來選擇接收像素數(shù)。方形靜態(tài)文本框顯示當(dāng)前執(zhí)行狀態(tài)。坐標(biāo)軸(axes1)顯示當(dāng)前接收到的圖像。右邊打開串口(open serial)完成串口參數(shù)的讀取設(shè)置,并發(fā)送握手信號。發(fā)送控制信號(send control signal)通過串口發(fā)送控制信號給伺服電機,完成精確的太陽定位跟蹤。關(guān)閉(close)按鈕釋放串口對象在MATLAB工作區(qū)中占用的存儲空間,并退出應(yīng)用。

 

005.jpg

4實驗

  設(shè)置波特率為115 200,數(shù)據(jù)位8 bit,停止位1 bit,無奇偶校驗位,像素數(shù)為240×240。圖片以45 s為周期進(jìn)行刷新,滿足預(yù)期。太陽圖像顯示結(jié)果如圖6所示。

006.jpg

5結(jié)論

  針對目前太陽輻射測量中的跟蹤系統(tǒng)累積誤差較大、速度較慢等問題,提出了一種基于MATLAB與ARM的太陽圖像采集系統(tǒng)。該系統(tǒng)可以直觀、快速地顯示當(dāng)前系統(tǒng)的運行狀態(tài)與太陽的實時變化,使控制過程可視化。同時,上位機采用MATLAB編程實現(xiàn),可以利用軟件本身的圖像處理方法與工具箱,為下一步太陽質(zhì)心提取算法的開發(fā)提供良好的平臺,可大大節(jié)省開發(fā)時間。GUI程序發(fā)布后,移植方便,無需安裝MATLAB軟件,可在任意一臺PC上以靜態(tài)或動態(tài)的圖像處理結(jié)果,驅(qū)動電機等執(zhí)行器,實現(xiàn)高精度的太陽跟蹤自動控制。

參考文獻(xiàn)

 ?。?] 陳麗娟, 周鑫. 基于ARM嵌入式圖像處理平臺的太陽跟蹤系統(tǒng)[J]. 現(xiàn)代電子技術(shù), 2012, 35(4): 71-74.

 ?。?] 劉麗微. 基于視覺的太陽光線自動跟蹤裝置[D]. 沈陽:沈陽工業(yè)大學(xué), 2008.

 ?。?] 任松林. 主動式太陽跟蹤及驅(qū)動系統(tǒng)研究與設(shè)計[D]. 重慶:重慶大學(xué), 2008.

 ?。?] 薛飛, 楊友良, 孟凡偉, 等. 基于Matlab GUI串口通信的實時溫度監(jiān)控系統(tǒng)設(shè)計[J]. 計算機應(yīng)用, 2014, 34(1): 292-296.

 ?。?] 劉火良,楊森. STM32庫開發(fā)實戰(zhàn)指南[M]. 北京:機械工業(yè)出版社,2013.

 ?。?] 王戰(zhàn)軍, 沈明. 基于MATLAB GUI的串口通信編程實現(xiàn)[J]. 現(xiàn)代電子技術(shù), 2010, 39(9): 38-40.


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。