太陽輻射是自然界中各物理過程的重要能量來源,也是地球表面與大氣交換熱量的一種形式,可以作為反映氣候變化的重要信號。而太陽跟蹤裝置是散射輻射測量中的一個基本部件,其精確度直接影響散射輻射測量的精度與準確性。
光電式太陽跟蹤方法因其結構簡單,易於實現,同時具有較高的跟蹤精度而被廣泛地應用於太陽輻射測量以及太陽能應用等領域。但傳統的光電式跟蹤方法雖然瞬時跟蹤精度較高,但多數採用直接基於嵌入式平台的跟蹤方法[13],受限於單片機等主控晶元的計算速度與開發難度,往往不能實時精確地定位太陽質心,易出現累積誤差,影響太陽跟蹤的穩定性與連續性。因此,本文提出一種基於ARM和MATLAB GUI的太陽圖像數據採集系統,以基於ARM Cortex M3的STM32F103為硬體核心,利用CMOS感測器對太陽圖像數據進行採集,並且提供可視化的上位機操作界面,對採集到的數據進行存儲、分析、計算。本系統不僅可以對太陽圖像數據進行實時採集和顯示,而且便於擴展和後續對太陽質心圖像提取演算法的研究,為進一步消除太陽跟蹤系統累積誤差以及準確測定太陽輻射提供基礎。同時,該系統可以為其他需要實現較複雜圖像處理的嵌入式系統提供有利的技術參考。
1總體設計

圖像數據採集系統總體結構如圖1所示。系統由兩部分組成:一部分是通過PC與STM32串口實現圖像數據的實時通信,另一部分是利用MATLAB GUI完成圖像存儲及圖像處理[4]。
系統下位機負責圖像數據的採集,並通過串列介面實時地將圖像數據傳送回上位機準備進行下一步處理。其中,圖像感測器選用OV7725,以實現圖像的採集與存儲等功能。攝像頭模塊外接FIFO晶元,存儲採集的圖像,並在控制信號到來時,由STM32讀取FIFO中存儲的圖像數據。STM32通過CP2102電平轉換晶元與PC的USB接圖1系統總體結構圖2攝像頭介面電路口相連,利用晶元將TTL電平與RS232電平轉換,完成數據傳輸功能。

系統的上位機部分負責圖像數據的存儲與處理。通過調用MATLAB設備控制箱中的serial類,完成對串口的設置,接著根據自定義的傳輸協議在攝像頭與PC串口之間進行實時通信。上位機的串口參數、圖像像素等設置均可通過採集系統的GUI界面,根據下位機配置進行修改。對返回的圖像數據,可利用MATLAB的圖像處理工具箱與直接面向矩陣操作的編程特點,方便地進行分析與處理,獲取所需信息。
2硬體設計
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.1STM32數據傳輸流程
將攝像頭的場中斷信號送入單片機,當單片機捕捉到場中斷信號時,拉高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所示。

首先對用戶設置的參數進行讀取,設置並初始化串口,接著打開串口,發送握手信號0xff。當單片機接收到相應的握手信號後,開始圖像傳輸。當MATLAB接收到終止符 『\n』 時,表明已成功接收一幀圖像,從而觸發中斷。由於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;%讀取緩存區中當前圖像大小
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);
%將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開發工具,添加完成必要的控制框,包括靜態文本框、彈出式菜單、可編輯文本框、按鈕、坐標軸。
完成後的界面如圖5所示。界面設計了一般串列通信參數設置按鈕,可對波特率、數據位、停止位等數值進行設置,這裡根據STM32程序中的對應設置,選擇相應的參數。Pixel為像素數的大小,由圖像感測器寄存器中的相應設置來選擇接收像素數。方形靜態文本框顯示當前執行狀態。坐標軸(axes1)顯示當前接收到的圖像。右邊打開串口(open serial)完成串口參數的讀取設置,並發送握手信號。發送控制信號(send control signal)通過串口發送控制信號給伺服電機,完成精確的太陽定位跟蹤。關閉(close)按鈕釋放串口對象在MATLAB工作區中佔用的存儲空間,並退出應用。

4實驗
設置波特率為115 200,數據位8 bit,停止位1 bit,無奇偶校驗位,像素數為240×240。圖片以45 s為周期進行刷新,滿足預期。太陽圖像顯示結果如圖6所示。

5結論
針對目前太陽輻射測量中的跟蹤系統累積誤差較大、速度較慢等問題,提出了一種基於MATLAB與ARM的太陽圖像採集系統。該系統可以直觀、快速地顯示當前系統的運行狀態與太陽的實時變化,使控制過程可視化。同時,上位機採用MATLAB編程實現,可以利用軟體本身的圖像處理方法與工具箱,為下一步太陽質心提取演算法的開發提供良好的平台,可大大節省開發時間。GUI程序發布後,移植方便,無需安裝MATLAB軟體,可在任意一台PC上以靜態或動態的圖像處理結果,驅動電機等執行器,實現高精度的太陽跟蹤自動控制。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/201925.html