Leaning Tower's "Pure Analog" GPS Receiver Is a Five-Board Marvel with a TinyFPGA BX at Its Heart
Inspired by others' efforts in the same field, Tower's receiver can pick up and decode NAV messages from GPS satellites.
Pseudonymous amateur radio engineer "Leaning Tower," hereafter simply "Tower," has built a "pure analog" receiver for Global Navigation Satellite System (GNSS) signals like GPS — using a TinyFPGA BX board and a couple of Microchip ATtiny85 microcontrollers.
"[This is] a pure analog Global Positioning System (GPS) data receiver that can receive the Navigation (NAV) message from the GPS satellite," Tower explains of the project. "The receiver is a dual conversion receiver that includes five homemade PCB boards. A TinyFPGA is used for generating the Coarse Acquisition (C/A) code which retrieve the direct-sequence spread spectrum (DSSS) GPS signal submerged below the thermal noise level."
Inspired by previous efforts in simple homebrew GPS receivers, including projects by Matjaz Vidmar, Andrew Holme, and Dan Doberstein, the "pure analog" receiver is split across five distinct modules: a mixer board, a local oscillator, a second mixer and correlation board, a signal processing board, and an interface to the FPGA which runs gateware for code tracking and locking and for recovering the NAV message data.
"The final success [took] several weekends for troubleshooting," Tower admits. "The most significant problem is cause by the interference of the 24.552MHz system clock generator. Originally I was using a Si5351's programmed output as the system clock, however it generates a bunch of tones within the bandwidth of sensitive GPS antenna. Since it is hard to find any crystal works at this frequency, a final solution is done by the decapping [of] a 24.576MHz crystal and modifying the frequency by a Sharpie pen. It is also frequency stabilized through external temperature controller."
"It usually takes several minutes to lock to a satellite," Tower adds of the device's performance. "A digital voltage meter is added to the RSSI output of the SA615 for monitoring the signal strength. The background noise gives a RSSI output around 2V and gives a reading between 2.3 to 3V when it is locked to a satellite. I use another GPS receiver to determine the SVID of the satellite I could find."
Schematics and code for the project are provided on Tower's GitHub repository, under an unspecified open source license, along with considerably more detail on each of the five boards.
Freelance journalist, technical author, hacker, tinkerer, erstwhile sysadmin. For hire: freelance@halfacree.co.uk.