Handgestrickter GPS-Receiver in einem FPGA

Die Bereitschaft der GNSS-Receiver-Hersteller, die Rohdaten zur Verfügung zu stellen scheint sich in letzter Zeit nicht signifikant zu verbessern. Dies muss inzwischen aber niemanden mehr ärgern oder allzu tief in die Tasche greifen lassen. Inzwischen gibt es gute Referenzimplementierungen für selbst gemachte GNSS-Receiver. Den Anfang machte Andrew Holme mit einem Spartan-3-FPGA in Zusammenarbeit mit einem Raspberry Pi.

Die Besonderheit bei diesem Projekt ist die Programmierung des FPGA mit Forth. Sicher keine Allerweltssprache aber für den Zweck hervorragend geeignet. Der Sprachcore passt ohne Probleme in den inzwischen recht kleinen Spartan 3 mit unter 10k Logic Cells. Das Projekt ist ein hervorragender Ausgangspunkt für eigene Entwicklungen.

Basierend darauf hat John Seamons vor kurzem eine eigene Implementierung mit einem Spartan 6 und einem Beaglebone Black gemacht. Der FPGA wäre tatsächlich in der Lage, die Rohdaten aufzubereiten und der Prozessor auf dem Beaglebone hätte genug Power, die Differenzsignale zu berechnen. Die Kosten für eine solche Kombination sind allerdings derzeit noch mit knapp 150€ zu hoch. Spannender könnten dann Systeme sein, die über einen Zynq-Prozessor von Xilinx verfügen. Dieser hat zwei vollwertige ARM-Kerne und einen groß bemessenen FPGA gleich mit drin. Für $15 pro Zynq liessen sich wesentlich kostengünstigere und stromsparende GNSS-Reciever bauen.

 

2 thoughts on “Handgestrickter GPS-Receiver in einem FPGA

  1. Ich hab mir das Projekt von Holme angesehen verstehe aber nicht, wofür er auf dem FPGA Forth braucht. Eigentlich könnte er die Signale doch einfach aufbereiten und durchreichen. Oder arbeitet er an der Stelle schon mit der Rtklib?

    • Nein, die RTKLib verwendet er gar nicht. D.h. es kommen keine Korrektursignale oder Daten externer Sensoren zum Einsatz. Die Verwendung von Forth ist eine absolut geniale Idee. Erstens wäre das RaspberryPi überfordert mit der Verwaltung der reinen Sat-Daten. Mit Forth hat er eine Sprache, die auf dem RasPi generiert werden kann (ähnlich, wie es ein SQL-Wrapper in PHP tut) und diese Befehle an das FPGA schicken. Damit wäre im Prinzip auch eine Umsetzung der RTKLib möglich. D.h. einige Teile würden von der CPU übernommen und einfaches Shiften von Daten könnte im Spartan6 stattfinden.

      Wir testen grade den Aufbau mit einem Mojo am BeagleBoard Black. Das FPGA-Board verfügt über reichlich DigitalIOs und vor allem über 8 Analog Inputs. Womit letztlich sogar schon ein erster Schritt zu einem sphärischen Antennen-Design getan wäre. Die analogen Inputs werden dann an mehrere Forth-Prozessoren gleichzeitig geroutet und die Laufzeitverzögerung gemessen. Letztlich ähnlich diesem Vorschlag hier: http://www.golem.de/news/satellitennavigation-neuartige-antenne-soll-gps-empfang-verbessern-1309-101789.html

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>