[7] STM32CUBE w przykładach (obsługa GPS)

 

W tej części cyklu poświęconego programowaniu mikrokontrolerów STM32F4, zajmiemy się obsługą odbiornika GPS. Przedstawione zostanie działanie systemu nawigacji GPS oraz protokół NMEA-0183 – standard wymiany danych między komputerami i mikrokontrolerami, a odbiornikami GPS. Wykorzystamy w tym celu tani moduł GPS – uBlox NEO-6M produkcji WaveShare, z wbudowaną anteną oraz zegarem czasu rzeczywistego. Dzięki standardowi NMEA, przedstawiony opis oraz biblioteka do komunikacji z układem GPS powinny być aktualne również dla wielu innych modułów dostępnych na rynku.

GPS-NAVSTAR – Global Positioning System – Navigation Signal Timing and Ranging

GPS jest systemem nawigacji satelitarnej stworzonym i utrzymywanym przez Departament Obrony USA. Obejmuje on swoim zasięgiem całą kulę ziemską. Jego działanie polega na pomiarze czasu propagacji sygnału radiowego nadawanego przez satelity i odbieranego w dowolnym punkcie na Ziemi. Znając prędkość propagacji fal elektromagnetycznych, czas w jakim sygnał został nadany oraz pozycje co najmniej czterech nadajników, możliwe jest ustalenie położenia odbiornika.

Sygnał nadawany z satelitów GPS zawiera almanach oraz efemerydę – informacje o położeniu i torze lotu satelitów na orbicie oraz dokładny czas odmierzany przez zegary atomowe – cezowe i rubidowe umieszczone w satelitach.

Satelity nadają swój sygnał w paśmie mikrofalowym, równocześnie na dwóch częstotliwościach nośnych – 1575,42 MHz oraz 1227,6 MHz, stosując modulację CDMA – nadając dla sygnału jedynki i zera kod rozpraszający, unikalny dla pojedynczej satelity i ortogonalny względem pozostałych kodów, tak aby nadajnik mógł rozróżnić sygnały nadawane przez inne satelity i jednocześnie nasłuchiwać na tylko jednej (lub dwóch) częstotliwościach.

Moduł GPS

Wykorzystany moduł GPS produkcji WaveShare, bazuje na układzie odbiornika uBlox NEO-6M, posiada wbudowaną ceramiczną antenę o czułości -161 dB oraz pozwala na podłączenie innej, zewnętrznej anteny, ze złączem u.FL. Moduł zawiera ponadto zegar czasu rzeczywistego, którego praca podtrzymywana jest baterią zamontowaną na stałe na płytce. Moduł możemy zasilać napięciami od 2.7 do 5.0 V. Maksymalny pobór prądu to 80 mA. Komunikacja z układem odbywa się w standardzie NMEA-0183 poprzez interfejs UART, z domyślnie ustawioną szybkością transmisji – 9600 b/s. Wartość tą możemy również zmienić na: 4800, 19200, 38400, 57600, 115200 lub 230400 b/s. Dane, w postaci serii różnych ramek NMEA, nadawane są przez moduł domyślnie co 1 sekundę, choć wartość tą można zmienić – na maksymalnie 5 ramek na sekundę.

Fot. 1. Moduł WaveShare uBlox NEO-6M (źródło: strona WWW producenta)

Pojedyncza seria ramek standardu NMEA, składa się z maksymalnie 480 znaków ASCII, a długość każdej ramki ograniczona jest do 82 znaków. Każda ramka przesyłana jest w osobnej linii, rozpoczyna się znakiem “$” i kończy znakiem przejścia do nowej linii (“\r\n”, “\r” lub “\n”). Na początku każdej ramki znajduje się pięcioznakowy identyfikator jej typu. Te opisane w standardzie rozpoczynają się od prefiksu – dwóch znaków ASCII: “GP”, dodatkowe, dodane przez producenta układu i zawierające niestandardowe dane – zaczynają się od innych prefiksów, zależnych od producenta. Dane w ramkach przesyłane są w postaci ciągów znaków ASCII – liczby stało i zmiennoprzecinkowe, a także inne identyfikatory. Poszczególne pola danych rozdzielone są przecinkami. Na końcu każdej ramki, może, choć nie musi, znajdować się suma kontrolna. Rozpoczyna się ona znakiem gwiazdki (“*”) i zawiera po sobie dwa znaki heksadecymalne.

Poniższa lista typów ramek zdefiniowana została w standardzie NMEA-0183:

  • AAM – Waypoint Arrival Alarm,
  • ALM – Almanac data,
  • APA – Auto Pilot A sentence,
  • APB – Auto Pilot B sentence,
  • BOD – Bearing Origin to Destination,
  • BWC – Bearing using Great Circle route,
  • DTM – Datum being used,
  • GGA – Fix information,
  • GLL – Lat/Lon data,
  • GSA – Overall Satellite data,
  • GSV – Detailed Satellite data,
  • MSK – Send control for a beacon receiver,
  • MSS – Beacon receiver status information,
  • RMA – Recommended Loran data,
  • RMB – Recommended navigation data for gps,
  • RMC – Recommended minimum data for gps,
  • RTE – Route message,
  • VTG – Vector track an Speed over the Ground,
  • WCV – Waypoint closure velocity (Velocity Made Good),
  • WPL – Waypoint information,
  • XTC – Cross track error,
  • XTE – Measured cross track error,
  • ZTG – Zulu (UTC) time and time to go (to destination),
  • ZDA – Date and Time.

Nie wszystkie z wymienionych typów ramek są wysyłane przez nasz moduł, a większość tych nadawanych, zawiera redundantne – dublujące się informacje. Do odczytania podstawowych informacji potrzebujemy interpretować jedynie część z nich.

List. 1. Ramki danych w standardzie NMEA-0183

W listingu 1 znajduje się przykładowa seria ramek nadawana przez moduł uBlox NEO-6M.

Ramka GPRMC zawiera kolejno następujące wartości:

  • aktualny czas UTC (12:55:23),
  • pole statusu (A – Aktywny, V – Nieaktywny),
  • szerokość geograficzną (2 pola – “1234.56789,N”),
  • długość geograficzną (2 pola – “01234.56789,E”),
  • prędkość poruszania się, w węzłach, obliczoną na podstawie zmian pozycji,
  • kąt kierunku w jakim porusza się obiekt (w stopniach),
  • aktualną datę (16.04.2017),
  • odchylenie magnetyczne Ziemi,
  • sumę kontrolną.

Ramka GPVTG zawiera:

  • ścieżkę poruszania się w stopniach, na podstawie odczytów pozycji (2 pola – “-brak odczytu-,T”),
  • ścieżkę poruszania się w stopniach, na podstawie współrzędnych magnetycznych (2 pola – “-brak odczytu-,M”),
  • prędkość w węzłach (2 pola – “1.395,N”),
  • prędkość w kilometrach na godzinę (2 pola – “2.583,K”),
  • sumę kontrolną.

Ramka GPGGA zawiera:

  • aktualny czas UTC,
  • szerokość i długość geograficzną,
  • jakość pomiaru (0 – brak odczytu, 1 – pozycja określona na podstawie GPS),
  • liczbę śledzonych satelit,
  • HDOP – dokładność pozycji w poziomie,
  • wysokość w metrach nad poziomem morza,
  • czas od ostatniego uaktualnienia ze wspomagającej stacji naziemnej,
  • numer ID wspomagającej stacji naziemnej,
  • sumę kontrolną.

Ramka GPGSA zawiera:

  • flagę i sposób ustalania pozycji (2 pola) – A/M – automatyczny / manualny, 1/2/3 – brak pozycji / pozycja 2D / pozycja 3D,
  • numery satelitów użytych do ustalenia pozycji (12 pól)
  • DOP – dokładność ustalonej pozycji,
  • HDOP – dokładność pozycji w poziomie,
  • VDOP – dokładność pozycji w pionie,
  • sumę kontrolną.

Ramka GPGLL zawiera:

  • szerokość i długość geograficzną (4 pola),
  • aktualny czas,
  • status (A/V),
  • sumę kontrolną.

W przedstawionej sekwencji pojawiają się również ramki GPGSV. Pierwsze pole każdej z tych ramek zawiera ich liczbę w sekwencji, drugie to identyfikator kolejnej ramki (tutaj 4 ramki, z identyfikatorami od 1 do 4). Dalej w każdej ramce znajduje się liczba widocznych satelitów i sekwencje po 4 pola dotyczące poszczególnych satelitów, składające się z numeru satelity, wyniesienia satelity nad poziomem równika, w stopniach, azymutu satelity, również w stopniach, oraz poziomu odbieranego sygnału (SNR).

Do pobrania

Autor: admin

Admin