Individální projekty MPOA

Mikroprocesory s architekturou ARM

Uživatelské nástroje

Nástroje pro tento web


2016:gps-demo

Vizualizace pro GPS přijímač

Zadání

Pomocí sériového rozhraní připojte k mikrokontroléru GPS přijímač standardu NMEA-0183 / SiRF OSP. Zvolte vhodný grafický displej a vizualizujte dostupné údaje, zejm. vlastní pozici a používané družice. Inspirujte se programem SiRFDemo.

Úvod

Globální družicový polohový systém se skládá z konstelace 24 družic které umožňují vypočítat polohu přijímače s celosvětovým pokrytím. Vzhledem k dálkoměrnému principu určování polohy je třeba ke stanovení polohy přijímat signály minimálně od čtyř družic. V dnešní době příjímače pracují se signály amerického (GPS) i ruského (GLONASS) systému a je tak zabezpečeno dobré pokrytí i v odlehlých oblastech.

Příjmací zařízení na základě přijatých signálů vypočítá současnou polohu a sériovou komunikací přenáší tyto data uživateli ve formě zpráv. Běžně využívané standardy jsou SiRF OSP a NMEA0183, který byl použit při realizaci tohoto projektu.

Význam zpráv NMEA 0183

Použitý standard NMEA je textový, jeho zpráva je tvořena ascii znaky a má následující formát:

  $XXYYY,a1,a2,a3,....,an*cc

XX - typ vysílače, YYY - druh zprávy, a1-an - přenášená data, an*cc - kontrolní součet

Pro vizualizace byla použita zpráva GGA(údaje o poloze přijímače) a GSV(údaje o poloze družic). Více informací o těchto zprávách lze nalézt např. zde.

Vývojový kit STM32F429i Discovery

Jedná se o vývojovou desku osazenou mikroprocesorem s architekturou Cortex ARM-M4 s frekvencí 180MHz. Dále je deska osazena 2MB pamětí SDRAM a především QVGA LCD displejem, který bude použit pro vizualizaci. Z dostupných periferií je dále použito rozhraní UART5 pro komunikaci s GPS přijímačem.

  Obr.1 STM32F429i Discovery

GPS přijímač

Pro příjem GPS signálu byl vybrán kapesní přijímač BR-355S4 který umožňuje standardní příjem GPS signálu a poskytuje GGA, GSA i GSV zprávy. Komunikace probíhá po sériové lince s rychlostí 4800Bd. Protože GPS přijímač komunikuje s úrovní RS232, byl do komunikační cesty zařazen RS232→TTL převodník úrovní.

  Obr.2 GPS přijímač BR-355S4  

Firmware

Pro vývoj programu bylo pro svoji rychlost a jednoduchost použito online vývojové prostředí mbed.org. Odtud byly také převzaty potřebné knihovny.

 #include "mbed.h"
 #include "LCD_DISCO_F429ZI.h"
 #include "GPS.h"
 

Oficiální knihovna pro použitý LCD displej LCD_DISCO_F429ZI obsahuje množství funkcí které umožňují zobrazovat na displeji text v různých formátech a jednoduché tvary. Základ pro parsování přijatých zpráv byl převzat z knihovny GPS dostupné na mbed. Tato knihovna byla dále upravena a rozšířena dle požadavků projektu.

 void GPS::getline() {
 	while(_gps.getc() != '$');	// wait for the start of a line
 	for(int i=0; i<256; i++) {
 		msg[i] = _gps.getc();
 		if(msg[i] == '\r') {
 			msg[i] = 0;
 			return;
 		}
 	}
 	error("Overflowed message limit");
 }
 GPS::GPS(PinName tx, PinName rx) : _gps(tx, rx) {
 	_gps.baud(4800);	
 	longitude = 0.0;
 	latitude = 0.0;		
 }
 
 int GPS::sample() {
 	float time;
 	char ns, ew;
 	int lock;
 
 	while(1) {		
 		getline();
 .
 .
 .
 if(sscanf(msg, "GPGGA,%f,%f,%c,%f,%c,%d,%d", &time, &latitude, &ns, &longitude, &ew, &lock, &snum) >= 1) { 
 .
 .
 .
      sprintf((char*)text, "Lat: %f %c", gps.latitude,gps.xns);
      lcd.DisplayStringAt(0, LINE(1), (uint8_t *)text, CENTER_MODE);
    
      sprintf((char*)text, "Lon: %f %c", gps.longitude,gps.xew);
      lcd.DisplayStringAt(0, LINE(2), (uint8_t *)text, CENTER_MODE);
      
      sprintf((char*)text, "Sat. in view: %d", gps.siv);
      lcd.DisplayStringAt(0, LINE(3), (uint8_t *)text, CENTER_MODE);
      

Po inicializaci program čeká na přijmutí dat z GPS přijímače. Přicházející data jsou zapisována do bufferu msg[256] a po přijmutí celé zprávy je tento buffer postoupen parsování. Podle významu zprávy se pak zapíší příslušné hodnoty do proměnných k zobrazení na displej. Mačkáním talčítka lze přepínat mezi první obrazovkou s údaji o pozici přijímače a grafem s polohami družic a druhou obrazovkou s číselně vyjádřenými polohami družic. Zdrojové soubory jsou k dispozici zde.

Videoukázka

Závěr

V rámci projektu byl vyvinut firmware pro vizualizaci dat přijatých GPS přijímačem. Na displeji je zobrazena poloha přijímače, dále polohy viditelných satelitů absolutně a graficky relativně vzhledem k přijímači. Při práci na projektu se však nepodařilo přijmou údaje o všech družicích. Z neznámých důvodů je přijata pouze první zpráva GSV v sérii(informace o prvních čtyřech satelitech).

2016/gps-demo.txt · Poslední úprava: 2017/01/15 17:13 autor: Jan Veselý