基于ZigBee技術(shù)的角度同步采集傳輸系統(tǒng)設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
0 引言
關(guān)節(jié)臂式測(cè)量機(jī)廣泛用于模具、汽車零部件、鈑金件、塑料制品、木制品、雕塑等的快速檢測(cè)和逆向設(shè)計(jì)。其工作機(jī)理是:手持關(guān)節(jié)臂,帶動(dòng)測(cè)量機(jī)頂端的攝像頭或探針掃描至目標(biāo)探測(cè)點(diǎn),根據(jù)測(cè)量機(jī)各段臂長(zhǎng)和各個(gè)關(guān)節(jié)所轉(zhuǎn)過(guò)的角度可求取出目標(biāo)探測(cè)點(diǎn)的位置或坐標(biāo)。測(cè)量機(jī)的工作關(guān)鍵在于讀取和及時(shí)傳輸各個(gè)關(guān)節(jié)的角度信息。
普通的關(guān)節(jié)臂式測(cè)量機(jī)在每個(gè)關(guān)節(jié)內(nèi)都安裝有一個(gè)角度編碼盤(pán),角度信號(hào)通過(guò)連接在關(guān)節(jié)臂內(nèi)的電纜線傳輸至工控機(jī)。由于編碼器使用有線方式傳輸角度信息,臂內(nèi)電纜多,連續(xù)旋轉(zhuǎn)多圈時(shí)臂內(nèi)電纜將擰成“麻花”,使得測(cè)量機(jī)關(guān)節(jié)不能無(wú)限旋轉(zhuǎn)。
本文所設(shè)計(jì)的“基于ZigBee技術(shù)的角度同步采集傳輸系統(tǒng)”,采用Microchip公司的PIC18LF4620微控制器和Chipcon公司的CC2420射頻芯片共同組成無(wú)線節(jié)點(diǎn),置于關(guān)節(jié)臂式測(cè)量機(jī)的每個(gè)關(guān)節(jié)內(nèi),實(shí)現(xiàn)角度信號(hào)的讀取和無(wú)線傳輸。在工控機(jī)側(cè),也安裝有一個(gè)無(wú)線節(jié)點(diǎn),用于接收這些無(wú)線傳輸?shù)慕嵌刃畔⒉⑸蟼鹘o工控機(jī)。信號(hào)傳輸?shù)臒o(wú)線化使得測(cè)量機(jī)的關(guān)節(jié)可以無(wú)限制旋轉(zhuǎn)。下面主要以六關(guān)節(jié)臂式測(cè)量機(jī)為例,介紹該系統(tǒng)的設(shè)計(jì)方案。
1. 系統(tǒng)方案設(shè)計(jì)
整個(gè)系統(tǒng)實(shí)質(zhì)上為一個(gè)由7個(gè)無(wú)線節(jié)點(diǎn)組成的星形無(wú)線網(wǎng)絡(luò),如圖1所示。安裝在測(cè)量機(jī)6個(gè)關(guān)節(jié)內(nèi)的無(wú)線節(jié)點(diǎn)分別和本關(guān)節(jié)內(nèi)的角度編碼盤(pán)相連,采集編碼盤(pán)信息,并將提取出來(lái)的有效角度信息無(wú)線發(fā)送出去,構(gòu)成星形網(wǎng)絡(luò)的6個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)(以下稱為子節(jié)點(diǎn))。作為網(wǎng)絡(luò)協(xié)調(diào)器的無(wú)線節(jié)點(diǎn)(以下稱為主節(jié)點(diǎn))和工控機(jī)相連,采用時(shí)分復(fù)用的方式接收6個(gè)子節(jié)點(diǎn)無(wú)線傳輸?shù)慕嵌刃畔?,?jīng)整理后通過(guò)串口發(fā)送給工控機(jī)。
500)this.style.width=500;" border="0" />
每個(gè)無(wú)線節(jié)點(diǎn)由控制模塊和射頻模塊組成。控制模塊主芯片是PIC18LF4620,最高工作頻率為40MHz,內(nèi)含64kBytes的flash空間和4kBytes的RAM空間,外圍控制部分包括定時(shí)器模塊,捕捉/比較模塊,A/D轉(zhuǎn)換模塊,SPI接口和EUSART串口等,完成系統(tǒng)的控制和處理功能。射頻模塊用于實(shí)現(xiàn)信息無(wú)線收發(fā),主芯片為CC2420,符合2.4 GHz IEEE 802.15.4協(xié)議,無(wú)線收發(fā)速率可達(dá)250kbps,無(wú)線收發(fā)功率僅為幾十毫瓦。
2. 系統(tǒng)硬件結(jié)構(gòu)及連接圖
系統(tǒng)的硬件連接圖如圖2所示,元件主要包括射頻芯片CC2420、微控制器PIC18LF4620和串口電平轉(zhuǎn)換芯片MAX3221。對(duì)外提供的接口為RS232/485串口(圖2中以RS232為例)。每個(gè)無(wú)線節(jié)點(diǎn)內(nèi)部,控制模塊(PIC18LF4620)和射頻模塊(CC2420)通過(guò)SPI接口連接,主要包括串行數(shù)據(jù)輸出引腳(SDO)、 串行數(shù)據(jù)輸入(SDI)引腳和串行時(shí)鐘(SCK)引腳。對(duì)于主節(jié)點(diǎn),微控制器的串口輸出引腳(TX)和串口輸入引腳(RX)經(jīng)由電平轉(zhuǎn)換芯片MAX3221和工控機(jī)相連。對(duì)于子節(jié)點(diǎn),微控制器通常通過(guò)RS232/RS485串口和編碼盤(pán)相連,具體接口視編碼盤(pán)型號(hào)而定。
500)this.style.width=500;" border="0" />
3. 組網(wǎng)過(guò)程
7個(gè)無(wú)線節(jié)點(diǎn)組成一個(gè)星形無(wú)線網(wǎng)絡(luò),以主節(jié)點(diǎn)為協(xié)調(diào)器,6個(gè)子節(jié)點(diǎn)為網(wǎng)絡(luò)節(jié)點(diǎn)。組網(wǎng)的過(guò)程可以描述如下:
(1) 將主節(jié)點(diǎn)和所有子節(jié)點(diǎn)的無(wú)線收發(fā)頻率置于同一信道,確保該信道上無(wú)其它無(wú)線設(shè)備。
(2) 主節(jié)點(diǎn)無(wú)線發(fā)送組網(wǎng)廣播,告知同信道的所有處于接收狀態(tài)的無(wú)線設(shè)備(各子節(jié)點(diǎn))自己為網(wǎng)絡(luò)協(xié)調(diào)器,并告知該網(wǎng)絡(luò)的PAN ID,以及主節(jié)點(diǎn)自己的64位MAC地址。同時(shí),設(shè)定廣播報(bào)文的最大重傳次數(shù),并開(kāi)啟廣播超時(shí)定時(shí)器。
(3) 各個(gè)子節(jié)點(diǎn)在接收到廣播之后回應(yīng)一個(gè)網(wǎng)絡(luò)連接請(qǐng)求。
(4) 當(dāng)主節(jié)點(diǎn)收到子節(jié)點(diǎn)的網(wǎng)絡(luò)連接請(qǐng)求時(shí),主節(jié)點(diǎn)給該子節(jié)點(diǎn)分配16位的網(wǎng)絡(luò)地址。
(5) 定時(shí)器超時(shí),主節(jié)點(diǎn)檢查是否收到了所有子節(jié)點(diǎn)的網(wǎng)絡(luò)連接請(qǐng)求。“是”則停止組網(wǎng)廣播,組網(wǎng)成功?!胺瘛眲t重傳組網(wǎng)廣播,重傳次數(shù)減1。
(6) 重復(fù)步驟(5),若重傳次數(shù)已經(jīng)自減為0,停止組網(wǎng)廣播,組網(wǎng)結(jié)束,并告知工控機(jī)本次組網(wǎng)失敗。
4. 數(shù)據(jù)傳輸
4.1 幀格式定義
在本文所設(shè)計(jì)的星形無(wú)線網(wǎng)絡(luò)中,共分為物理層、MAC層和應(yīng)用層3層,各層的幀格式如圖3所示。網(wǎng)間傳輸?shù)男畔膸愋蜕戏譃?種,分別為數(shù)據(jù)幀、確認(rèn)幀和命令幀,組網(wǎng)廣播幀和角度采集廣播歸屬于命令幀。
500)this.style.width=500;" border="0" />
注:Frame Length為物理層幀長(zhǎng)度;Frame Control域的低3位指示該信息的幀類型;Sequence NO.為序列號(hào);FCS為校驗(yàn)域。Command Type為命令類型,指示收到命令幀之后無(wú)線節(jié)點(diǎn)所需進(jìn)行的操作。
4.2 TDMA時(shí)隙分配和傳輸協(xié)議
主節(jié)點(diǎn)和各子節(jié)點(diǎn)采取時(shí)分復(fù)用TDMA的方式進(jìn)行通信,每個(gè)子節(jié)點(diǎn)在指定的時(shí)隙內(nèi)和主節(jié)點(diǎn)進(jìn)行信息交互。在本文所設(shè)計(jì)的星型無(wú)線網(wǎng)絡(luò)中,共劃分有8個(gè)時(shí)隙,如圖4所示。
500)this.style.width=500;" border="0" />
前6個(gè)時(shí)隙內(nèi),主節(jié)點(diǎn)依次對(duì)各子節(jié)點(diǎn)進(jìn)行輪詢,獲取角度信息并對(duì)其進(jìn)行校驗(yàn)。后2個(gè)時(shí)隙用于重傳,當(dāng)1個(gè)或多個(gè)子節(jié)點(diǎn)的信息丟失或校驗(yàn)發(fā)生錯(cuò)誤時(shí),采取“先丟失/出錯(cuò),先重傳”的方式進(jìn)行重傳。
每個(gè)時(shí)隙內(nèi),主節(jié)點(diǎn)發(fā)送“開(kāi)始傳輸角度信息”的命令幀至指定子節(jié)點(diǎn),并啟動(dòng)時(shí)隙超時(shí)定時(shí)器。子節(jié)點(diǎn)在接收到該命令幀后,立刻將從編碼盤(pán)信息中提取出的有效角度信息封裝成幀,經(jīng)由射頻模塊發(fā)送給主節(jié)點(diǎn)。當(dāng)定時(shí)器超時(shí)時(shí),主節(jié)點(diǎn)若還未收到該子節(jié)點(diǎn)的角度信息幀,或收到角度信息幀但校驗(yàn)錯(cuò)誤,則記錄該子節(jié)點(diǎn)的編號(hào)(以便在重傳時(shí)隙內(nèi)令其重發(fā)),并轉(zhuǎn)入輪詢下一子節(jié)點(diǎn)。若接收到正確報(bào)文,則直接轉(zhuǎn)入下一子節(jié)點(diǎn)的輪詢。
4.3 子節(jié)點(diǎn)采集時(shí)刻同步
組網(wǎng)完成之后,主節(jié)點(diǎn)無(wú)線發(fā)送角度采集廣播給各個(gè)子節(jié)點(diǎn),指示其以一定頻率采集編碼盤(pán)信息,提取并發(fā)送有效的角度信息。由于主節(jié)點(diǎn)以無(wú)線方式發(fā)送角度采集廣播,該廣播到達(dá)各個(gè)子節(jié)點(diǎn)的時(shí)間可能并不一致。若子節(jié)點(diǎn)在收到該廣播后立刻開(kāi)始讀取編碼盤(pán)信息,子節(jié)點(diǎn)所讀到并提取的關(guān)節(jié)角度并不是同一時(shí)刻點(diǎn)的,導(dǎo)致測(cè)量機(jī)無(wú)法準(zhǔn)確工作,所以需要有“子節(jié)點(diǎn)采集時(shí)刻同步”的環(huán)節(jié)。
我們采取的做法是:在組網(wǎng)完成之后,主節(jié)點(diǎn)發(fā)送角度采集廣播之前, 6個(gè)子節(jié)點(diǎn)逐一與主節(jié)點(diǎn)進(jìn)行信息交互,子節(jié)點(diǎn)求取出信息幀的空中傳輸時(shí)間ti(i為子節(jié)點(diǎn)的編號(hào),i=1,2…6;)。當(dāng)所有子節(jié)點(diǎn)接收到主節(jié)點(diǎn)發(fā)送的角度采集廣播后,分別延遲(T – ti)時(shí)間再采集編碼盤(pán)信息,其中T為常數(shù),T>max[t1, t2, …t6]。那么,從主節(jié)點(diǎn)發(fā)送角度采集廣播的那一時(shí)刻開(kāi)始,各子節(jié)點(diǎn)都經(jīng)過(guò)了[ti +(T – ti)] = T時(shí)間后讀取編碼盤(pán)信息,實(shí)現(xiàn)了子節(jié)點(diǎn)采集時(shí)刻同步。
求取信息幀空中傳輸時(shí)間ti的具體過(guò)程如圖5所示。子節(jié)點(diǎn)i在Ti1時(shí)刻發(fā)送一個(gè)“請(qǐng)求時(shí)間校正幀”給主節(jié)點(diǎn),主節(jié)點(diǎn)在Ti2時(shí)刻收到該幀,并于Ti3時(shí)刻回復(fù)第一個(gè)應(yīng)答幀,應(yīng)答幀的內(nèi)容為時(shí)刻Ti2。子節(jié)點(diǎn)在Ti4時(shí)刻收到應(yīng)答幀,獲得時(shí)間Ti2。主節(jié)點(diǎn)在Ti3時(shí)刻后任意延遲一段時(shí)間發(fā)送第二個(gè)應(yīng)答幀,應(yīng)答幀的內(nèi)容為時(shí)刻Ti3,使子節(jié)點(diǎn)能在某時(shí)刻獲取時(shí)間Ti3。
500)this.style.width=500;" border="0" />
注:在此我們假定,信息幀由主節(jié)點(diǎn)發(fā)送至子節(jié)點(diǎn)需要的空中傳輸時(shí)間和信息幀由子節(jié)點(diǎn)發(fā)送至主節(jié)點(diǎn)需要的空中傳輸時(shí)間相同且穩(wěn)定。且信息幀長(zhǎng)度等于主節(jié)點(diǎn)發(fā)送的“角度采集廣播幀”長(zhǎng)度。
假設(shè)主節(jié)點(diǎn)的時(shí)鐘超前子節(jié)點(diǎn)△Ti,信息幀的空中傳輸時(shí)間為ti,可得:
Ti2 = Ti1 + △Ti + ti ①
Ti4 = Ti3 - △Ti + ti ②
由式①和②聯(lián)立可得:
△Ti = (Ti2 - Ti1 - Ti4 + Ti3)/2
ti = (Ti2 - Ti1 + Ti4 - Ti3)/2
5. 主節(jié)點(diǎn)和工控機(jī)的通信
主節(jié)點(diǎn)和工控機(jī)采用RS-232 串行數(shù)據(jù)傳輸,串行口通信方式為異步串行通信,速率為19200bps,信息格式為1位開(kāi)始位、8 位數(shù)據(jù)位、1個(gè)停止位、無(wú)奇偶校驗(yàn)位,采用中斷方式進(jìn)行數(shù)據(jù)傳輸。以下是串口初始化程序片斷:
void ConsoleInit(void)
{
#if defined(USART_USE_BRGH_HIGH)
TXSTA = 0x24; //設(shè)置串口發(fā)送狀態(tài)寄存器
#else
TXSTA = 0x20;
#endif
RCSTA = 0x90; //設(shè)置串口接收狀態(tài)寄存器
// SPBRG_VAL = CLOCK_FREQ/BAUD_RATE/64 – 1,BAUD_RATE=19200bps
SPBRG = SPBRG_VAL;
TXIE = 1; //默認(rèn)情況下串口處于發(fā)送狀態(tài),使能發(fā)送中斷
TXIP = 1;
//RCIE = 1; //若需要執(zhí)行串口接收,使能發(fā)送中斷
//RCIP = 1;
}
6. 結(jié)論
將信息傳輸無(wú)線化,可免去關(guān)節(jié)臂式測(cè)量機(jī)的臂內(nèi)電纜線,實(shí)現(xiàn)關(guān)節(jié)的無(wú)限旋轉(zhuǎn)。本文設(shè)計(jì)的“基于ZigBee技術(shù)的角度同步采集傳輸系統(tǒng)”的無(wú)線硬件設(shè)計(jì)、軟件設(shè)計(jì)解決方案經(jīng)測(cè)試運(yùn)行穩(wěn)定,無(wú)線通信誤碼率低、可靠性高、安全性好。在室內(nèi)測(cè)試環(huán)境下,無(wú)線收發(fā)速率可以穩(wěn)定達(dá)到18kbps,重傳后誤碼率不高于10¬-5數(shù)量級(jí).
本文作者創(chuàng)新點(diǎn):將ZigBee無(wú)線通信技術(shù)與機(jī)械測(cè)量相結(jié)合,設(shè)計(jì)了一套基于ZigBee技術(shù)的角度同步采集傳輸系統(tǒng),應(yīng)用在關(guān)節(jié)臂式測(cè)量機(jī)上,實(shí)現(xiàn)了關(guān)節(jié)的無(wú)限旋轉(zhuǎn)。