歡迎您光臨本站 登入註冊首頁

概述

   本文介紹的無線通訊模塊,採用通用的低功耗單片機MSP430作為主晶元,nRF905作為無線收發模塊,利用SPI口實現雙向通訊,SPI支持高速數據傳輸,從而滿足了射頻……

    本文介紹的無線通訊模塊,採用通用的低功耗單片機MSP430作為主晶元,nRF905作為無線收發模塊,利用SPI口實現雙向通訊,SPI支持高速數據傳輸,從而滿足了射頻帶寬的要求。nRF905提供了強大的跳頻機制以及大量的頻道支持,可以用在許多特殊的場合,而且即使利用無增益的PCB天線其傳輸距離也可達200m,如果需要更遠距離的傳輸,也可以改成帶增益的天線,傳輸距離即可擴大到1千米以上,可滿足不同客戶的需求。

1 系統硬體實現
    無線通訊模塊的實現框圖如圖1所示,除了MSP430和nRF905外,系統還留有MAX232介面可以實現與PC的機通訊,MAX485介面滿足一些通用儀器儀錶的要求,並提供了按鍵和液晶等人機交互界面。
 

2 驅動實現
2.1 MSP430的SPI驅動
    MSP430用標準SPI口和nRF905進行通訊,標準介面包括兩根數據線:MOSI(主發從收)和MISO(從發主收),還有時鐘線CLK,主機用CLK與從機時鐘同步。
    如圖2所示,SPI可以理解成雙工方式,因為在發送數據的同時也可以接受數據。SPI分成主模式和從模式,從模式完全被動,數據的發送和接受都由主機掌握。實際上參與工作的都有四個寄存器,主機將數據寫入發送緩存UTXBUF,數據并行存入發送移位寄存器。數據一旦寫入UTXBUF,立即從MOSI線移位到從機的接受移位緩存,而從機移位緩存中的數據又將其發送移位寄存器中數據,通過MISO移位到主機的接受移位寄存器,再并行讀入接受緩存中。所以利用SPI同時進行讀寫操作。
 
圖2 430 SPI示意圖
2.2 nRF905的驅動
    nRF905共有32個引腳,其中有10個引腳尤其需要我們注意:和主MCU通訊的SPI介面的四個引腳,數據線MOSI、MISO,時鐘線SCK、使能線,其中CSN可以接到一個IO口控制晶元工作,而其它三個腳則接到主MCU的SPI介面上;主MCU的控制線有三個引腳,控制低功耗的PWRUP,控制正常工作的TX_EN,選擇發送還是接受方式的TRX_CE,這幾個引腳都接到主MCU的通用IO口;nRF905的反饋線有三根,檢測到頻道正被使用的CD(carrier detected),通知接受地址正確的AM(addreSS matched),告訴MCU數據接受正確的DR(data received),這幾個引腳需要接到主MCU的中斷引腳上,當接收數據正確時以中斷方式通知主MCU。
    nRF905與MSP430介面如圖3所示,其中MOSI、MISO、SCK分別與主機SPI口對應,CSN、TRX_CE、PWR_UP、TX_EN接通用IO口,而CD、AM、DR接中斷口,430的P2口都是復用的中斷口,這樣收到數據可以用中斷及時通知430。
 
圖3 硬體介面
2.2.1 寄存器操作
(1)寄存器介紹
    對nRF905操作主要是對其寄存器進行操作,主要有四個寄存器,即配置寄存器、發送地址寄存器、發送數據寄存器和接受數據寄存器,每次發送數據時將對方地址寫入發送地址寄存器中,將不超過32 byte的數據寫入發送數據寄存器即可 而各節點地址在配置寄存器設置,接受的數據則自動放入接受數據寄存器中。
(2)操作寄存器
    nRF905控制信號線CSN的下降沿使能寄存器,如果希望對某個寄存器進行操作的時候,首先需要將CSN引腳置低。905提供了特殊的命令字來支持對寄存器的操作,比如寫配置寄存器的命令字為(WC)0000 XXXX,讀配置寄存器的命令字為(RC)0001XXXX,其中XXXX為起始地址。當操作某個寄存器時,先寫入該寄存器的命令字,即可對其操作。
2.2.2 設置頻道和頻段
    nRF905最吸引人的一個特點就是提供跳頻支持,以及擁有大量的頻道可使用。nRF905可以在433/868/915頻段進行通訊,其實868和915屬於同一頻段,即主要分兩大頻段,而每一頻段又有29個頻道可以使用,但實際上針對不同的天線,只有一個頻段可以讓晶元發揮最好的功能,所以一種天線有29頻道使用。當在某個頻道上遇到干擾時,可以跳頻來繼續通訊,確保數據完整性。配置寄存器提供了CH_NO和HFREQ_PLL來設置頻道,公式為:
f=(422.4+(CH_NO/10))×(1+HFREQ_PLL)MHZ
    nRF905提供了一個專門的命令字來支持快速跳頻,這樣在通訊過程中可以迅速實現跳頻,從而在不影響通訊速度的情況下,完成通訊。
2.2.3 發送數據流程
     設置好配置寄存器后,就可以發送數據了.我們先給出具體的時序圖,再解釋具體流程。
時序圖如下:
 
圖4發送時序圖
①主MCU將PWR_UP置高,使905進入工作模式,再將TX_EN置高進入發送數據模式。
②將發送地址通過SPI口寫入發送地址寄存器TX_ADDRESS,再將數據寫入發送數據寄存器TX_PAYLOAD,SPI口的速度由主MCU設置。
③主MCU置高TRX_CE,905自動將數據幀格式補齊,加入包頭Preamble,並根據寄存器設置計算CRC校驗填人包尾,然後905將整個數據以100 bit/s的速度,採用曼徹斯特編碼,以GFSK形式發送出去,發送完畢,DR會置高,通知主MCU可以繼續下次發送。
④如果配置成自動重發模式,nRF905會自動重發,直到TRX_CE置低。
⑤發送完后可以將TRX CE置低,這樣就進入standby模式,實際操作時可以直接將TRX_CE產生脈衝,持續時間不少於10us,就可以發送完數據。
  發送數據流程圖如圖5所示:
 
圖5發送數據流程圖
2.2.4接受數據流程
    下面我們討論如何接受數據,同樣先給出時序圖如圖6,再解釋流程。
 
①主MCU將TX_EN置高、TRX_CE置低,過650 us后,則進入接受模式。
②nRF905監控頻道使用狀況,如果發現頻道被佔用,則將CD置高,可以利用該特性採取一些衝突避免檢測機制,發送數據前如果檢測到CD信號,則可以隨機延遲一段時間再發送數據,該特性可以有效地避免數據衝突。
③當接收到的數據發送地址和自己地址匹配時,則AM置高,通知該數據是發給自己的。
④對數據的CRC進行校驗,如果正確,則去除包頭和CRC段,將數據保存在接受數據寄存器RX_PAYLOAD,同時DR信號置高,通知主MCU讀取數據。
⑤主MCU將TRX_CE置低,進入standby(省電)模式再通過SPI口將數據讀出來,當數據都讀完后,nRF905將AM和DR重新置低,為下次接受數據做準備。
接受數據流程圖如圖7所示。
 
圖7接受數據流程圖
    如果需要將驅動移植到其它平台如ARM上,只要將介面重新定義,SPI讀寫函數做相應的調整,移植起來非常簡單。

3 MAC演算法實現
    既然nRF9O5提供了這麼多頻道和跳頻機制,如何充分利用這些特性,使通訊更加穩定呢?下面實現的是基於Ad Hoc網路的MAC協議。
3.1 MAC協議框架
    如圖8所示,頻道被分成兩類,控制頻道和數據頻道。而數據頻道又被分成若干組,每組均有一個主數據頻道和兩個備用數據頻道。正常通訊的時候,採用主數據頻道,如果誤碼率高達一定程度,可以跳至備用數據頻道繼續通訊。
 
圖8 協議架構
    通常,各節點在控制頻道處於接受狀態,採用廣播地址。Ad Hoc網路中各節點均以自己為中心,故各節點均維護著自己的“控制頻道狀態表”BroadStatus和“頻道列表”Hoplist,兩者分別記錄了控制頻道和數據頻道的使用狀況。結構分別如下所示:
struct
{
    控制頻道使用標誌broad;
    控制頻道使用時間broadtime;
}BroadStatus;
struct
{
頻道列表hoplist;
頻道使用時間hoptime[n];
頻道佔用地址hopaddress[n][2];
}Hoplist
3.2 控制頻道
    控制頻道用於各節點交換路由信息、握手信息等。由於握手信息和路由信息相對大塊的數據信息而言很小,所以各節點佔用控制頻道的時間相對較少,這在很大程度上避免了控制頻道上的數據衝突。但是由於控制頻道為所有節點所共用,必須採用衝突避免協議,本文採用了IEE802.11b的CSMA/CA機制,即每次發送數據都要等到頻道空閑,再用“二進位指數退避演算法 隨機延時一段時間,當延時時間到再發送數據,這樣就有效地避免了同頻道下的數據衝突。同時考慮到隱藏節點、暴露節點等問題,我們採用了RTS/CTS/BROAD機制,如果節點A需要
發送數據到節點B,則先發送RTS並攜帶自己的數據頻道列表信息,節點B收到RTS后,對比自己的頻道列表選擇一個共用的空閑頻道返回RTS,並跳人該頻道等待數據的到來。節點A收到CTS后再攜帶使用頻道信息發送BROAD,然後跳入數據頻道開始與節點B進行數據通訊。而其他節點收到CTS、BROAD后及時登記頻道列表信息,方便下次數據傳輸時直接查詢,該信息會隨著系統晶振不斷更新,這樣各節點所維護的頻道都是當前頻道使用的狀況。
3.3 數據頻道
    與共用的控制頻道不同,當雙方節點都處於數據頻道時相當於建立了專用通道,此時不用採取CSMA/CA機制,我們採用確認機制、重發機制和跳頻機制來確保數據準確無誤的傳輸。通訊流程基本採用DATA+ACK形式,即發送完DATA等待ACK,接受到DATA則發送ACK確認。如果
ACK不正確或沒收到ACK則重發,如果該頻道不能使用則進行跳頻。跳頻需要雙方協調進行,具有一定的複雜性,這裡具體解釋一下跳頻機制。
    圖9為發送端跳頻示意圖,當發送端受干擾,即發送端可以發送數據,但接受不到數據,當誤碼率高達上限時,發送端發送CHG並攜帶將跳至的頻道值hop,然後跳人備用數據頻道hop中,再發送CHECK,等待握手信息。而接受端收到CHG后,從中提取出hop信息,再跳至該hop,當接受到CHECK時,再發送驗證信息CHECK。自此,收發雙方握手完畢,接著在新的頻道中繼續通訊。
 
    圖10為接受端跳頻示意圖,當接受端受干擾或者收發雙方都收到干擾,這時接受端收不到來自發送方的控制信息CHG,只能完全依靠誤碼率信息,此時同步尤為重要。由於雙方誤碼率同時增加,當依次達到上限時,可以依次跳人備用頻道繼續通訊。由於存在重發和延時機制,雙方並不需要同時跳入備用頻道,系統具有一定的容錯性。每個數據頻道組有兩個備用頻道,如果三個頻道都不能使用,則此次通訊就失敗了。但是通常一定時間內干擾只在某個頻段存在,只要將三個數據頻道拉開一段頻距,即可有效地抵制干擾。
 

4 總結
    文中無線多點收發模塊在MSP430和nRF905的基礎上,實現了物理層驅動和基於Ad Hoc網路的MAC層協議,但沒有提供網路層路由協議。物理層點對點通訊確保了數據傳輸的可靠性。MAC協議確保同時傳輸數據時避免衝突。在測試中,我們網路層採用魚眼演算法,用15個節點動態組網並互傳信息,在該體制下信息可以同時發送相互之間沒有干擾。該模塊可以很好的運用在一些抄表系統、遙控系統、以及機器人控制中。


[admin via 研發互助社區 ] 基於MSP430和nRF905的多點無線通訊模塊已經有2625次圍觀

http://cocdig.com/docs/show-post-44777.html