Electronics > Projects, Designs, and Technical Stuff

Yet another DIY GPSDO - yes, another one

(1/174) > >>

I have been following the thread by the late Lars about his inspirational DIY Arduino GPSDO project. And I checked the dozen or so GPSDO projects published on the net.
Then I decided to join the party and design and build my own.  :palm:
I didn't quite know what I was getting into, but after a couple of months waiting for the parts to come from China, and then another couple of months writing the firmware, I have a working, blinking, timekeeping and happily and precisely oscillating GPSDO.  :-+
The main differences with Lars' design are:
- Modular and as much as possible, follows the K.I.S.S. design rule.
- It's based on an inexpensive yet powerful 32-bit STM32F411 MCU development board, the WeAct Black Pill running at 100MHz.
- It uses a digital FLL, not a digital/analog PLL. New! It can also use a PLL, see post #131 on page 6 in this thread.
- It can be put together on a breadboard in one afternoon (provided one has all the parts).
- It works practically "out of the box". There is nothing to adjust.
- It has an optional small OLED display.
- It has an optional BMP280 atmospheric pressure and temperature sensor.
- It has an optional AHT10 temperature and humidity sensor. Note: for new builds, the drop-in compatible AHT20 replaces the AHT10, same cost, slightly better accuracy.
- New! It has an optional INA219 current/voltage sensor to monitor the power consumption of the OCXO.
- It has an optional Bluetooth interface, so you can control it from your smartphone.
- New! It has an optional "Atomic Clock" display in big bright red, green or blue LED digits using a TM1637 display module, with the classic 1Hz blinking colon!
- New! Optional UTC-aligned 1PPS output using a picDIV. http://www.leapsecond.com/pic/picdiv.htm
- The BOM is very short and all the bits and pieces are easy to find and order.
- Total cost is around 30€ 40€ (that's around US $35 $45) for the stripped-down version, < 50€ 60€ with all the bells and whistles. Note: as of March 2022, with the recent semiconductor shortage and rising prices of components, the total cost has increased correspondingly.

Like with Lars' design, any OCXO, DOCXO or even rubidium frequency standard can be used, but the recommended oscillator is an inexpensive used square wave 10MHz 5V OCXO, which is what I am using in the breadboard prototype. These OCXOs are available from various sources on the net, recycled from decommissioned telecom equipment and sometimes still soldered onto a piece of PCB, for around 10€ or less (< US $12). The OCXO is the most expensive part in this GPSDO.

The second most expensive part is the GPS receiver module. I strongly recommend a u-blox Neo-M8 GPS module with an SMA antenna connector. With a u-blox Neo-M8, I am still getting 5~9 satellites even indoors in my basement cave lab. The much cheaper Neo-M6 struggles to get a fix in the same conditions. :phew:

The open source code in C/C++ (the firmware for the MCU when compiled) and documentation are available on GitHub, here: https://github.com/AndrewBCN/STM32-GPSDO

Here is the BOM: https://docs.google.com/spreadsheets/d/1BZbZeLiag-d61XXe9ATuPoSe3eMOxMuYYZ0WjF3BLuA/edit?usp=sharing (updated in March 2022)

New! I posted the latest KiCad schematic revision 0.7.1 (three sheets PDF file) in post #723, page 29 in this thread. A PCB design is in the works and will be available ASAP.

Looks like a winner!  I assume it puts out 10 MHz.  More details please.


I see you are using isotemp in the prototype and in software you also used an osc5a2b02. I have only used the osc5a2b02 as it is very cheap. Do you find the isotemp a better ocxo? I have one osc5a2b02 consistently keeps better than 0.1 ppb but I don't know if that is unusual. I put it down to a good power supply. Do you output the 10MHz anywhere?

Hello Bob,
Yes, it uses a (recycled) square wave 5V 10MHz OCXO. The oscilloscope trace is exactly that, taken from the output of the OCXO. The visible ringing is due to a mismatch between the low impedance output of the OCXO and the high impedance of the 10x scope probe, but it doesn't affect the stability of the GPSDO one bit (or one Hz, I could say).
The use of an FLL control loop means that this GPSDO is mostly software-based, and no extra ICs are used (no dividers, no PLL chip, actually not even an op-amp). I am using a 32-bit timer counter in the MCU to do the frequency measurement, and a $1 I2C 12-bit DAC "closes the loop" by providing the frequency control voltage (Vctl) for the OCXO.
The firmware is still in development, but is already functional right now. I am using the Arduino IDE 1.8.13 with the latest STM32 core 2.0.0 package for development. The C/C++ source code for the project is available on GitHub under the GPL V3 license. There was no need for any assembly language code (which is usually an order of magnitude harder to maintain) and the C/C++ source code is copiously commented.

Hello MIS42N,
Yes, I have tested both OCXOs, the Isotemp 143-141 and the CTI OSC5A2B02. They essentially perform the same in terms of stability, but the CTI runs much hotter to the touch.
Depending on the application I would suggest adding a 74HC14 buffer and a coaxial 50 Ohm connector, and eventually an active low-pass filter if one needs a sine wave output.

Well then Andrew I hope you intend to give a diagram an maybe even sell a PC board.  I already have a rubidium standard but no way to know if it's correct.  This could close that gap.


[0] Message Index

[#] Next page

There was an error while thanking
Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod