Updated: Jun 29, 2019
My product GPS Referenced RF generator is a low cost solution for a tough problem. How to frequency calibrate you equipment.
Thanks to the GPS network and the introduction of GPS chips with built in oscillators that are frequency-locked to the clocks in the GPS satellites, it is now relatively straight forward to get a frequency accurate RF signal that can be used for calibration purposes.
Although GPS disciplined oscillators have been available in commercial as well as home built variants for many years they are all rather expensive to buy or build.
One good example of such equipment is the HP Z3805. The HP Z3805 includes an oven stabilized low-noise quartz controlled oscillator that is getting adjusted in frequency by the GPS network. It is a great piece of equipment but one downside of Z3805 and in general most GPSDO is that they take a long time to stabilize. It can take a day or two for them to get within the specification in frequency.
So they should more or less always be on if they are to be useful.
Another downside is their high cost.
I do not keep my equipment constantly powered on so to have something useful for frequency calibration I use a Rubidium oscillator. The Rubidium oscillator only needs a few minutes for stabilization. It is not as precise as the Z3805 - it's 10MHz output is off by about 7milli Hz.
That is is still good enough for me in most cases.
To make sure the Rubidium oscillator do not change frequency over time, I calibrate it against the HP Z3805 every twelve month.
This is a workable solution for me but It is using a lot of expensive equipment and I had a desire to find something that could be used at a lower cost and power consumption.
Low cost solution - Neo-6 GPS Module
I had known about a few modules that could output a GPS referenced frequency, primarily the old Trimble series. They did the job but was still somewhat expensive and and could only output up to 100kHz. It would be nicer with a higher frequency output to calibrate 10MHz oscillators. And preferable something that was still being manufactured.
I then found out that the well known and low cost Ublox Neo-6 GPS module has an output that can be set to any frequency between 0 and 10MHz
I got the initial information from the "Chat with the Designers" blog and podcast.
So I started experimenting with a module and how to program it using a PC and a USB to serial converter.
Although it worked well - I wanted to have an Arduino that could do all the programming so it could be a standalone thing and preferably be controlled by other electronics without the use of a PC.
The GPS Referenced RF Generator
That was the impetus for my product the GPS Referenced RF generator 1Hz to 10MHz
This gadget is pretty simple but still very useful. It has an on board Arduino that programs the Neo-6 module at boot time. It simply instruct it to output a specific frequency on it's timing output pin. And once it gets GPS lock it will do just that. The most common use for it is to use in a calibration scenario and have it output for example a 1 MHz signal. The signal will be somewhat jittery but that can be tolerated as it is very frequency accurate as oscillator is PLL locked to the Cesium clocks in the GPS satellites. It wont directly compete with a HP Z3805 that has a very low noise and low jitter output - but the accuracy if you integrated it over some time would potentially be the same. And considering I sell these for 29$ the price/performance ratio is very hard to beat!
So how would you use this to calibrate something?
You typically use an oscilloscope with two channels.
One channel will measure the output from the oscillator to be calibrated and the other channel is feed form the GPS Referenced generator.
You then trigger on one channel and watch the two traces. If they differ in frequency one of them will move sideways.
When they both are on the same frequency they will be stationary and do not drift in either direction. You can see the effect in this video by W2AEW.
Although the output from the GPS RF generator is very stable in frequency it has some jitter on the signal. Internally it has a PLL oscillator running on 48MHz.
To get the most stable output with low jitter one should pick an output frequency that is an integer division of 48MHz. For example 6MHz will be a nice and stable output because 48MHz/8 is 6MHz.
But on the other hand 10MHz is not an integer division from 48MHz so even-though you can command the GPS to output 10MHz it will be a much more jittery than if you used 1, 2, 4 or 6MHz output. If you use an oscilloscope to frequency calibrate as outlined above, the two signals do not actually need to be on the same frequency, it is enough if they have a fixed relationship.
So you could easily calibrate a 10MHz oscillator with a 2MHz calibration signal from the GPS RF Generator.
Improved firmware with the help of a professional software developer.
My GPS Rf generator normally came programmed to output a 1MHz signal and could be changed by recompiling the Arduino code. The way I set frequency in the Arduino was to more or less send out a block of data that I had sniffed out from the U-Center software while it programmed a module. I did it this way because I had not fully worked out the algorithm how to set it to an arbitrary frequency. So I included the data-blocks to program the GPS output for a handful of frequencies.
If you wanted a frequency that I had not sniffed out then you were out of luck or you had to try to figure it out yourself using the U-center software. Then one of my customers - Jeff Epler - decided to improve the firmware for it.
Jeff Epler is Software developer by trade that tinkers with electronics. He contacted me regarding the GPS RF Generator and we had some emails exchanged when he mentioned that he had figured out how to program the GPS module to any frequency. He graciously agreed to share the code with me and a week later he uploaded it to Github. Jeff had also created a small Serial command API so we now can send commands to it to set it to any frequency. He also created a few other improvements and I topped it off by adding support for saving a configuration in EEPROM to be used at next power on. And as a result - out came a much improved firmware that is now in use in the latest editions.
So check out the latest firmware if you have this product or if you are just a Neo-6 user in general. I don't know of another Arduino opensource software for the Neo-6 that can set the timing output to any frequency. Thanks goes out to Jeff Epler for sharing his software skills with us and improving the utility of the GPS Referenced RF generator