GPS Receiver

Tomáš Götthans, UREL, FEEC, VUT Brno
xgotth00stud.feec.vutbr.cz

Obsah:

  1. Úvod
  2. Realizace
  3. Závěr
  4. Literatura

Úvod

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
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čstě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í:



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):



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é).



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.



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/