this page documents a quick
project done for HackDay on Aug 14 2020
by Ralph Klimek
this documents a GPS satellite reciever biult using a uBlox Neo
gps reciever module.
this module contains a fully self contained gps reciever. It outputs gps
messages in NMEA formatted sentences.
these sentences are human readable, but human parseable. It
requires a program to intercept and interpret
the sentences into something displayable. Here I have used a
program gpsmon which can be compiled for Linux and is also
avaialble as pre compiled binary on major Linux distros.
My project dev board contains two step down power regulators,
5 volts and 3.3 volts for the uBlox Neo module.
The five volts powers the RS232 driver. The 3V3 regulator powers the
There is also required a 3v3-to-5v logic level conversion
circuit, as the logic levels are not compatible.
I have used a MAX232 RS232 driver . This simplifies the logic
level conversion and contains a biult in negative 12v inverter , saving
the considerable trouble in sourcing a bipolar 12V power supply.
The uBlox Neo module includes a monitor led that displays
power on status and once satellite acquistion has been achieved and a
geographic fix has been attained, it will flash at precisely one pulse
I have broken out the PPS signal and made it available on the RS232
interface. the GPSMON program can monitor PPS
transitions on the serial input. This can form the basis of a stratum
one NTP server once the linux kernel module is compiled. This
will be attempted in the fullness of time.
The GPSMON program displays UTC from the NMEA sentences.
This time is the actual TRUTH as defined by the GPS satellite
constellations consensus locked rubidium atomic clocks. The
GPS constellation no longer uses the caesium clocks
due to their inherent limited lifetime issues.
My dev module has 4 yellow leds to monitor transistions on
the RS232 lines. This is to facilitate diagnosis.
My module also accepts NMEA control sentences from the linux host.
These can change the operational modes of the GPS reciever.
By default it runs in so called navigational mode.
I would like to run it in survey mode.
The differance is that in survey mode I tell the gps reciever that it
actually is fixed and stationary. In this mode it is perfectly capable
of measuring continental drift.
You might be able to see oon the screen shot of the GPSMON program an
aparent bearing and heading. This is a computational
artifact. It thinks , because it is in navigational mode,
that I am moving. This is a slight strectch of the
imagination. This shed is firmly fixed to the earth and
barring an asteroid impact, is not moving.
It correctly tells me that I have an elevation of 7 meters ASL.
it also displays my navigation fix.
I am HERE....by definition.
I have not yet been able to get my gps reciever to accept commands. I
know it is listening for them.
It just replies "Unknown Command". I think it needs to hear a
special control character string to wake up its command mode.
It is buried in a 500 page manual that uBlox has kindly
provided. Another day, perhaps.
I would like to tell it to run in "survey" mode. This tells
the reciever that it is stationery. In order to measure
continental drift I also need to tell the length of the coaxial cable
between the reciver and the antenna, so that it can account for the
time delay along the 7 odd meters of cable between me and the antenna.
The antenna is a quarter wave vertical, with circular groundplane cut
for 1500 Megahertz. It hides from the weather underneath
a PET resin disposable drinking cup.
The 7 meter coax line between me and the antenna accounts for nearly
15dB of line loss. Despite this, the reciever reports an
average of about 30dB signal to noise which is perfectly
sufficient to achieve a navigation fix.
One of the NMEA sentences also gives a statistical figure of merit for
the accuracy of the navigational fix, the HDOP and the
VDOP....Horizontal Dilution of Precision.
gps module was abtained from Altronics , from the remaindered bargain
bin. The modules were defective due to poor soldering of the Neo
uBlox module onto the carrier board. I have had to resolder
reflow it. This was quite diffiuclt as the components are very small.
The tin has become detached from the Neo module. It is amazing to
think that this tiny asic contains an advanced multi channel UHF
reciever with DSP and includes two 32 bit ARM microprocessors, one for
calculating the navigational fix and decoding the GPS satellite data,
and another, "just for show". It is available to the user for
their own proprietary use. With this, one could using just this
module create a completely stand alone IoT thingy to
provide time or day and or navigational fix.
The most usefull
feature to me, and the real purpose of this hack, is the PPS signal.
It is a pulse with a repetition rate of exactly one puse per
second as derived from the GPS satellite constellation. As
it is a software derived signal, it has a natural jitter, rated at only
45 nanoseconds. However, over time, the average pulse rate is
locked to the orbiting atomic clocks and this can be use to discipline
a precision oscillator or provide a time reference that is UTC. Only a
local rubidium atomic clock would be more accurate. I do not have
one , yet.
back to homepage