Skip to content


For the last couple of months I have worked on a number of small projects, including the repair of a Rubidium frequency standard that I bought cheaply off of Ebay. But while these frequency standards have exceptional stability and aging characteristics, they still need to be calibrated from time to time.

For that purpose, I bought a 10-digit frequency counter, a Racal 1998. I also obtained a number of GPSDOs. GPSDO is short for "GPS Disciplined Oscillator". You can buy them for less then €100 as they are commonplace telecom equipment and found as frequency and time references in cellular network base stations. Network operators replace them routinely and the scrap can be found on the usual online marketplaces.

A GPSDO consists of a local oscillator of good quality and a GPS receiver. Most of the time the LO is an OCXO, an Oven Controlled Crystal Oscillator. As the name suggests, an OCXO is a crystal oscillator where the crystal is heated to a stable temperature well above room temperature (50°C to 60°C is not uncommon). This heating foregoes crystal aging and reduces the frequency drift to a few PPB over time. It also reduces the influence of environmental temperature changes, which would otherwise affect the stability of the oscillator output.

The GPS receiver provides a timing reference, typically in form of a 1PPS (one-pulse-per-second) signal that has exceptional long-term stability. The timing signal is used to compensate the remaining aging of the LO. A GPSDO combines the short-term stability of a crystal oscillator with the long-term stability of an exact timing reference.

The concept of the GPSDO got me interested and I started wondering how it could work. The trivial approach is, as the timing pulses arrive in constant intervals, it should be easy to just count the cycles of the LO between two pulses and adjust its frequency according to the result. However, the frequency of the LO is usually 10MHz, i.e. 100ns cycle time. That would result in a frequency accuracy of only +/- 100ns/s, or 100ppb. For a 10MHz frequency, that computes to +/- 1Hz of deviation. Definitely not very accurate, and the output would wander between the two extremes constantly, so it wouldn't be very stable, either. Another appruach is needed.

Over on the EEVBlog forum I found a number of DIY GPSDO projects and one of them intrigued me through its simplicity and performance. Conceptually, it is similar to a number of other DIY projects: Instead of implementing a frequency counter, a PLL compares the phase offset between the time signal pulse and a selected edge of the LO output. This phase offset is then eliminated by the PLL regulation.

A very simple implementation of this design is the GPSDO by James Miller, G3RUH (link). The output of an XOR phase discriminator is low-pass filtered, buffered and directly applied to the control input of an OCXO.

Another design variant feeds the output of the phase discriminator into the ADC of an Arduino (or similar) micro controller, which then implements a PLL in software to lock the LO to the GPS timing signal. These designs achieve a measurement resolution in the single nanosecond range. Averaging the measurements over a longer time period (hundreds of seconds) achieves the necessary stability. The most simple implementation of this design is Lars Walenius' DIY GPSDO, which was discussed on the EEVBlog forum in great detail.

The design I came up with, with the help of  other forum members, follows the same principle but uses an integrated Time-To-Digital converter instead of an analog interpolator. This avoids some of the problems with temperature drift and selection of suitable components that complicate reproducibility of Lars Walenius' design.

The heart of the design is the TDC7200 by Texas Instruments. Its original use case are ultrasonic flow meters but at its guts it's just a stopwatch. It measures the time between a start and a stop signal presented to its inputs. With a resolution of around 55 picoseconds it's much more sensitive than needed. It's cheap, requires only few external components and can be controlled through a SPI interface.

The following graphic shows a high-level outline of the GPSDO.

GPSDO High-Level Design

The timing signal from the GPS receiver (1PPS) is fed into a Time Interval Counter (TIC) together with a 10MHz reference signal from the LO. In my case, the LO is a Datum LPRO-101 Rubidium frequency standard. A small micro controller, an STM32F042, acts as the central intelligence of the system. It reads the measured time interval between the GPS 1PPS signal and a selected edge of the LO signal and computes a correction factor to be applied to the LO frequency. A DAC converts the correction factor to an analog voltage which is then applied to the adjustment input of the LO.

The controller also connects to the GPS receiver to allow configuration of the time pulse, start a self-survey, provide a known location or simply query status of visible and tracked satellites.

The GPS receiver itself is a Ublox NEO-M8T timing receiver that can work in "overdetermined clock" mode to achieve better precision of the time pulse signal. I bought two modules on Ebay for about 25€ each and designed a small breakout PCB that can be plugged onto the main GPSDO PCB.

3D rendering of the GPSDO

The project is more or less complete now and I'm working on a few minor improvements, but the design itself has been verified and it works very well.