@RikV,
There is a lot of information available for a DIY build on my Blog. Somewhere earlier on this forum there are references to my Blog.
A first version, and later a version 3 and a "final" version 4 is described in a lot of detail. Everything (Schematics, Gerbers, details, script etc.) is available for a DIY build.
Several people have already successfully build these versions.
https://www.paulvdiyblogs.net/2020/07/a-high-precision-10mhz-gps-disciplined.html
https://www.paulvdiyblogs.net/2023/05/a-new-gpsdo-design-v3.html
https://www.paulvdiyblogs.net/2023/06/gpsdo-version-4.html
Have fun!
Paul
First off, I have to take my hat off at your tenacity in overcoming the effect of temperature on a micro-controller based gpsdo design.
I read through all those blogs, aghast at all the extra complication being introduced to match the stability of a G3RUH design where this issue of temperature effect is effectively subsumed into the PLL feedback correction. By the time I got to looking at the latest blog, I have to admit my eyes were starting to glaze over.
I've been tempted to trial a micro-controller based gpsdo design over the past three years but this issue of temperature stability has been the main reason why I've been sticking with the modern day variation of the James Miller design as offered by Gyro's post which had inspired my very first attempt at lashing together the most basic of gpsdo circuits onto a solderless breadboard.
https://www.eevblog.com/forum/projects/my-u-blox-lea-6t-based-gpsdo-(very-scruffy-initial-breadboard-stage)/msg1493431/#msg1493431Rather pragmatically, I'd omitted the cmos rro opamp (I didn't have one to hand at the time) and fed the filtered output from the pll directly to the efc pin on my 13MHz ocxo (divided down to 10MHz with a rather cunning but noisy ttl circuit). It worked surprisingly well and I only recently discovered the reason why I'd been able to get away with is additional 'simplification' being the G ohm input impedance of the ocxo I'd been using.
Like you, I'd been motivated by the 'infamous' FY6600-60M arbitrary wave generator which amongst several other improvements, now sports a 10MHz ocxo which can be frequency injection locked to an external reference I can plug in or out without the need to power cycle it each time as Tony Albus has to do with his FY6600. The ocxo has its own independent 12v 6W smpsu to keep it powered all the time it is plugged into a mains outlet (a 1.3W vampire load) to eliminate the warm up time whenever I wish to use the generator and, more importantly, eliminate the issue of 'retrace'.
The first boxed up gpsdo (the MK I) had been based upon that breadboard lashup (with an RRO opamp included) built onto stripboard (not a quiet combination with all the extra ttl circuitry to generate 10MHz from a 13MHz ocxo - I could barely pick out the 1.2MHz switching frequency of the tiny Mini 360 24v to 5v buck converter from all the ttl noise on the Vcc rail when looking at the noise spectrum. I had to add a 10MHz xtal in series with the LPF output filter to filter out the close in frequency harmonics generated by the ttl circuitry but, apart from that, it was otherwise operating perfectly fine.
The MK II version didn't require the extra xtal since I'd acquired a bunch of 10MHz ocxos by then, allowing me to ditch all that ttl circuitry (reducing the power demand from 1.8W to a mere 1.4W and eliminate all those troublesome current ripple noise components in the Vcc rail with the change from stripboard to a copper clad groundplane construction further reducing this issue of noise on the Vcc rail to a vanishingly small level no doubt helping somewhat.
This MK II gpsdo has been (and still is) my only gpsdo frequency reference over the past three years or so. Initially, I'd used (fake) M8N receiver modules until I chanced upon a seller on Amazon selling genuine M8T modules for a mere 42 quid. Since the description quite clearly described the timing feature, I took a chance and bought one.
This proved to be the genuine article so, when i spotted a few weeks later that the seller had dropped his price to just 24 quid each, I snapped up another two despite a slight misgiving on account of not being able to reprogram the minimum elevation angle without locking the module and having to reset to defaults and do the settings all over again (that turned out to be the effect of a faulty FTDI 232 usb to serial converter so am rather glad I took the chance to purchase the additional 'spares' when I did - he'd raised the price just a week or two later to 61 quid each.
At the moment, I'm in the middle of constructing a MK III based on the same design but using a Sparkfun ZED9T gps receiver module to reduce the effect of 'space weather' on the phase stability (slow +/- 5ns movements against my temperature stabilised rubidium reference). I say 'in the middle of constructing' but the reality is that it has been set aside over the past 4 or 5 months whilst I continue to wrestle with refining the baseplate temperature control algorithm of my rubidium reference, a project not unlike yours since I've spent the past three and a half years on this particular project.
The motivation for building a ZED9T based gpsdo being the need to reduce this phase wander to allow me to more accurately syntonise the ruby to a more stable reference and eliminate mood swings which range between elation and that of despair as I seemingly achieve rock solid stability followed by a 'sudden' phase drift of 'failure' due to a combination of just by chance adjusting it just as the gps drift cancels the daily 2 or 3 mico Hertz ageing drift and thus seeing less than 20 ns in 24 hours phase drift, followed by a seemingly rapid increased phase drift rate (the ZED9T should reduce this effect by an order of magnitude).
I really should stop trying to 'tweak' the temperature control algorithms and switch my attention back to completing the MK III project but it's hard to leave it alone. However, since I do need a much more stable gpsdo reference in order to more accurately assess the frequency stability of my rubidium reference, I've very little excuse for putting it off any longer.
One thing I did finally come up with to extend the lower ambient temperature limit to below the 16 degree point at which the fan had to be brought to a standstill to limit undershoot and the addition of a special 'kickstart' pulse to bring it back up to speed to reduce the ensuing overshoot, was to add a couple of return galleries (40mm plastic waste pipes to return the exhaust air back to the intake plenum) and add a couple of servo controlled flap diverter valves between the angled ends of these tubes and the exhaust ports along with an intake damper flap (all linked to the same servo) controlled by the temperature reported by a BMP280 formerly used to sense the ambient temperature but now relocated by the fan intake inside the plenum chamber to control the fan intake air temperature.
I tried various temperature settings and rates of control, landing up with a plenum midpoint setting of 31.0 deg C with a +/- 0.5 degree control range over which it would gradually transition between full flow exhaust and total internal recirculation. This plenum temperature range corresponds to an ambient temperature ranging from a low of around 19 to a high of 30 degrees. Below 19 degrees, the hatches were battened down and the plenum temperature would continue falling
at a tenth half of the rate of the drop in ambient temperature.
This measure saved the fan control algorithm from having to get anywhere close to the cut off point, allowing for a more responsive control at very low ambient temperatures even down to a very chilly 4 deg during an overnight test run in my garage/workshop a few weeks back.
You might well find this technique of (effectively) enclosing your gpsdo inside a larger "air conditioned box' an effective way to stabilise the temperature of the whole gpsdo enclosure's contents.
For a bit of added interest, I've attached a 26 hour sequence of screenshots showing the drift between the gpsdo (yellow trace) and the rubidium starting just before 8pm last night (image 17 is where I cleared the infinite persistence), along with a screenshot of the arduino plot of base plate temperature (498 points at an 80Hz control cycle rate plus an adjacent pair of rescale defeating spikes (0 and 120). The vertical scale is milli-Kelvins above the 36.00 degree base line.