[LoRa] Testy zasięgu zestawu startowego B-L072Z-LRWAN1 z STM32L072 i SX1276, część 1

Firma Semtech opracowała standard transmisji radiowej dalekiego zasięgu w pasmach ISM o nazwie LoRa. Wykorzystując nowy w ofercie STMicroelectronics zestaw startowy B-L072Z-LRWAN1 postanowiliśmy sprawdzić w praktyce na jakie odległości można przesłać dane w różnych warunkach terenowych. Wyniki testów udokumentowaliśmy za pomocą filmów oraz przedstawiliśmy w artykule (część 2 jest dostępna pod adresem) .

Zaczniemy od krótkiego wstępu teoretycznego, który pozwoli zorientować się czytelnikom w rozwiązaniach technicznych wykorzystywanych przez standard LoRa.

LoRa jest interfejsem radiowym działającym m.in. w pasmach ISM 434 MHZ i 868 MHz (obowiązuje w UE) umożliwiającym komunikację o dużym zasięgu przy niewielkim poborze mocy. Dzięki temu świetnie nadaje się między innymi do budowy sieci zasilanych bateryjnie czujników rozproszonych na dużych obszarach. Odległości pomiędzy komunikującymi się ze sobą urządzeniami mogą być liczone w kilometrach – w zależności od ukształtowania i typu terenu. Osiągnięcie takiego zasięgu wiąże się jednak z ceną, którą jest maksymalny transfer danych, który może wahać się, w zależności od konfiguracji modemu od kilobajtów, do pojedynczych bajtów na sekundę.

 

Modulacja

Przepustowość kanału informacyjnego, pasmo oraz stosunek sygnału do szumu są ze sobą związane zależnością zwaną twierdzeniem Shannona-Hartleya. Wygląda ona następująco:

C = B * log2(1+S/N)

gdzie

C – przepustowość kanału w bitach na sekundę,

B – pasmo sygnału w hercach,

S/N – stosunek mocy sygnału do mocy szumów.

Z twierdzenia tego można wyciągnąć następujące wnioski:

  • zwiększenie pasma sygnału umożliwia zwiększenie transferu przy stałym stosunku mocy sygnału do szumu,
  • spadek stosunku mocy sygnału do szumu (np. na skutek zwiększenia odległości między nadajnikiem, a odbiornikiem) wymaga zwiększenia pasma przy zachowanej przepustowości łącza.

Na powyższych założeniach oparta jest m.in. modulacja CSS (Chirp Spread Spectrum), w której strumień danych modulowany jest sygnałem o liniowo wzrastającej częstotliwości. Na tej technice bazuje modulacja LoRa, której zarejestrowany spektrogram został przedstawiony na rysunku 1. Z lewej strony pokazana została tzw. preambuła, niezawierająca danych, na której widać w jaki sposób wygląda sygnał modulujący, którego zakres częstotliwości definiuje szerokość pasma. Zmodulowany sygnał został przedstawiony na przebiegu po prawej stronie.

Sposób w jaki przebiega modulacja sygnału jest zależny od trzech głównych parametrów:

  • BW (modulation bandwidth) – opisuje w jakim zakresie zmienia się częstotliwość modulująca,
  • SF (spread factor) – określa jak szybko zmienia się częstotliwość modulująca,
  • CR (code rate) – wprowadza redundancje zapewniając jednocześnie korekcję błędów powstałych podczas transmisji.

Parametry te wpływają na maksymalny zasięg oraz przepustowość łącza która jest wyrażona zależnością:

Parametry mogą przyjmować następujące wartości:

  • BW {7.8 kHz, 10.4 kHz, 15.6 kHz, 20.8kHz, 31.25 kHz, 41.7 kHz, 62.5 kHz, 125 kHz,

250 kHz, 500 kHz}

  • SF {6, 7, 8, 9, 10, 11, 12}
  • CR {4/5, 4/6, 4/7, 4/8}

Łatwo więc policzyć, że maksymalny transfer wynosi 37,5 kb/s, natomiast minimalny zaledwie ok. 11,5 b/s. Należy jednak pamiętać, że w pakiecie danych radiowych znajdują są także preambuła oraz opcjonalny nagłówek, które dodatkowo zmniejszają transfer danych użytecznych.

Rys. 1. Modulacja LoRa (źródło: digikey.com)

Modemy LoRa

Rodzinę dostępnych na rynku modemów LoRa można podzielić na dwie grupy. Pierwsza z nich obejmuje układy SX1272 i SX1273, które są przystosowane do pracy z częstotliwościami z zakresu 860 – 1020 MHz. Druga grupa to układy SX1276, SX1277, SX1278 i SX1279 mogące pracować z częstotliwościami od 137 do 1020 MHz, zależnie od typu układu. W porównaniu do układów z pierwszej grupy mają one większą czułość odbiorników radiowych, a szerokość kanału zaczyna się już od 7,8 kHz, w przeciwieństwie do pierwszej grupy modemów, gdzie szerokość kanału zaczyna się od 125 kHz. W tabeli 1 można zobaczyć dokładne parametry poszczególnych układów  zaczerpnięte z oficjalnej dokumentacji firmy Semtech.

Tab. 1. Parametry dostępnych na rynku modemów LoRa (źródło: semtech.com)

W testach przedstawionych w artykule użyto zestawu B-L072Z-LRWAN1 (fotografia 2) z modułem CMWX1ZZABZ-091 (jego schemat blokowy pokazano na rysunku 3), w którym zastosowano transceiver SX1276 oraz mikrokontroler STM32L072CZ.

Rys. 2. Zestaw deweloperski z modemem LoRa SX1276 oraz mikrokontrolerem STM32L072 (B-L072Z-LRWAN)

Przykładowy program

Przedstawimy teraz krótki program umożliwiający komunikację radiową pomiędzy dwoma urządzeniami. Przykład został przygotowany dla zestawu deweloperskiego B-L072Z-LRWAN1 firmy STMicroelectronics i wykorzystuje bibliotekę STM32Cube z rozszerzeniem LRWAN.

Rys. 3. Schemat blokowy modułu Murata CMWX1ZZABZ-091

Biblioteka podstawowa STM32Cube dostarcza sterowników do peryferiów mikrokontrolera STM32L072CZ i jest używana przez wyższe warstwy oprogramowania oraz rozszerzenie I-CUBE-LRWAN, które zawiera sterownik do modemu SX1276 oraz stos LoRaWAN.

Biblioteka podstawowa jest dostępna na stronie st.com lub za pośrednictwem środowiska SW4STM32, na którym będzie uruchamiany przykład. Rozszerzenie I-CUBE-LRWAN należy pobrać ze strony.

Pracę zaczynamy od utworzenia nowego projektu dla zestawu B-L072Z-LRWAN1. W ostatnim z przedstawionych okien należy pobrać bibliotekę STM32Cube i dodać ją do źródeł projektu. W projekcie potrzebne też będą elementy rozszerzenia I-CUBE-LRWAN:

  • Middlewares/Third_Party/Lora/Phy
  • Middlewares/Third_Party/Lora/Utilities
  • Drivers/BSP/MLM32L07X01
  • Drivers/BSP/B-L072Z-LRWAN1

Powyższe moduły wymagają dostarczenia funkcji obsługi takich peryferiów jak GPIO, RTC i SPI. Znajdują się one w przykładach aplikacji dołączonych do B-L072Z-LRWAN1. Do opisywanego przykładu zostały dołączone pliki z aplikacji Projects/Multi/Applications/LoRa/PingPong:

  • debug.c
  • debug.h
  • hw.h
  • hw_conf.h
  • hw_msp.h
  • hw_gpio.c
  • hw_gpio.h
  • hw_rtc.c
  • hw_rtc.h
  • hw_spi.c
  • hw_spi.h
  • mlm3210xx_hal_msp.c
  • mlm3210xx_hw.c
  • mlm3210xx_hw_conf.h
  • mlm3210xx_it.c
  • vcom.c
  • vcom.h

W pliku mlm32l0xx_it.c znajdują się definicje wszystkich potrzebnych funkcji obsługi przerwań, dlatego można usunąć automatycznie utworzony plik stm32l0xx_it.c. Wszystkie używane przerwania wymagają także umieszczenia ich w tablicy znajdującej się w pliku startup_stm32.s. Można dopisać brakujące elementy wraz z deklaracjami typu .weak, lub zamienić istniejący plik na Projects/Multi/Applications/LoRa/PingPong/SW4STM32/B-L072Z-LRWAN1/startup_stm32l072xx.s.

Rys. 4. Lista plików projektu

Ostateczną listę plików w projekcie można znaleźć na rysunku 4.

Do pobrania