基于ZigBee Mesh網(wǎng)絡(luò)的無線串口設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:利用ZigBee技術(shù),組成具有可“自愈”能力的Mesh網(wǎng)絡(luò),實(shí)現(xiàn)無線串口通信。ZigBee技術(shù)的Mesh網(wǎng)絡(luò),單個(gè)模塊的傳輸距離在10~100 m之間,加功放在1 km以上。傳輸速率為250 kb·s-1,完全能滿足一般用戶的要求。
關(guān)鍵詞:ZigBee技術(shù);Mesh網(wǎng)絡(luò);“自愈”能力;無線串口
RS-232串行通信是異步通信中應(yīng)用最廣的標(biāo)準(zhǔn)總線,在沒有Modem的情況下,一般傳輸距離限制在15 m內(nèi),使得遠(yuǎn)距離串口通信受到較大限制。無線技術(shù)是當(dāng)今設(shè)備通信中取代有線技術(shù)的必然趨勢(shì)。
本文利用ZigBee無線技術(shù)組成Mesh網(wǎng)絡(luò)實(shí)施串口通信,網(wǎng)絡(luò)中任意兩個(gè)模塊的傳輸距離可達(dá)100 m,如果模塊有功放,傳輸距離可上升至1.5 km。因?yàn)镸esh網(wǎng)絡(luò)的多跳性,數(shù)據(jù)能夠多跳傳輸,所以數(shù)據(jù)的傳輸距離取決于跳數(shù)的多少,如圖1所示S4經(jīng)過3跳把數(shù)據(jù)傳送到S1,如果每一跳距離是1 km,則傳輸距離達(dá)3 km,這有效地解決了有線串口傳送的距離限制問題。同時(shí),ZigBee網(wǎng)絡(luò)中最大的數(shù)傳速率為250 kb·s-1,完全能滿足一般用戶的要求。
1 ZigBee無線串口設(shè)計(jì)原理
1.1 節(jié)點(diǎn)入網(wǎng)后的初始化
根據(jù)ZigBee技術(shù)的要求,ZigBee網(wǎng)絡(luò)中存在3種角色,協(xié)調(diào)器、路由和終端設(shè)備,協(xié)調(diào)器負(fù)責(zé)建立網(wǎng)絡(luò),路由器負(fù)責(zé)路由,終端設(shè)備只能收發(fā)數(shù)據(jù)。協(xié)調(diào)器和路由統(tǒng)稱為全功能設(shè)備(FFD)。
在此,所有的設(shè)備都統(tǒng)稱為節(jié)點(diǎn)(node),只是所扮演的角色不一樣,每個(gè)節(jié)點(diǎn)都人為地在程序里給它們?nèi)∶?,如?1、02、03表示節(jié)點(diǎn)1、節(jié)點(diǎn)2、節(jié)點(diǎn)3,00保留給協(xié)調(diào)器。
協(xié)調(diào)器(00)加電后組建網(wǎng)絡(luò),各節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)并加入網(wǎng)絡(luò),根據(jù)本文的設(shè)計(jì),節(jié)點(diǎn)在加入網(wǎng)絡(luò)后都會(huì)自動(dòng)地向網(wǎng)絡(luò)中的其他節(jié)點(diǎn)廣播其16位網(wǎng)絡(luò)地址和名字,網(wǎng)絡(luò)中的其他節(jié)點(diǎn)接收到這廣播數(shù)據(jù)后將該數(shù)據(jù)儲(chǔ)存在數(shù)組NodeAddress[]中,然后以單播的方式向新加入節(jié)點(diǎn)反饋?zhàn)约旱木W(wǎng)絡(luò)地址和名字,新節(jié)點(diǎn)也將該數(shù)據(jù)保存在數(shù)組NodeAddress[]中,從而保證網(wǎng)絡(luò)中的每個(gè)節(jié)點(diǎn)都知道其他節(jié)點(diǎn)的網(wǎng)絡(luò)地址和名字。具體流程如圖2所示。
1.2 串口數(shù)據(jù)的格式
當(dāng)節(jié)點(diǎn)串口有數(shù)據(jù)要發(fā)送的時(shí)候,必須要指明,數(shù)據(jù)的發(fā)送目的地,所以從串口輸入的數(shù)據(jù)必須滿足一定的格式,本設(shè)計(jì)規(guī)定該格式為:××……;××為要發(fā)送的目的節(jié)點(diǎn)名字,……為要發(fā)送的數(shù)據(jù)。譬如向節(jié)點(diǎn)01發(fā)送數(shù)據(jù)“ZigBee”,格式為:01 ZigBee。因?yàn)楣?jié)點(diǎn)在加入網(wǎng)絡(luò)的時(shí)候,已經(jīng)建立了名字和網(wǎng)絡(luò)地址的對(duì)應(yīng)表,所以發(fā)送節(jié)點(diǎn)會(huì)自動(dòng)將01解釋為網(wǎng)絡(luò)地址0x0023,從而將數(shù)據(jù)準(zhǔn)確地發(fā)送到節(jié)點(diǎn)01上。
2 無線串口硬件設(shè)計(jì)
2.1 系統(tǒng)框圖
串口接收、發(fā)送系統(tǒng)可以是PC或者其他嵌入式系統(tǒng),ZigBee控制系統(tǒng)負(fù)責(zé)組網(wǎng)和接收發(fā)送數(shù)據(jù)。這里主要研究ZigBee控制系統(tǒng)。
2.2 芯片選擇
選擇TI公司的2.4 GHz片上系統(tǒng)解決方案CC2530。CC2530是用于IEEES02.15.4、ZigBee和RF4CE應(yīng)用的一個(gè)片上系統(tǒng)解決方案。它能以較低的總材料成本建立強(qiáng)大的網(wǎng)絡(luò)節(jié)點(diǎn)。CC2530結(jié)合了領(lǐng)先的RF收發(fā)器的優(yōu)良性能,業(yè)界標(biāo)準(zhǔn)的增強(qiáng)型8051CPU,使操作更容易,具備不同的運(yùn)行模式,尤其適應(yīng)超低功耗要求的系統(tǒng)。
2.3 無線串口電路設(shè)計(jì)
CC2530中的P0_1和P0_2為TTL電平的串口接收發(fā)送管腳,可直接與TTL電平的串口系統(tǒng)相連,如果與PC機(jī)連,要加上MAX232模塊??梢娫摕o線串口與其他系統(tǒng)的兼容性很強(qiáng),而且連接方便。
3 軟件設(shè)計(jì)
3.1 ZigBee協(xié)議棧簡介
ZigBee協(xié)議棧以IEEE 802.15.4標(biāo)準(zhǔn)為基礎(chǔ),IEEES02.15.4工作組主要負(fù)責(zé)制定物理層(PHY)、媒體訪問控制層(MAC)。ZigBee聯(lián)盟提供了網(wǎng)絡(luò)層和應(yīng)用層(APL)框架的設(shè)計(jì)。其中,應(yīng)用層的框架包括了應(yīng)用支持子層(APS)、ZigBee設(shè)備對(duì)象(ZDO)及由制造商制定的應(yīng)用對(duì)象。如圖5所示。
采用TI公司的Z—Stack 07協(xié)議棧實(shí)現(xiàn)ZigBee協(xié)議。Z—Stack 07協(xié)議棧,對(duì)之前幾個(gè)版本的協(xié)議進(jìn)行了改進(jìn),使得網(wǎng)絡(luò)穩(wěn)定性更強(qiáng),組網(wǎng)更靈活。
3.2 主體程序流程與任務(wù)
TI的Z—Stack 07/PRO協(xié)議棧,對(duì)應(yīng)的開發(fā)環(huán)境為IAR 7.51A。在安裝完Z—Stack 07協(xié)議棧之后,用IAR打開工程文件GenericApp,GenericApp是TI公司專門為開發(fā)者提供的開發(fā)模板,在此借助該模板實(shí)現(xiàn)無線串口。
打開GenericApp后,如圖6所示,App文件夾即為應(yīng)用層代碼文件夾。利用模板只需在GenericApp.c中加入實(shí)現(xiàn)代碼,就可以實(shí)現(xiàn)無線串口。
Z—Stack采用操作系統(tǒng)的思想來構(gòu)建,采用任務(wù)輪循機(jī)制,當(dāng)各層初始化之后,系統(tǒng)進(jìn)入低功耗模式,當(dāng)任務(wù)有事件發(fā)生時(shí),喚醒系統(tǒng),開始進(jìn)入中斷處理任務(wù)事件,結(jié)束后繼續(xù)進(jìn)入低功耗模式。如果同時(shí)有幾個(gè)事件發(fā)生,判斷優(yōu)先級(jí),逐次處理事件。Z—Stack的工作流程如圖7所示。
3.3 無線串口程序流程
因?yàn)閆—Stack是采用任務(wù)輪循機(jī)制,GenericApp是屬于其中的一個(gè)任務(wù),在文件GenericApp.c中的任務(wù)初始化函數(shù)GenericApp_Init()中添加串口初始化代碼,在GenericApp_ProcessEven()函數(shù)中添加無線串口收發(fā)事件Serial_RecEven和Serial_TranEven的處理函數(shù)。圖8和圖9是GenericApp_Init()函數(shù)流程圖和GenericApp_ProcessEven()函數(shù)流程圖。
圖中初始化NV Flash是用以儲(chǔ)存其他節(jié)點(diǎn)網(wǎng)絡(luò)地址名字對(duì)應(yīng)表。
當(dāng)節(jié)點(diǎn)上電加入ZigBee網(wǎng)絡(luò)后,便會(huì)執(zhí)行GenericApp_Init()函數(shù),初始化串口,并向網(wǎng)絡(luò)中的其他節(jié)點(diǎn)以廣播的方式發(fā)送其網(wǎng)絡(luò)地址和名字。
當(dāng)網(wǎng)絡(luò)中的其他節(jié)點(diǎn)接收到數(shù)據(jù)時(shí),便會(huì)觸發(fā)接收數(shù)據(jù)事件,GenericApp_ProcessEven()函數(shù)判斷是串口接收數(shù)據(jù)命令還是儲(chǔ)存網(wǎng)絡(luò)地址命令,如果是前者,便將數(shù)據(jù)寫到串口;如果是后者則先判斷是否來自于廣播方式發(fā)送來的數(shù)據(jù):若是則儲(chǔ)存該網(wǎng)絡(luò)地址和名字,并且以單播的方式回饋本節(jié)點(diǎn)的網(wǎng)絡(luò)地址,保證網(wǎng)絡(luò)中的各個(gè)節(jié)點(diǎn)都知道其他節(jié)點(diǎn)的地址和名字;若不是就儲(chǔ)存該網(wǎng)絡(luò)地址和名字,不用反饋本節(jié)點(diǎn)的網(wǎng)絡(luò)地址和名字。
當(dāng)GenericApp_ProcessEven()函數(shù)檢測(cè)到Serial_TranEven事件發(fā)生時(shí),便讀串口并將數(shù)據(jù)按照約定的格式發(fā)送出去。
4 實(shí)際測(cè)試
4.1 測(cè)試1
無功放ZigBee模塊W00與W02,如圖10~圖12所示。
實(shí)驗(yàn)環(huán)境:足球場(chǎng),可視距離100 m。實(shí)驗(yàn)結(jié)果如圖12所示。
Node:02 ShortAddress:0x3595是W02加入網(wǎng)絡(luò)后自動(dòng)向W00發(fā)送網(wǎng)絡(luò)地址和名字。因?yàn)閃00是協(xié)調(diào)器,默認(rèn)地址為0x00,已預(yù)存在各模塊中。
4.2 測(cè)試2
無功放ZigBee模塊W00,W02,W03和W04,實(shí)驗(yàn)環(huán)境:各大樓之間。如圖13所示。
W00與W02、W03能直接通信,W00經(jīng)過兩跳后可與W04,通信,W02經(jīng)過兩跳后可以與W04通信。實(shí)驗(yàn)結(jié)果截圖如14所示。
Node:04 ShortAddress:0xE805是W04入網(wǎng)后向W02發(fā)送的網(wǎng)絡(luò)地址和名字,Node:02 ShortAddress:0x3595是W02節(jié)點(diǎn)回饋的網(wǎng)絡(luò)地址和名字。由實(shí)驗(yàn)可知,基于ZigBee的無線串口通信,數(shù)據(jù)傳輸穩(wěn)定、可靠,有效解決長距離串口通信問題。
5 Mesh網(wǎng)絡(luò)無線串口的特點(diǎn)
(1)能夠遠(yuǎn)距離串口通信。通信距離取決于單個(gè)節(jié)點(diǎn)的有效傳輸距離和跳數(shù),一般無功放模塊傳輸距離為100 m,經(jīng)過5跳可以傳輸500 m的距離。如果加上功放,單個(gè)節(jié)點(diǎn)的傳輸距離為1.5 km,5跳為7.5 km。缺點(diǎn)是加上功放,成本增加。
(2)Mesh網(wǎng)絡(luò)具有自愈能力,當(dāng)某條路徑被切斷,節(jié)點(diǎn)會(huì)自動(dòng)尋找另外的路徑傳輸數(shù)據(jù),如圖15所示。
(3)兼容性好,易安裝。簡單的串口線連接。由圖4可知,從模塊中引出4根TTL電平的串口線,直接可以與嵌入式系統(tǒng)連接,或者加上MAX232便可以與PC連接。
6 結(jié)束語
利用ZigBee無線技術(shù)組成Mesh網(wǎng)絡(luò)實(shí)施串口通信,無線通信距離取決于單跳距離和跳數(shù),而默認(rèn)最大跳數(shù)為20,但多跳的出現(xiàn)會(huì)導(dǎo)致數(shù)據(jù)延時(shí),出現(xiàn)誤碼。建議跳數(shù)控制在5跳之內(nèi),此時(shí)數(shù)據(jù)傳輸穩(wěn)定、時(shí)延短、誤碼率低,能有效地解決有線串口距離限制的問題。