孫冬冬 王 玲 山東科技大學(xué)
?
NRF24L01組網(wǎng)方式
孫冬冬 王 玲 山東科技大學(xué)
【文章摘要】
【關(guān)鍵詞】
NRF24L01;多機(jī)通信; STC89C52 ;無線傳輸
NRF24L01擁有一個(gè)發(fā)送通道和六個(gè)接收通道,可以接收六路不同的數(shù)據(jù),在正常工作時(shí)只有收發(fā)地址相互對(duì)應(yīng)的NRF24L01模塊才能進(jìn)行通信。NRF24L01有125個(gè)可選的工作頻道,在正常工作時(shí)也是只有頻道一致的模塊才能通信。因此,若要進(jìn)行多機(jī)通信至少有兩種方式:利用地址對(duì)從機(jī)進(jìn)項(xiàng)編號(hào)區(qū)分或者是利用地址對(duì)從機(jī)進(jìn)行區(qū)分。當(dāng)把頻道當(dāng)做劃分依據(jù)時(shí),在實(shí)際應(yīng)用中發(fā)現(xiàn)頻道相近的從機(jī)都能收到主機(jī)發(fā)送過來的數(shù)據(jù),所以實(shí)際應(yīng)用中不要選擇連續(xù)的頻道。
2.1選擇頻道為區(qū)分對(duì)象
首先提前選擇好頻道號(hào)并將它們賦給各個(gè)從機(jī)。然后就可以對(duì)主機(jī)和從機(jī)分別進(jìn)行操作了。上電之后先對(duì)NRF模塊進(jìn)行初始化。步驟如下。
先把模式選擇引腳拉低,讓芯片工作在待機(jī)模式下,然后才能對(duì)芯片的各個(gè)寄存器進(jìn)行配置。接著寫接收通道0的數(shù)據(jù)寬度,一般情況下數(shù)據(jù)寬度選擇為32字節(jié)。然后清除接收緩沖寄存器,寫本機(jī)地址即發(fā)送地址,寫接收地址,使能接收通道0的自動(dòng)應(yīng)答,使能接收通道0,設(shè)置自動(dòng)重發(fā)間隔時(shí)間,選擇工作頻道0,設(shè)置發(fā)射參數(shù),配置基本工作模式的參數(shù),最后將CE引腳拉高,設(shè)置芯片工作在發(fā)送模式下。關(guān)于指令中某些語句的詳細(xì)功能,請(qǐng)讀者參考NEF24L01的技術(shù)手冊(cè)。NRF24L01與STC89C52單片機(jī)通信時(shí)遵循SPΙ協(xié)議,STC89C52雖然不自帶SPΙ功能,但是可以用普通ΙO口模擬。
各個(gè)從機(jī)的初始化程序與主機(jī)大體相同,但是從機(jī)的頻道不能一致。比如:
從機(jī)1選擇頻道0:NRF24L01_Write_ Reg(WRΙTE_REG+RF_CH,0);
從機(jī)2選擇頻道10:NRF24L01_Write_ Reg(WRΙTE_REG+RF_CH,10);
從機(jī)3選擇頻道20:NRF24L01_Write_ Reg(WRΙTE_REG+RF_CH,20);等。這樣配置好后,系統(tǒng)一上電只有從機(jī)一能夠與主機(jī)進(jìn)行通信。其他從機(jī)由于所處的頻道和主機(jī)不一致,無法和主機(jī)進(jìn)行通信。當(dāng)主機(jī)需要訪問其他從機(jī)時(shí),只需要改變頻道號(hào)即可比如訪問從機(jī)1:
然后主機(jī)就可以和從機(jī)1進(jìn)行通信了。若NRF24L01_Write_Reg(WRΙTE_REG+RF_ CH,20),主機(jī)就可以和從機(jī)2進(jìn)行通信。切換到其他的頻道就可以和相應(yīng)頻道的從機(jī)進(jìn)行通
信。
注意:所有主從機(jī)的地址應(yīng)設(shè)置成同一個(gè)地址即TX_ADDRESS和和RX_ADDRESS為同一個(gè)地址。區(qū)分當(dāng)前主機(jī)和哪個(gè)從機(jī)進(jìn)行通信完全由頻道來決定。
2.2選擇地址為區(qū)分對(duì)象
由于NRF24L01有六個(gè)接收通道,如果給主機(jī)的六個(gè)接收通道分別賦予不同的接收地址,那么主機(jī)就可以根據(jù)地址來對(duì)從機(jī)進(jìn)行訪問了。
NRF24L01共有六個(gè)接收通道,其中通道零和通道一的地址都是40位,通道二到通道五的高32位和通道一相同,只有低八位可以自由配置。這些地址可以任意取,只需要保證主從機(jī)的地址匹配即可。
由于主機(jī)根據(jù)地址對(duì)從機(jī)進(jìn)行識(shí)別,所以所有主從機(jī)應(yīng)處于同一個(gè)頻道。而且使能所有的接收通道即NRF24L01_Write_Reg(WRΙTE_ REG+EN_RXADDR,0x3F)和使能所有接收通道的自動(dòng)應(yīng)答。自動(dòng)應(yīng)答是NRF24L01功能中自帶的,開啟此功能后,當(dāng)發(fā)送貨或接收完數(shù)據(jù)后,NRF模塊中的硬件會(huì)自動(dòng)做出反應(yīng),不用再編寫額外的應(yīng)答程序。
自動(dòng)應(yīng)答功能是接收方以接收到的數(shù)據(jù)的發(fā)送地址為目的地址,發(fā)送給發(fā)送方一個(gè)應(yīng)答信號(hào),表示數(shù)據(jù)已經(jīng)接收,可以進(jìn)行下一步操作。對(duì)于發(fā)送方來說,應(yīng)答信號(hào)是用通道零來接收的,因此發(fā)送方需要將發(fā)送地址和通道零的接收地址配置成同一個(gè)地址。
當(dāng)需要訪問不同的從機(jī)時(shí)只需要將發(fā)送地址和通道零的接收地址更改為從機(jī)地址即可。
如果從機(jī)數(shù)目非常多的話,可以把兩種方式結(jié)合起來。先將從機(jī)分組,每一組中的所有從機(jī)的頻道號(hào)相同,主機(jī)按照地址對(duì)從機(jī)進(jìn)行區(qū)分,不同的組按照頻道號(hào)進(jìn)行區(qū)分。
【參考文獻(xiàn)】
[1] 朱桂峰.基于nRF24L01的無線傳感局域網(wǎng)絡(luò)的研究與設(shè)計(jì)[D].保定:河北大學(xué),2011.
[2]Nordic VLSL ASA.nRF24xx Link Integrity[EB/OL].(2003-04-01) [2010-10-09]
NRF24L01是一款由NORDIC公司生產(chǎn)的無線傳輸模塊,它的工作頻段是世界上通用的頻段??罩械淖畲髠鬏斔俾士蛇_(dá),而且功率非常低,當(dāng)工作在接收模式下時(shí),為最大電流,工作在發(fā)送模式下時(shí),為最大電流。沒有加功率芯片的NRF24l01模塊的傳輸距離最近:空曠條件下,傳輸?shù)木嚯x為15米,傳輸?shù)木嚯x為30米,傳輸?shù)木嚯x為50米,如果是外加天線的話傳輸距離會(huì)更遠(yuǎn)。功率加強(qiáng)版的模塊NRF24L01+在空曠條件下傳輸距離可達(dá)110米。其最大的特點(diǎn)是不僅能實(shí)現(xiàn)一對(duì)一的點(diǎn)對(duì)點(diǎn)通信,還能實(shí)現(xiàn)最大為六對(duì)一(六個(gè)發(fā)送端一個(gè)接收端)的多機(jī)通信。本文主要介紹如何利用NRF24L01實(shí)現(xiàn)基于STC89C52單片機(jī)的無線多機(jī)通信。