Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Fibaro Fibaro
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A

Kubald 24 Kwi 2013 17:16 11277 3
  • Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A

    W niniejszym artykule zostanie objaśnione, jak używać takich modułów do bezprzewodowego odczytu danych z czujnika temperatury i wyświetlania ich na ekranie komputera. Do pomiarów wykorzystywany jest czujnik temperatury wbudowany w mikrokontroler MSP430F2553. Kod źródłowy jest niewielki i bardzo prosty, może zostać wykorzystany w innych urządzeniach z komunikacją radiową.

    Moduły radiowe i ich parametry:
    Moduły A110LR09x są oparte o scalony transceiver CC110L od Texas Instruments, który może pracować w pasmach 315/433/868/915 MHz w zależności od użytych elementów biernych. Moduł radiowy został wyposażony we wszystkie niezbędne peryferia, włącznie z oscylatorem kwarcowym 27 MHz. Sufiks A w typie modułu oznacza zintegrowaną na płytce drukowanej antenę, podczas gdy moduły o typie z sufiksem C pozwalają na przyłączenie anteny zewnętrznej za pomocą złącza U.FL. Rozmiary większego, wyposażonego w antenę, modułu to zaledwie 9x16x2 mm.

    Firma Anaren produkuje także AIR BoosterPack - moduł rozszerzeń komunikacji bezprzewodowej do zestawu TI MSP-EXP430G2 LaunchPad. Zestaw BoosterPack zawiera 2 moduły radiowe ze zinegrowanymi antenami pracujące w europejskich (868-870MHz) i amerykańskich (902-928MHz) pasmach ISM. Do prób autor zakupił BoosterPack i dwa zestawy LaunchPad. W artykule zostanie wyjaśnione, jak skonfigurować moduły do pracy w modelu peer-to-peer (P2P). Moduły rozszerzeń BoosterPack są zaprojektowane tak, by było możliwe łączenie ich w "kanapkę". Na poniższym zdjęciu można zobaczyć moduł A110LR09A połączony z zestawem LaunchPad z procesorem MSP430F2553. Zarówno nadajnik jak i odbiornik mają taki sam schemat, różnią się jedynie programem zapisanym w mikrokontrolerze. Jeden z modułów wysyła dane, drugi z kolei odbiera je i realizuje komunikację z komputerem.

    Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A





    Więc, czego można oczekiwać od zasilanego bateryjnie modułu radiowego pracującego z, powiedzmy, czujnikiem temperatury? Poza niezawodnością komunikacji, najpewniej jednym z najistotniejszych czynników jest niski pobór prądu. Jednakże w momencie wysyłania sygnału z maksymalną mocą wyjściową +11 dBm pobór prądu modułu wynosi około 34 mA. Pobór prądu modułu odbierającego dane to w przybliżeniu 15 mA. Jak widać, żadna bateria nie wytrzyma zbyt długo, jeśli nadawanie będzie prowadzone przez dłuższy czas. Dlatego, aby ograniczyć pobór prądu, moduł powinien być wyłączony (pobiera wtedy 200 nA prądu) tak długo, jak to jest możliwe; uruchomienie modułu powinno następować jedynie na krótką chwilę. Jak powszechnie wiadomo, aby nawiązać komunikację radiową, należy wykorzystać specjalny protokół obejmujący potwierdzanie odbioru i retransmisję pakietów. Autor jednak postanowił wykorzystać prostszą komunikację P2P bez potwierdzania odbioru pakietów. W wielu przypadkach takie rozwiązanie może dać akceptowalne wyniki pod względem stabilności transmisji i jednocześnie zapewnić niższy pobór prądu, co jest tu celem nadrzędnym. Transceiver CC110L wspiera stos protokołu o otwartym źródle SimpliciTI, a Anaren zaadoptował ten protokół do swoich modułów radiowych A110LR09x. Po długiej analizie kodów źródłowych i ich działania za pomocą wbudowanego debuggera zestawu LaunchPad, autor postanowił zaprojektować od zera o wiele prostszy sposób transmisji.

    W rozważanym przypadku nadajnik uruchamiany jest na bardzo krótki czas, wysyłając pojedynczą paczkę danych do ciągle włączonego odbiornika. Odbiornik powinien być więc zasilany z sieci lub akumulatora, aby pobór prądu nie był wartością krytyczną. Moduły A110LR09A wspierają kilka trybów modulacji i zapewniają szybkość transmisji do 500 kbps. Wyższa szybkość transmisji to także krótszy czas nadawania, a więc i mniejszy średni pobór prądu. Jednakże większa szybkość transmisji odbija się na czułości odbiornika - w tej kwestii potrzeba kompromisu. Autor wybrał więc transmisję 100 kbps z modulacją 2-FSK (BFSK). W ten sposób transmisja pakietu zawierającego 8 bajtów użytecznych danych zajmuje około 1,5 ms, włączywszy w to transmisję nagłówka, słowa synchronizującego i dwóch bajtów sumy kontrolnej. W przypadku wysyłania danych co 5 sekund średni pobór prądu wyniesie 10 μA, więc zasilające nadajnik dwie baterie AAA powinny wystarczyć na kilka lat pracy. Niski średni pobór prądu pozwala zasilić nadajnik nawet z ogniwa słonecznego.

    Moduły radiowe A110LR09A mają sprzętowo zaimplementowane warstwy MAX+PHY i sprzętowe wsparcie dla obsługi pakietów. Konfiguracja modułu sprowadza się do zapisania odpowiednich wartości do 47 rejestrów konfiguracyjnych. Aby uprościć proces konfiguracji, TI udostępnia darmowe oprogramowanie SmartRF Studio. Program wyposazony jest w graficzny interfejs i umożliwia testowanie wielu różnych konfiguracji. Oprogramowanie łączy się bezpośrednio z układem CC110L za pośrednictwem magistrali SPI i z wykorzystaniem CC Debuggera, dostępnego w TI EStore. Na zdjęciu po lewej można zobaczyć główne okno programu. Nadajnik został zaprogramowany do wysyłania pakietów testowych. Ujemne liczby w ostatniej kolumnie w dolnym oknie oznaczają poziom RSSI sygnału. Widmo nadawanego sygnału było sprawdzane analizatorem widma TI MSP-SA430-SUB1GHZ. Na zdjęciu po prawej pokazane jest widmo sygnału w czasie nadawania nagłówka transmisji. Zgodnie z regulacjami FCC/IC autor wykorzystał nośną o częstotliwości 902,299 MHz, także pozostałe ustawienia były zgodne z zaleceniami producenta modułów. Dwa piki na widmie sygnału odpowiadają częstotliwościom przesyłania logicznych zer i jedynek w modulacji 2-FSK, a pionowa linia pomiędzy nimi wskazuje na częstotliwość nośnej.

    Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A

    Tryb nadawania:
    Jak wspomniano powyżej, moduły A110LR09A mają sprzętowe wsparcie dla obsługi pakietów. Typowa struktura pakietu, zapożyczona z karty katalogowej układu CC110L, pokazana jest poniżej. Pakiet rozpoczyna się generowanym przez nadajnik automatycznie nagłówkiem i słowem synchronizacji. Należy dodać, że słowo synchronizacji jest konfigurowalne i może być wykorzystane do selekcji pakietów. Następnie, pakiet musi zawierać jednobajtową informację o jego długości, która nie może przekroczyć wielkości pamięci FIFO nadajnika (64 bajty). Po informacji o długości pakietu możliwe jest (opcjonalne) podanie adresu odbiornika. Adres można wykorzystać do automatycznego odrzucania pakietów, w których występuje niezgodność tego parametru z identyfikatorem odbiornika. Adres pakietu można wyłączyć, wtedy jego podawanie nie jest wymagane. Oczywiście dłuższe adresy nadajnika/odbiornika mogą być wykorzystane do przesyłania części danych. Przesył danych zakończony jest podaniem dwubajtowej sumy kontrolnej CRC, obliczanej automatycznie przez nadajnik i odbiornik. Kontrola sumy CRC może być wyłączona w czasie konfiguracji. Jednakże jej wykorzystanie ułatwia odrzucanie błędnych pakietów z bufora FIFO. Opcja ta jest także konfigurowalna. Nie wymieniono tu oczywiście wszystkich możliwości ustawień. Dalsze informacje zawarte są w nocie katalogowej układu CC110L.

    Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A

    Jak wynika ze schematu, poza wyprowadzeniami magistrali SPI moduł A110LR09A posiada także dwa wyprowadzenia sterujące GDO2 i GDO0. W opisanym rozwiązaniu wyprowadzenia te są przeznaczone do obsługi przerwań wywołanych przez zmianę stanu automatu stanów kontrolującego moduł radiowy. Większość czasu moduł pozostaje w trybie wyłączonym, z którego jest wybudzany opadającym zboczem podanym na wyprowadzenie CS. Moduł wykorzystuje 22-stanowy automat stanów. Uproszczony sposób nadawania pakietów jest następujący: Po uruchomieniu modułu aktywowany zostaje rezonator kwarcowy i pętla synchronizacji fazy generująca m.in. nośną. Proces ten trwa około 150 μs, po czym na wyprowadzeniu GDO2 pojawia się stan niski i moduł przechodzi w tryb IDLE. Dopiero wtedy moduł jest gotowy do obsługi magistrali SPI, za pomocą której może zostać ustawiony do pracy jako nadajnik lub odbiornik, możliwe jest też wtedy załadowanie danych do bufora FIFO transmisji. Autor skorzystał właśnie z tej ostatniej możliwości. Zgodnie z konfiguracją, moduł dokonuje kalibracji częstotliwości po każdej transmisji pakietu, co trwa około 750 μs. Po zakończeniu transmisji nagłówka i słowa synchronizacji na wyprowadzeniu GDO0 pojawia się stan wysoki i następuje żądanie przerwania. Procedura obsługi przerwania powoduje, że mikrokontroler oczekuje na opadające zbocze na tym wyprowadzeniu, co oznacza koniec transmisji całego pakietu i sumy kontrolnej. Po tym moduł samoczynnie przechodzi do stanu bezczynności, skąd programowo zostaje wyłączony, aby ograniczyć pobór prądu.

    Wielkość wysyłanych danych w pakiecie wynosi 8 bajtów, włącznie z bajtem informacji o długości pakietu. W pakiecie przesyłany jest także identyfikator odbiornika (0x11). Odbiornik ignoruje pakiety z identyfikatorem innymi, niż 0x11. W pakiecie przesyłany jest też identyfikator nadajnika (0xAA), który w obecnej wersji urządzenia nie jest wykorzystywany. Został on przeznaczony do obsługi nadawania danych z wielu czujników w przyszłości. Następnie w pakiecie przesyłany jest jego numer, który jest zwiększany przez nadajnik. Te dane również nie są wykorzystywane, w przyszłości mogą jednak posłużyć do potwierdzania odbioru pakietu. Ostatnie 4 bajty pakietu zawierają dane odczytane z czujnika. Dwa pierwsze bajty niosą informacje o temperaturze, dwa następne przeznaczono do danych o wilgotności (pomiar nie wspierany w tej wersji urządzenia).

    Struktura oprogramowania sterującego jest następująca: Po inicjalizacji portów ustalana jest częstotliwość taktowania (8 MHz), tryb pracy modułu eUSCI_B0 na obsługujący magistralę SPI o prędkości 4 MHz, przetwornik A/D konfigurowany jest do pomiaru temperatury za pomocą wbudowanego czujnika. W końcu Timer_A0 służy do wybudzania procesora co każde 5 s, aby dokonać pomiaru temperatury i wysłania danych. Timer taktowany jest przez VLO częstotliwością 12 KHz, co pozwala na jego działanie w trybie uśpienia LPM3 procesora. Pobór prądu wynosi wtedy około 0,6 μA.

    Oprogramowanie procesora zostało napisane w assemblerze, należy je kompilować za pomocą IAR Embedded Workbench w wydaniu Kickstart.

    Tryb odbierania:
    Zestaw LaunchPad wyposażony jest w konwerter USB-UART, co pozwala na wykorzystanie do transmisji danych wirtualnego portu COM. Procesor może wykorzystywać sprzętowy lub programowy UART. W urządzeniu wykorzystano sprzętowy UART, stąd konieczność poprawnego ustawienia zwór na płytce.

    Aby za pomocą programu terminala połączyć się z odbiornikiem, należy skonfigurować wirtualny port COM. Numer portu można znaleźć w menedżerze urządzeń systemu. Port pracuje z prędkością 9600 bodów (8 bitów danych, jeden bit stopu, brak kontroli parzystości). Po zaprogramowaniu procesora i uruchomieniu programu co 5 sekund w oknie terminala pojawiać się będzie nowa linia danych (jeśli oczywiście włączony jest nadajnik).

    Komunikacja peer-to-peer z wykorzystaniem modułów radiowych A110LR09A

    Pierwsza kolumna zawiera identyfikator nadajnika, w następnej podany jest numer pakietu (w formacie HEX), w trzeciej wynik sprawdzenia sumy kontrolnej, w czwartej znajduje się zmierzona temperatura a w piątej - poziom RSSI sygnału. Należy zwrócić uwagę, że wbudowany w procesor czujnik ma duży rozrzut parametrów i powinien zostać skalibrowany do dokładnego pomiaru temperatury.

    Program odbiornika również został napisany w assemblerze. Po inicjalizacji i ustaleniu taktowania na 8 MHz, konfigurowane są bloki sterujące magistralami SPI i UART a także przesyłane są dane konfigurujące moduł radiowy. Po tym program przechodzi do nieskończonej pętli. W każdej iteracji odbierany jest pakiet, a odebrane dane wysyłane są przez port szeregowy do terminala.

    Odbiór pakietu kontrolowany jest funkcją Receive_Packet. Odbiór pakietu rozpoczyna się przełączeniem modułu radiowego w tryb odbiornika. Następnie oczekiwane jest przerwanie z wyprowadzenia GDO0. Rosnące zbocze oznacza odebranie nagłówka, a opadające zbocze - całego pakietu. Po tym moduł radiowy przechodzi do trybu IDLE. Sygnały generowane na wyprowadzeniu GDO0 będą takie same w przypadku automatycznego odrzucenia pakietu. Wtedy jednak bufor FIFO będzie pusty i nie powinien być odczytywany. Aby zapobiec takim przypadkom program najpierw sprawdza rejestr RXBYTES modułu, w którym zapisana jest wielkość odebranych danych. Jeśli wartość ta nie jest zerowa, program odczytuje zawartość buforu i wysyła dane do terminala.

    W opisanym przypadku udało się przeprowadzić transmisję danych między odbiornikiem a nadajnikiem oddalonymi o około 100 m.

    Źródło


    Fajne!
  • Fibaro
  • Fibaro
  • #3 28 Kwi 2013 14:56
    Kubald
    Poziom 15  

    @blue_17 - informacje o konfiguracji zworek zawarte są na stronie źródłowej :)

  • Fibaro
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo