dijous, 26 de gener de 2012

GPSDO(III) : Comunicacions PIC-GPS

Continuant amb el projecte, el següent pas era comunicar el mòdul GPS amb un microcontrol·lador per a poder utilitzar el sistema de forma autònoma, és a dir, sense connexió a un ordinador.

Per a aquesta tasca he escollit un PIC 18F2550, que disposa d'un mòdul dedicat a les transmissions per port sèrie, protocol que utilitza el mòdul Motorola, a més de molts altres perifèrics que poden ser útils de cara a la continuació del projecte. En l'implementació que us mostre, el microcontrol·lador treballa a una freqüència de 8 MHz, i la font del senyal de rellotge és un oscil·lador intern que incorpora aquest model.

En un principi he cablejat aquest PIC en paral·lel sobre el conversor MAX232, de forma que es puga extraure el senyal abans de la conversió TTL-RS232, permetent l'operació tant en mode autònom com en mode connectat. Després he desenvolupat un fragment de codi en C per tal de provar la correcta operació de les comunicacions entre el PIC i el GPS, i connectant el muntatge a l'ordinador he aconseguit transmetre dades en els dos sentits amb unes condicions de comunicació semblants a les del mòdul GPS, és a dir, a 9600 bauds, 8 bits de dades, 1 bit de parada i sense control de paritat.

Desxifrant aquesta darrera frase: les dades passen d'un dispositiu a un altre a un ritme de 9600 bits cada segon, agrupats en blocs de 8 bits (1 byte per transmissió), i seguits d'un bit que indica el fi de la transmissió:


Pel que fa al mòdul GPS, amb la configuració actual envia pel port de comunicacions diversos missatges, dels quals el més interessant és el que comença amb @@Ea. Aquest missatge aglutina tota l'informació bàsica, és a dir, el temps i la posició, a més de detalls sobre la qualitat del senyal rebut o un codi de protecció contra errors. A continuació mostre una trama capturada en format binari de Motorola:

@@Ea011A07DC122402000AC44E0894E390FFFE2745000029BF0000000000120769002A0005041A082DA20E00000008000000050826A2200000001C0828A2020000200F0831A220


Aquesta trama indica que a la seua recepció són les 18:36:02,000705614 hores del dia 26 de gener del 2012, i que la antena de l'aparell es troba a aprox. 39º 59' N i aprox. 0º 2' W. A més, indica que el receptor s'està movent a una velocitat de 0,18 m/s, amb una direcció 187,9º i que la dilució de precisió és de 4,2 metres. Aquest darrer paràmetre és una mesura indirecta de la qualitat del senyal rebut. Cal aclarir que l'hora rebuda està referenciada al Temps Universal Coordinat (UTC).

La tasca del PIC és decodificar aquestes trames i realitzar càlculs per prendre decisions sobre la magnitud i la direcció de l'ajust sobre la freqüència de l'oscil·lador principal (el OCXO), de forma que es mantinga regulada a exactament 10 MHz gràcies a aquesta sincronització. Com vaig comentar en posts anteriors, la diferència de temps entre dos senyals successius no és d'exactament 1 segon, fet que obliga a promediar per obtenir una bona estabilitat a curt termini.

Entorn de programació i correcció d'errors MPLAB
En l'anterior captura de pantalla es veu el programa utilitzat en el microcontrol·lador per capturar les trames del GPS i el resultat d'una captura vist com a caracters hexadecimals (columna Watch). El programa s'ha transferit al PIC utilitzant un programador PICkit2. En aquesta ocasió he pogut rebre amb èxit una transmissió de posició i temps com la mostrada més amunt. Faltaran per implementar funcions per a configurar el mòdul sense connectar-lo a l'ordinador, i altres per permetre mostrar l'informació relevant a un display LCD.

Per experiència prèvia sé que aquesta tasca requerirà un segon microcontrol·lador, ja que la transferència de dades al display LCD és molt lenta, i ocupa el processador amb rutines de retard (bucles on no s'executen instruccions útils). Intentaré per tant transmetre les dades entre els dos microcontrol·ladors per un bus de comunicacions tipus I2C, lliurant el principal dels retards innecessaris i guanyant d'esta manera capacitat de càlcul, necessària per a la fase de sincronització dels oscil·ladors.

Pròxim pas: escriure un algoritme per treure la mitjana i poder ajustar la freqüència de l'oscil·lador principal.

1 comentari:

Unknown ha dit...

La explicació de com s'estan fent les medicions és més que detallada. Facilita l'entendibilitat per a una persona com jo que no té uns grans coneixements en l'àrea de l'electrònica i de programació. Enhorabona.