肖倩,崔思柱,劉豐豪,楊愷迪,程石
(長安大學(xué)工程機(jī)械學(xué)院,西安710061)
二自由度云臺(tái)是一種可遠(yuǎn)程控制攝像頭水平旋轉(zhuǎn)和俯仰角度調(diào)節(jié)的電動(dòng)設(shè)備,廣泛應(yīng)用于安防、工業(yè)、軍事、無人機(jī)航拍等領(lǐng)域。云臺(tái)的穩(wěn)定運(yùn)行是保證其所搭載相機(jī)正常拍攝的基礎(chǔ)。因此,一個(gè)穩(wěn)定可靠的實(shí)時(shí)監(jiān)控系統(tǒng)就顯得尤為重要,它不僅能保證設(shè)備溫度、電壓、電流在安全范圍內(nèi),更能提高云臺(tái)的精確控制能力。如果監(jiān)測到云臺(tái)運(yùn)行異常,可以有針對性地及時(shí)處理,避免造成不必要的損失。
本文提出了一種基于MATLAB GUI的云臺(tái)運(yùn)動(dòng)狀態(tài)監(jiān)控系統(tǒng)[1]的設(shè)計(jì)方案,該監(jiān)控系統(tǒng)通過Modbus協(xié)議將采集到的云臺(tái)運(yùn)動(dòng)狀態(tài)參數(shù)上傳至上位機(jī)實(shí)時(shí)顯示并通過界面進(jìn)行控制,保證了云臺(tái)轉(zhuǎn)速控制的快速性、穩(wěn)定性,解決了云臺(tái)控制參數(shù)難以精確測量和控制的問題,具有實(shí)際的工程意義。
云臺(tái)參數(shù)監(jiān)控系統(tǒng)整體結(jié)構(gòu)如圖1所示。系統(tǒng)功能主要由兩部分實(shí)現(xiàn):一部分是下位機(jī)對溫度、電流、電壓、轉(zhuǎn)速、位置等信息的采集和控制;另一部分是利用MATLAB GUI實(shí)現(xiàn)對監(jiān)控參數(shù)的控制操作、圖形顯示和數(shù)據(jù)處理功能。
圖1 云臺(tái)監(jiān)控系統(tǒng)整體結(jié)構(gòu)圖
系統(tǒng)的下位機(jī)部分負(fù)責(zé)監(jiān)控?cái)?shù)據(jù)的采集工作,將位置、轉(zhuǎn)速、電流、電壓和溫度等待監(jiān)控模擬量信息采集并送入DSP的ADC模塊,將待監(jiān)控?cái)?shù)據(jù)處理后,通過串行通信實(shí)時(shí)地將數(shù)據(jù)傳送回上位機(jī)進(jìn)行處理。驅(qū)控一體云臺(tái)控制器采用TMS320F28069 DSP作為主控芯片,片內(nèi)集成12位分辨率的16通道ADC轉(zhuǎn)換通道,非常適用于多模擬量采集系統(tǒng)。
下位機(jī)程序在CCS(Code Composer Studio)6.0集成開發(fā)環(huán)境下進(jìn)行開發(fā),通過對各功能函數(shù)的編寫,然后進(jìn)行編譯、調(diào)試、生成.out文件,并下載到DSP中。
系統(tǒng)的上位機(jī)是基于MATLAB GUI界面的集M控制算法文件和Modbus通訊協(xié)議模塊為一體的實(shí)時(shí)參數(shù)監(jiān)控系統(tǒng),主要負(fù)責(zé)對監(jiān)控?cái)?shù)據(jù)進(jìn)行處理和分析。通過調(diào)用MATLAB內(nèi)置的serial函數(shù),操作RS-232串口,并通過Modbus協(xié)議在云臺(tái)控制器與PC串口之間進(jìn)行實(shí)時(shí)通信,主要包括以下幾個(gè)模塊:
(1)串口通信。與下位機(jī)之間實(shí)現(xiàn)數(shù)據(jù)交換。
(2)GUI界面。界面設(shè)計(jì)以及對監(jiān)控參數(shù)進(jìn)行顯示并繪制動(dòng)態(tài)曲線和動(dòng)態(tài)模擬。
(3)監(jiān)控主程序和濾波算法。主要負(fù)責(zé)在回調(diào)函數(shù)中編寫控制云臺(tái)電機(jī)啟停、轉(zhuǎn)動(dòng)角度及發(fā)送串口數(shù)據(jù)等功能的程序編寫,并通過濾波算法來消除偶然脈沖對監(jiān)控到數(shù)據(jù)的影響。
MATLAB配置了串口通信API[2],提供了對串口進(jìn)行打開、關(guān)閉,以及串口參數(shù)設(shè)置等操作的一系列函數(shù)。利用這些函數(shù)可以選擇串口號(hào)、設(shè)置串口通信參數(shù)(波特率、數(shù)據(jù)位、停止位、校驗(yàn)位等)、進(jìn)行中斷控制、流控制。在配置控制器時(shí),用戶需要選擇通信模式和串口的通訊參數(shù),保證通信設(shè)備配置相同的通信模式和串口通訊參數(shù)。
建立函數(shù)的過程如下:
s=serial(‘com1’);%創(chuàng)建串口對象s,串口號(hào)為COM1
set(s,‘BaudRate’,9600,‘Parity’,‘even’,‘Stop?Bits’,1,‘DataBits’,8,‘TimerPeriod’,0.05);
%設(shè)置串口波特率為9600;偶校驗(yàn),一位停止位,8位數(shù)據(jù)位;定時(shí)器周期為0.05s
Modbus通訊協(xié)議[3]是一種主-從通訊機(jī)構(gòu),是世界上第一個(gè)用于工業(yè)現(xiàn)場的總線協(xié)議,它只定義了協(xié)議層,支持RS-232和RS-485電氣接口。常用的Modbus通訊協(xié)議有ASCII和RTU[4]兩種通信模式。一般來說,通訊數(shù)據(jù)量少且主要是文本的通訊采用ASCII模式,通訊數(shù)據(jù)量大而且是二進(jìn)制數(shù)值時(shí),多采用RTU模式,綜合考慮,本系統(tǒng)選用Modbus RTU模式作為通信協(xié)議。
Modbus RTU模式中,數(shù)據(jù)以幀的方式進(jìn)行傳輸,通信指令以8位二進(jìn)制數(shù)的形式傳遞。當(dāng)通訊命令由發(fā)送設(shè)備(主機(jī))發(fā)送至接收設(shè)備(從機(jī))時(shí),符合相應(yīng)地址碼的從機(jī)接收通訊命令,并根據(jù)功能碼及相關(guān)要求讀取信息,如果CRC校驗(yàn)無誤,則執(zhí)行相應(yīng)的任務(wù),然后把執(zhí)行結(jié)果(數(shù)據(jù))返送給主機(jī)。返回的信息中包括地址碼、功能碼、執(zhí)行后的數(shù)據(jù)以及CRC校驗(yàn)碼。如果CRC校驗(yàn)出錯(cuò)就不返回任何信息。
CRC-16校驗(yàn)碼多項(xiàng)式為X16+X15+X2+1,具體步驟如下:
unsigned int CRC16(unsigned char*Msg,unsigned int DataLen)%*Msg為待校驗(yàn)數(shù)據(jù)首地址,DataLen為待校驗(yàn)數(shù)據(jù)長度
{
unsigned char uchCRCHi=0xFF;
%高CRC字節(jié)初始化
unsigned char uchCRCLo=0xFF;
%低CRC字節(jié)初始化
unsigned int i; %CRC循環(huán)中的索引 while(Dat?
aLen--) %傳輸消息緩存區(qū)
{
i=uchCRCHi*Msg++;%計(jì)算CRC
uchCRCHi=uchCRCLo^auCRCHi[i];
uchCRCLo=auCRCLo[i];
}
return(uchCRCHi<< 8|uchCRCLo);
}
監(jiān)控系統(tǒng)的界面設(shè)計(jì)應(yīng)遵循布局合理、清楚直觀、方便用戶操作等原則,具體的界面設(shè)計(jì)如圖2所示。系統(tǒng)的GUI界面[6]主要由監(jiān)控?cái)?shù)據(jù)顯示模塊、參數(shù)設(shè)置模塊、實(shí)時(shí)位置動(dòng)態(tài)模擬模塊、故障診斷模塊、實(shí)時(shí)曲線繪制模塊等組成。
(1)監(jiān)控?cái)?shù)據(jù)顯示與參數(shù)設(shè)置模塊。數(shù)據(jù)顯示面板主要將上位機(jī)采集到的溫度、電壓、電流、轉(zhuǎn)速、位置等信息顯示在GUI界面中,方便使用者進(jìn)行觀察;參數(shù)設(shè)置面板主要包含串口的設(shè)置、電機(jī)啟停開關(guān)和轉(zhuǎn)速的設(shè)定。
(2)實(shí)時(shí)位置動(dòng)態(tài)模擬及故障診斷模塊。由于云臺(tái)監(jiān)控系統(tǒng)需要得知云臺(tái)轉(zhuǎn)動(dòng)的實(shí)時(shí)位置,因此,用兩個(gè)表盤將云臺(tái)水平轉(zhuǎn)向和俯仰轉(zhuǎn)向的實(shí)時(shí)運(yùn)動(dòng)位置以角度的形式動(dòng)態(tài)模擬出來。在系統(tǒng)正常運(yùn)行時(shí),故障診斷模塊的error顯示“正常運(yùn)行”,當(dāng)運(yùn)行時(shí)錯(cuò)誤發(fā)生次數(shù)達(dá)到一定值后,會(huì)在error區(qū)顯示哪個(gè)監(jiān)控參數(shù)出現(xiàn)錯(cuò)誤,進(jìn)行系統(tǒng)故障自診斷。
(3)實(shí)時(shí)曲線繪制模塊。曲線繪制模塊主要負(fù)責(zé)對云臺(tái)的水平實(shí)時(shí)轉(zhuǎn)速、俯仰實(shí)時(shí)轉(zhuǎn)速、水平電機(jī)相電流、俯仰電機(jī)相電流進(jìn)行實(shí)時(shí)監(jiān)測。通過在MATLAB GUI中添加axes控件通過曲線繪制來顯示水平和俯仰方向的實(shí)時(shí)轉(zhuǎn)速和實(shí)時(shí)電流的動(dòng)態(tài)變化。在axes()函數(shù)中設(shè)置當(dāng)前曲線繪制坐標(biāo),再調(diào)用set()函數(shù)完成曲線的繪制。
圖2 二自由度云臺(tái)參數(shù)監(jiān)測系統(tǒng)界面設(shè)計(jì)
由該監(jiān)控系統(tǒng)的設(shè)計(jì)要求,需要實(shí)時(shí)監(jiān)控云臺(tái)的水平實(shí)時(shí)轉(zhuǎn)速,俯仰實(shí)時(shí)轉(zhuǎn)速,水平實(shí)時(shí)位置,俯仰實(shí)時(shí)位置,母線電壓,電路參考電壓,水平電機(jī)v相電流,水平電機(jī)u相電流,俯仰電機(jī)v相電流,俯仰電機(jī)u相電流,溫度等數(shù)據(jù)。
本系統(tǒng)采用的是基于MATLAB GUI的平臺(tái)上編寫的上位機(jī)程序,其中有很多庫函數(shù)可以直接調(diào)用,因此編寫很方便、快捷。只需要在GUI面板中設(shè)計(jì)好界面,再在每個(gè)模塊中編寫相應(yīng)功能的回調(diào)函數(shù)即可。
為了濾掉信號(hào)經(jīng)過模擬電路時(shí)的那些偶然的脈沖波或者周期性波[8],減小采集到信號(hào)的誤差,針對該監(jiān)控系統(tǒng)采用限幅濾波法,該濾波方法能有效克服因偶然因素引起的脈沖干擾。濾波程序如下:
/*A值可根據(jù)實(shí)際情況調(diào)整,Value為有效值,NewValue為當(dāng)前采樣值,濾波程序返回有效的實(shí)際值*/
#define FILTER.
int Filter()
{
int NewValue;
NewValue=Get_AD();
if(((NewValue-Value)> FILTER_A)||((Value-NewVal?ue)>FILTER_A))
return Value;
else
return NewValue;
}
圖3 監(jiān)控程序流程圖
圖4 串口測試數(shù)據(jù)傳輸流程圖
為了測試監(jiān)控系統(tǒng)的實(shí)時(shí)通信效果,利用MAT?LAB GUI制作了一個(gè)簡單的通信測試[5]界面,如圖5所示。監(jiān)控系統(tǒng)的串口測試流程圖如圖4所示。經(jīng)測試,該系統(tǒng)的上位機(jī)可以和下位機(jī)進(jìn)行實(shí)時(shí)通信。當(dāng)通過監(jiān)測系統(tǒng)給下位機(jī)發(fā)送讀取水平轉(zhuǎn)速指令(01 03 00 00 00 01 84 0A)后,下位機(jī)返回?cái)?shù)據(jù)(01 03 02 00 C8 B9 D2),其中00 C8為返回?cái)?shù)據(jù),轉(zhuǎn)換為二進(jìn)制表示水平轉(zhuǎn)速為200rpm,通過測速儀測得水平電機(jī)的轉(zhuǎn)速為197rpm,結(jié)果表明監(jiān)控系統(tǒng)的通信正常。
將上位機(jī)和下位機(jī)連接完畢,進(jìn)入測試程序,打開GUI監(jiān)控界面并打開串口,點(diǎn)擊開始監(jiān)控按鈕,監(jiān)測系統(tǒng)的實(shí)驗(yàn)效果如圖6所示。
圖5 串口通信GUI測試界面
圖6 監(jiān)控功能測試界面
結(jié)果表明,監(jiān)控系統(tǒng)可以將采集到的監(jiān)控?cái)?shù)據(jù)實(shí)時(shí)顯示在面板上,且實(shí)時(shí)位置動(dòng)態(tài)模擬面板和實(shí)時(shí)曲線繪制面板均正常顯示,監(jiān)控系統(tǒng)各模塊工作正常。此測試為云臺(tái)在低速運(yùn)行時(shí)的數(shù)據(jù)采集,實(shí)驗(yàn)基本上達(dá)到了所要實(shí)現(xiàn)的效果,監(jiān)測結(jié)果精確。
本文基于MATLAB GUI的串口通信方法,以Mod?bus為基礎(chǔ)通信協(xié)議,設(shè)計(jì)了二自由度云臺(tái)的參數(shù)監(jiān)測系統(tǒng)。選用MATLAB GUI作為界面開發(fā)的工具是合適的,雖然其界面開發(fā)和數(shù)據(jù)采集的功能相對較簡單。但是,在一般的界面開發(fā)和普通功能的串口通信開發(fā)中,GUI的控制算法寫在M文件中,便于使用人員進(jìn)行修改,且GUI組件使用方便快捷,編程簡單易懂,很方便新手學(xué)習(xí)。實(shí)驗(yàn)結(jié)果證明了該GUI監(jiān)控系統(tǒng)界面豐富、功能完善,且運(yùn)行穩(wěn)定可靠。