this page documents a quick project done for HackDay on Aug 14 2020
by Ralph Klimek 13-Aug-2020

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 gps module.

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 per second.

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 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.

The 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.

IMG_0752-gps-dev.JPG IMG_0753-gps-dev.JPG IMG_0754-gps-dev.JPG
my GPS dev board uBlox Neo GPS reciever my GPS dev board data led
IMG_0756-gps-antenna.JPG IMG_0757-gps-antenna-closeup.JPG IMG_0763-gps-display-hat.JPG
external 1500Mhz antenna
the little radome is a disposable PET wineglass. Gets good signal in heavy rain and dew.
external 1500Mhz antenna
look carefully, the monopole is just visble. It is only a piece of brass tube soldered directly to the BNC socket on the groundplane, cut to be approx a 1/4 wavelength at 1500Mhz
a POS display hat, to be used to display GPS time, another day

two little movies of this thang doing its thang
MVI_0755-gpsmon.AVI MVI_0761-gpsmon.AVI


back to homepage