. : New eShop! - Mobilní verze - Pandatron.cz - Pandatron.sk - Diskuzní fórum - Zakázkový vývoj : .
 
GPS Receiver
30. září 2010 - 9:36 | Tomáš Götthans | GPS Receiver | Komentářů: 9  

GPS Receiver

Praktická realizace přijímače GPS navigace s modulem firmy Leadtek LR9552 a výstupem do standardních mapových systémů.

Pro přesné snímání polohy je využito již hotového modulu od firmy Leadtek LR9552. Modul je osazen chipsetem SiRFStarIII. Tento modul disponuje velmi malými vnějšími rozměry. Obsahuje také anténu. Jako komunikační protokol využívá standardní obousměrnou sériovou komunikaci. Zařízení je standardně nastaveno pro komunikaci protokolem NMEA-0183 při rychlosti 4800 bps. Využít však můžeme libovolného zařízení GPS, které komunikuje protokolem NMEA po sbernici USART. Je však potřeba dát pozor na úrovně signálu. Výrobci modulů totiž mají v oblibě používat invertované úrovně signálů TTL.

Popis GPS - Leadtek LR9552:

  • Modul je osazen chipsetem SiRFStarIII
  • Malé vnější rozměry
  • Obsahuje také anténu
  • Protocol: NMEA-0183/SiRF Binary (default NMEA)
  • RS232 – invertované úrovně
  • Rozsah teplot:-20°C až +60°C
  • 55 mA (@ 5V), 3.3 ~ 5.0 V DC
Typické hodnoty inicializace Čas [s]
Horký start 1
Teplý start 38
Studený start 42

Realizace

Protokol NMEA 0183(National Marine Electronics Association)

NMEA Standard Interface definuje požadavky na elektrický signál, přenos dat a formáty vět pro přenos dat po sériové datové sběrnici. Každá datová linka může mít více posluchačů, avšak jen jeden vysílač. Data jsou ve formátu ASCI. Z těchto dat je možné získat informace jako jsou pozice, rychlost přijímače, datum, čas a mnoho dalších informací. Asociace NMEA na své stránce http://www.nmea.org/content/nmea_standards/nmea_083_v_400.asp uvádí, že komunikační standard je dokument podléhající copyrightu a lze jej pouze zakoupit od asociace NMEA. Cena pro neregistrované členy v elektronické podobě je asi $300. Ostatní zdroje na internetu prý nejsou autorizované a mohou představovat porušení copyrightu. NMEA dále uvádí, že obsah rozličných stránek s touto tématikou mnohdy obsahuje zastaralé informace.

Formát nejčastěji používaných vět:

GSA, aktivní satelity a DOP (Dilution Of Precision)

Příklad:
$GPGSA,A,3,29,26,22,09,07,05,04,,,,,,1.7,1.0,1.4*30

# formát příklad komentář
1 c A Přepínání mezi N-rozměrnými módy
(A=automatické, M=manuální)
2 d 3 Počet dimenzí N (1=?, 2=2D, 3=3D)
3 dd 29 ID prvního satelitu použitelného pro výpočet
4 dd 26 ID druhého satelitu použitelného pro výpočet
5 dd 22 ID třetího satelitu použitelného pro výpočet
6 dd 09 ID čtvrtého satelitu použitelného pro výpočet
7 dd 07 ID pátého satelitu použitelného pro výpočet
8 dd 05 ID šestého satelitu použitelného pro výpočet
9 dd 04 ID sedmého satelitu použitelného pro výpočet
10 dd N.A. ID osmého satelitu použitelného pro výpočet
11 dd N.A. ID devátého satelitu použitelného pro výpočet
12 dd N.A. ID desátého satelitu použitelného pro výpočet
13 dd N.A. ID jedenáctého satelitu použitelného pro výpočet
14 dd N.A. ID dvanáctého satelitu použitelného pro výpočet
15 d.d 1.7 PDOP (Position Dilution Of Precision) v metrech
16 d.d 1.0 HDOP (Horizontal Dilution Of Precision) v metrech
17 d.d 1.4 VDOP (Vertical Dilution Of Precision) v metrech
18 *xx 30 Kontrolní součet
RMC (Recommended Minimum Navigation Information)
Minimální doporučená informace pro navigaci

Příklad:

$GPRMC,170138.615,A,4912.2525,N,01635.0378,E,0.04,16.43,280705,,*32

# formát příklad komentář
1 hhmmss.sss 170138.615 Čas (UTC)
2 c A Status (A=OK, V=varování)
3 ddmm.mmmm 4912.2525 Zeměpisná šířka
4 c N Indikátor sever/jih (N=sever, S=jih)
5 ddmm.mmmm 01635.0378 Zeměpisná délka
6 c E Indikátor východ/západ (E=východ, W=západ)
7 d.d 0.04 Vodorovná rychlost (Speed Over Ground, v uzlech)
8 d.d 16.43 Kurz pohybu ve stupních
9 ddmmyy 280705 Datum ddmmyy
10 d.d N.A. Magnetická deklinace ve stupních
11 c N.A. Indikátor východ/západ (E=východ, W=západ)
12 *xx 32 Kontrolní součet
GSV (Satellites in View)
Informace o družicích

Množství údajů závisí na počtu viditelných družic. Jedna věta může obsahovat nejvýše 80 znaků, což vystačí pouze k uložení dat týkajících se nejvýše čtyř družic. Informace proto bývá rozdělena do několika dílčích vět.

Příklad (trojice vět):

$GPGSV,3,1,11,09,84,297,41,05,48,256,45,07,38,059,41,26,22,178,41*74
$GPGSV,3,2,11,24,13,063,00,14,12,324,00,30,12,251,00,22,12,286,38*78
$GPGSV,3,3,11,29,10,173,35,04,09,105,30,18,06,254,00*46

# formát příklad komentář
1 d 3 Celkový počet vět (číslují se od 1)
2 d 1 Číslo aktuální věty (taktéž se čísluje od 1)
3 dd 11 Počet viditelných družic
4 dd 09 Identifikační číslo družice
5 dd 84 Úhlová výška, kde se daná družice nachází
6 ddd 297 Azimut, kde se daná družice nachází
7 dd 41 Odstup signálu od šumu (SNR - Signal to Noise Ratio). Je-li tento údaj roven nule, nelze daný satelit využít k výpočtu polohy. Nejčastěji proto, že je zastíněn.
Podle počtu viditelných družic mohou následovat
další čtveřice údajů (4-7)
n *xx 74 Kontrolní součet
GGA - zeměpisná délka a šířka, geodetická výška, čas určení souřadnic

Příklad:

$GPGGA,170139.615,4912.2526,N,01635.0378,E,1,07,1.0,357.5,M,43.5,M,0.0,0000*7D

# formát příklad komentář
1 hhmmss.sss 170139.615 Čas (UTC), pro který platí údaje o vypočtené pozici
2 ddmm.mmmm 4912.2526 Zeměpisná šířka
3 c N Indikátor severní/jižní šířka (N=sever, S=jih)
4 dddmm.mmmm 01635.0378 Zeměpisná délka
5 c E Indikátor východní/západní délky (E=východ, W=západ)
6 d 1 Indikátor kvality:
0 — nebylo možno určit pozici
1 — pozice úspěšně určena
2 — pozice úspěšně určena (diferenční GPS)
7 dd 07 Počet viditelných satelitů 00 — 12
8 d.d 1.0 Vliv rozestavění družic na určení polohy
HDOP (Horizontal Dilution of precision)
9 d.d 357.5 Výška antény nad geoidem
10 c M Jednotka pro předchozí údaj (č.9) (M=metr)
11 d.d 43.5 Geoidal separation, rozdíl mezi WGS-84 zemským elipsoidem a střední úrovní moře (geoid). Znaménko mínus znamená, že střední úroveň země je pod elipsoidem.
12 c M Jednotka vzdálenosti pro předchozí položku (č.11) (M=metr)
13 d.d 0.0 Stáří poslední aktualizace DGPS. Údaj je uváděn v sekundách. Jestliže údaj chybí, nepoužívá se DGPS.
14 dddd 0000 Identifikační číslo referenční stanice pro DGPS (0000 — 1023)
15 *xx 7D Kontrolní součet

Blokové schéma zapojení:


Obr. 1: Blokové schéma zapojení

Celé zapojení je řízeno procesorem. K němu je připojeno ovládání. To však není nutností. Záleží na sofistikovanosti programu a na velikosti LCD. Další součástí zapojení je tedy LCD. Posledním blokem je modul s GPS. Tento modul většinou komunikuje pomocí TTL úrovní. Problém je však v tom, že úrovně jsou invertované. Existují dvě základní řešení, jak se s problémem vypořádat. Můžeme si napsat vlastní UART řadič, kde přivedeme signál na jeden z pinů. Každá změna úrovně nám vyvolá přerušení. Dále je tedy nutné stav převést na ASCI řetězec. Toto řešení však není nejlepší, jelikož softwareový UART velmi zatěžuje procesor. Nejednoduším řešením je zapojením invertoru (například tranzistoru, nebo již použít hotový obvod. Například 74HC14).

Principiální zapojení je jednoduché. Nejsložitejší z celého projektu (i nejnáročnější na procesor) je získání informací z datového rámce NMEA.

Pinout modulu Leadtek (pohled zespodu):


Obr. 2: Pinout modulu Leadtek (pohled zespodu)

Jednoduché schéma zapojení:


Obr. 3: Jednoduché schéma zapojení

Zdrojové kódy

Pro správnou funkci je potřeba si nadefinovat strukturu:

    struct gpsData  {
      char    utc[10];        // UTC date / ve formátu mm/dd/yy
      char    time[10];       //Hodiny ve formátu GMT hh:mm:ss
      double  latitude_f;     // Zeměpisná šířka v datovem typu double
      double  longitude_f;    //Zeměpisná délka v datovem typu double
      char    latitude[12];   // Zeměpisná šířka
      char    longtitude[12]; // Zeměpisná šířka
      char    speed[12];      // Rychlost v knotech
    };

Dále je zapotřebí napsat zdrojový kód pro ovládání sběrnice.

    char gps_get_char() {
      unsigned int in = 0;

      do {
        in = uart_getc();
      } while((in & UART_NO_DATA) || (in & UART_BUFFER_OVERFLOW));

      return((char) in);
    }

Nyní je zapotřebí vytvořit funkce pro zpracování GPS dat. funkce uint8_t get_GPS (char *find, char *GPSbuf) slouží k získání a kontrole dat z GPS modulu.

    uint8_t get_GPS (char *find, char *GPSbuf) {
      uint8_t nLoop = 0;
      uint8_t rValue = 0;

      do {
        do {
          dat = gps_get_char();
        }  while ((dat != '$') && (dat != 0));

        if (dat == 0)
          break;

        GPSbuf[0] = '$';

        for (nLoop = 1; nLoop < 7; nLoop++) {
          dat = gps_get_char();
          GPSbuf[nLoop] = dat;
        }
      } while ((strncmp(GPSbuf+0,find,6)!=0) && (dat != 0));

      if (dat != 0) {
        while ((dat !='\n') && (dat != 0)) {
          dat = gps_get_char();
          GPSbuf[nLoop++]= dat;
        }
        if (dat != 0)
        rValue = 1;          // if process complete -> return True;
      }
      GPSbuf[nLoop] = '\0';
      return rValue;
    }

Funkce static char *field(char *string, short n) slouží k nalezení řetězce určeného číslem. Je využita ve funkci sscanf.

    static char *field(char *string, short n) {
      static char result[100];
      char *p = string;

      while (n-- > 0) {
        while (*p++ != ',');
        strcpy(result, p);
        p = result;
        while (*p && *p != ',' && *p != '*' && *p != '\r')
          p++;
      }
      *p = '\0';

      return result;
    }

Poslední funkcí je zpracování a získání dat z GPS modulu.

    void processGPRMC(char *string) {
      char s[20], d[20];

      memset (s, 0, sizeof s);
      sscanf(field(string, 9), "%s", d);        // Datum: ddmmyy
      strncpy(s, d , 2);                        // Kopírovani roku
      strncpy(s + 2, d + 2, 2);                 //Kopírování datumu
      strncpy(s + 4, d + 4, 2);
      strcpy(gNMEAdata.utc, s);
      memset (s, 0, sizeof s);
      sscanf(field(string, 1), "%s", d);        // Čas: hhmmss.sss
      strncpy(s + 0, d, 6);                     //Kopíruj  hodiny minuty sekundy
      strcpy (gNMEAdata.time,s);
      sscanf(field(string, 7), "%lf", &gNMEAdata.speed);
      sscanf(field(string, 3), "%s",  gNMEAdata.latitude);
      sscanf(field(string, 5), "%s",  gNMEAdata.longtitude);
    }

Pro zobrazení dat stačí jen zavolat předchozí funkci.

    processGPRMC (buf);
      //nyní stačí jen nějákým způsobem vypsat proměnné. (nebo je možné je vypsat na LCD)
    printf ("\r%s,%s,%c,%s,%s",
            gNMEAdata.utc,
            gNMEAdata.time,
            gNMEAdata.status,
            gNMEAdata.latitude,
            gNMEAdata.longtitude
           );

Realizace prototypu

Prototyp je obohacen o záznam trasy z GPS na micro-SD kartu (systém souborů FAT16) a o baterii. Záznam do souborů je zapisován ve formátu NMEA. Které je možné vizualizovat v programech na PC (formáty: kml, gpx a jiné).


Obr. 4: Fotografie prototypu

Možnosti zpracování GPS Dat na PC

NMEA data je možné zpracovat pomocí různých programů na PC a je možné je vizualizovat různými způsoby. Mezi nejznámější programy patří například Google Earth.


Obr. 5: Zpracování GPS Dat na PC

Je možné zobrazovat výškové profily, rychlostní profily, maximální rychlosti, trasu na mapě a mnohé jiné možnosti.

Závěr
Celé zařízení bylo navrženo s ohledem na maximální mobilitu, nízké výrobní náklady a maximální funkčnost. Je jasné, že počítač pro turistiku není jediná z možných aplikací. Zařízení by se dalo s úspěchem využít například jako modul pro tvorbu knihy jízd v automobilech. Výstupem zařízení je datový soubor ve formátu NMEA 0183, který je možno následně zpracovat. V laboratoři je však obtížné pracovat se zařízením. Bylo by zapotřebí externí antény, aby bylo možné přijímat GPS signál. Jiným řešením do laboratoře by však bylo možné realizovat emulátor GPS vět. Zajímavé srovnání je také srovnání přesnosti časového signálu s příjmem DCF77 (Bc. Jan Bohátka). Pro nastudování NMEA formátu je možné využít NMEA Reference manual.

Literatura:
[1] Atmel Corp.: výrobce polovodičových součástek [cit. 20. února 2009]. Dostupné na WWW: http://www.atmel.com
[2] Leadtek Rasearch Inc.: výrobce GPS modulu [cit. 20. února 2009]. Dostupné na WWW: http://www.leadtek.com

Autor: Tomáš Götthans, UREL, FEEC, VUT Brno







GooglePlus1 FaceBook Twitter del.icio.us DiGG Google StumbleUpon Google Buzz Email RSS PDF Tisk

Komentáře (9):

Zobrazit starší 30 dnů (9)...

host
9. Dne 09. 02. 2011 v 13:34 zaslal host
Bez titulku
Pěkný článek. Děkuji autorovi.


Název příspěvku: Vaše jméno: host
                 
  Zakázat formátování [Zakáže kódování a nahrazování smajlíky.]
Připojit soubory
reklama:
XPort XE
Síťový převodník řady Xport, integrovaný do konektoru RJ45
Skladem od 850 Kč

Informace uvedené v článcích jsou platné v době jejich vydání a samotné články jsou určeny pouze jako zdroj informací. Autor článku ani správce webu nenesou žádnou zodpovědnost za případné újmy na majetku a zdraví. Názvy společností a výrobků, loga a další multimediální materiál mohou být ochrannými známkami příslušných společností.
RSS kanály: | |
+420 723 846 377
info@pandatron.cz
Všechna práva vyhrazena | mobilní verze | © Copyright 2000 - 2016 ISSN 1803-6007