AVR單片機和Matlab串口通信的計時器系統(tǒng)
Bytes available事件需要事先設(shè)置??梢允褂煤瘮?shù)set(obj,“By tesAvailableFcnMode”,“byte”)和set(obj,“BytesAvailableFcnCount”,3)。以上兩個函數(shù)設(shè)置為當(dāng)串口檢測到輸入緩存中達(dá)到了3個字符的數(shù)據(jù)時,則觸發(fā)串口中斷。
② 串口中斷處理函數(shù)。串口中斷處理函數(shù)可以根據(jù)用戶需要自行定義。如串口讀中斷處理函數(shù)可以這樣定義:obj.BytesAvailableFcn=@receiveData。receiveData即為串口讀中斷處理函數(shù)。在讀中斷處理函數(shù)中可以進行串口讀操作,即將輸入緩存區(qū)中的數(shù)據(jù)讀到用戶自定義的存儲變量中,以備后續(xù)的數(shù)據(jù)處理與分析。[7]
4.2 Matlab基于GUI界面的計時器實現(xiàn)
利用Matlab的GUI設(shè)計出整體的控制界面,界面功能包括:可以設(shè)置串口參數(shù)如端口號、波特率、數(shù)據(jù)位、校驗位和停止位;計時器顯示窗口,能實時顯示計時器的時間;還具有實現(xiàn)打開串口、開始計時、停止、重置等功能的按鈕。設(shè)計的GUI控制界面如圖5所示。
圖5 GUI控制界面
單片機發(fā)過來的信號,觸發(fā)Matlab上的串口中斷,標(biāo)志FLAGA/FLAGB置位,進而可以使計時器停止計時。同時,在GUI界面上,也可以通過手動按鍵使標(biāo)志FLAGA/FLAGB置位,停止計時。計時部分的程序流程圖如圖6所示。
圖6 計時部分的程序流程圖
Matlab文件編譯完畢后,生成的可執(zhí)行程序還需要Matlab環(huán)境的支持。為了使本設(shè)計更廣泛地應(yīng)用到一般用戶,需要發(fā)布到?jīng)]有安裝Matlab的機器上運行,還要進行最后一項工作,即打包Matlab組件運行環(huán)境(Matlab Component Runtime,MCR)。將MCR與可執(zhí)行程序一起打包,拷貝到其他沒有安裝Matlab的機器上,在該機器上安裝MCR,安裝完畢即可直接在該機器上運行編譯的Matlab可執(zhí)行程序。[8]
5 系統(tǒng)設(shè)計及應(yīng)用中需注意的問題
實際測試時,光電開關(guān)在環(huán)境照度較高時,一般都能穩(wěn)定工作。但應(yīng)回避將傳感器光軸正對太陽光、白熾燈等強光源。在不能改變傳感器(受光器)光軸與強光源的角度時,可在傳感器上方四周加裝遮光板或套上遮光長筒,以確保光電開關(guān)可靠工作。
另外,在ZigBee無線通信模塊配置時,應(yīng)注意選擇合適的通信信道,以避免WiFi的干擾。在同一個網(wǎng)絡(luò)中,無論是終端設(shè)備還是中心節(jié)點,ID設(shè)置必須相同,模塊間才能正常通信。同一個網(wǎng)絡(luò)中,所有模塊的串口超時時間設(shè)置必須相同,否則串口通信不能同步,通信也會失敗。
結(jié)語
在本設(shè)計中,主要以ATmega16單片機作為信號采集系統(tǒng),通過串口和上位機的Matlab進行信號通信,通信采用ZigBee無線通信模塊實現(xiàn),使系統(tǒng)靈活性、可擴展性大大增強。本文利用Matlab GUI進行了包含一般界面元素的界面開發(fā),在此基礎(chǔ)上,加入串口通信功能和計時器計時功能。GUI設(shè)計出的人機友好界面,使得系統(tǒng)簡單易懂,操作起來更加方便。
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
通信相關(guān)文章:通信原理
光電開關(guān)相關(guān)文章:光電開關(guān)原理
評論