[模組] 無線資料傳輸:nRF905 和 nRF24L01 (以 Arduino 為控制器)


模組說明 

       過去挪威公司 Nordic 開發兩款無線通訊傳輸模組,一種用在中低頻段 (433/868/915 MHz),稱為 nRF905;另一種用在高頻段 (2.4 GHz),稱為 nRF24L01。以 RF 特性來看這兩款模組,低頻傳輸距離較高頻遠,低頻訊號具有繞射特性,高頻訊號穿透性較差,不過高頻的資料傳輸率比較高,NRF24L01 傳輸率 > 250kbps,NRF905傳輸率 < 50kbps。因此,我們可以依據應用的需求,選擇適合的無線模組。
       圖一所示為 Nordic 公司的 NRF 模組的內部方塊圖,圖右邊有 SPI 控制介面可以讀寫晶片內的暫存器,這些暫存器組算是晶片基頻的數位資料,已經被解調後的資料了。另外,控制接腳用來切換 TX/RX 模式,RF 模組的傳輸可視為半雙工方式,因為不可能同時發送又接收。圖左邊是天線,內有一機制是模式切換,就是技術文件裡說的 BurstTX 和 BurstRX。接收端,後面接一個 LNA 放大器,將接收下來的小訊號放大以便讓後端解調處理。發射端,接一個 PA 放大器,將調變訊號再增強以便發射出去,PA 增益越大,發射的距離越遠,但是以這模組上的 PA 放大功率有所限制,主因還是使用無線頻譜資源必須得遵守,不可干擾其他設備
圖一:NRF 無線模組的內部方塊圖

資料傳輸測試

        NRF 模組內部有兩大機制,一個是位址,一個是 CRC 檢測,必須位址正確了,加上 CRC 檢測無誤,這樣才算完整接收成功。為了驗證資料丟失率,我們用兩塊 Arduino 開發板和 NRF905 模組,當做資料乒乓傳輸測試,一邊當發射端,一邊當接收端。發射端送出資料後,接收端收到後必須再回傳,發射端確認回傳資料無誤後,紀錄一次正確傳輸,如果一段時間沒有收到,代表資料丟失,記錄一次失敗傳輸,發射端再重新傳輸一次。
        底下影片紀錄雙邊通訊的情況,在短距離的範圍內 (< 1公尺),發送一筆 4 bytes 長度的資料,接收端再回傳資料,當做 ACK,過程中還是有丟失資料的現象。測試代碼可參考 [2][3]。
影片:兩個 NRF905 模組乒乓來回傳輸的測試


改善通訊距離

        在網路上買到的模組,常常標榜傳輸距離長達一千公尺以上,這種說法別輕易相信,多半買來測試後,將會大失所望。如果測試的環境是空曠平地,沒有其他干擾因素下,傳輸距離或許可達上千公尺,但實際環境存在不少干擾和阻隔,不可能有那麼遠的距離。想要改善這種情況,我們底下的實驗從天線類型開始測試,再增加射頻放大器,並觀察測試的結果。
        從網路購買的無線模組,原本在模組上面使用的天線是短小型,如下圖所示,用這種天線測試通訊距離大約 10 公尺左右 (市區的干擾與阻隔多),而且通訊穩定度時好時壞,這跟標榜距離可達數百公尺以上有相當大的落差。於是,我們以同樣的條件測試,但是把天線改為增益型的天線,天線長度比較長,如下圖所示,整體的通訊距離可再增加約 10 公尺,而且通訊穩定度比前面的測試還要優良。
圖二:從原本天線改為增益天線

        上面的測試只是改變天線類型便有成效,接下來我們希望從發射訊號的強度做改善,在發射端加上一個射頻放大器 (PA放大器),如下圖所示。測試時,必須把模組的程式設定為 TX 模式,另一端的模組程式設為 RX 模式,因為這是一個外部的 PA 放大器,只能放大 TX 訊號 (看看 RF-in, RF-out 的方向就知道了)。如果想要做到 TX 和 RX 都能放大,那就需要有個線路切換功能,如圖一所示能將 TX 和 RX 訊號的路徑做切換。
        首先,TX 模組將發射的小訊號透過 PA 加強增益後,從天線發射出去。經過同樣的測試,發現通訊距離更遠,大約可超過 100 公尺。雖然我們可以靠 PA 放大器增加通訊距離與穩定,但無線頻譜是一個公共資源,即使是 ISM 頻段,我們在使用上也要遵守頻譜規範,不可任意放大訊號以致干擾到其他設備。實驗過程,主要讓我們了解怎麼延長通訊距離與改善通訊品質。
圖三:新增射頻放大器

參考資料

留言

此網誌的熱門文章

[筆記] Raspberry Pi 樹莓派的軟體開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[筆記] Android APP 藍芽範例說明 -- BluetoothChat

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Visual Studio 遠端偵錯的設定步驟

[筆記] Android APP BLE範例程式 -- BluetoothLeGatt

[模組] LD3320 離線語音辨識晶片與 ESP32 無線傳輸