Electronics > Projects, Designs, and Technical Stuff
Yep, it's ANOTHER GPSDO - Development rig MKII
<< < (4/4)
intabits:

--- Quote from: imo on January 20, 2019, 08:05:09 am ---...
you will not detect any drift of your 40MHz OCXO which is smaller than 40mHz between two measurements
...

--- End quote ---

I'm happy with that!

I thank you for taking the trouble to explain this stuff to me, but I'm afraid it has mostly just confused me.

I am new to this GPSDO stuff, so it's almost certain that some of the finer points will be lost on me. (Or maybe I'm just a bit thick - Nah, can't be that)
But what I think is most likely, is that we are talking at cross purposes.

Correct me if I'm wrong, but I get the impression that you are talking about an oscillator whose phase difference from some hypothetical rock solid reference source is very stable, always staying within 1nS (for 10MHz). That would be great, but is not my main aim.

I'm simply building the same oscillator as the Silicon Chip project mentioned in my first post, but with a different measurement implementation, although based on the same theory. It's purpose is to provide an accurate and stable frequency reference. And while there's no accounting for anything like the phase delay mentioned above, hopefully one begets the other. 

I'm assuming that consistently counting 400,000,000 cycles over 10 PPS pulses, means that I have a very stable 40MHz oscillator. Yes, its frequency could be wavering slightly during that time, but isn't that unlikely if the count is always the same? (just BTW: the magazine firmware averages over 1000 PPS pulses)

I've insulated the oscillator (it's not the proper cover) and turned on the heating.
But with only a crude frequency control for now. I need to add some resistors in the DAC before I can use a proper PI algorithm.
But after settling down:-
23:40:09.556 -> Measure 10s: Count=399999997 FreqDrive=2931:2101 Ambient: 27.19 Oven: 35.00 HeatDrive: 2128
23:40:21.527 -> Measure 10s: Count=399999997 FreqDrive=2931:2102 Ambient: 27.19 Oven: 35.00 HeatDrive: 2128
23:40:33.601 -> Measure 10s: Count=399999997 FreqDrive=2931:2103 Ambient: 27.25 Oven: 35.00 HeatDrive: 2128
23:40:45.573 -> Measure 10s: Count=399999997 FreqDrive=2931:2104 Ambient: 27.25 Oven: 35.00 HeatDrive: 2128
23:40:57.543 -> Measure 10s: Count=399999997 FreqDrive=2931:2105 Ambient: 27.25 Oven: 35.00 HeatDrive: 2128
23:41:09.607 -> Measure 10s: Count=399999997 FreqDrive=2931:2106 Ambient: 27.25 Oven: 35.06 HeatDrive: 2127
23:41:21.577 -> Measure 10s: Count=399999998 FreqDrive=2931:2107 Ambient: 27.19 Oven: 35.00 HeatDrive: 2127
23:41:33.519 -> Measure 10s: Count=399999997 FreqDrive=2931:2108 Ambient: 27.19 Oven: 35.06 HeatDrive: 2126
23:41:45.609 -> Measure 10s: Count=399999997 FreqDrive=2931:2109 Ambient: 27.19 Oven: 35.06 HeatDrive: 2125
23:41:57.579 -> Measure 10s: Count=399999997 FreqDrive=2931:2110 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:42:09.548 -> Measure 10s: Count=399999997 FreqDrive=2931:2111 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:42:21.588 -> Measure 10s: Count=399999997 FreqDrive=2931:2112 Ambient: 27.25 Oven: 35.00 HeatDrive: 2125
23:42:33.561 -> Measure 10s: Count=399999996 FreqDrive=2931:2113 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:42:45.533 -> Measure 10s: Count=399999997 FreqDrive=2931:2114 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:42:57.608 -> Measure 10s: Count=399999996 FreqDrive=2931:2115 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:43:09.578 -> Measure 10s: Count=399999997 FreqDrive=2931:2116 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:43:21.533 -> Measure 10s: Count=399999996 FreqDrive=2931:2117 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125
23:43:33.607 -> Measure 10s: Count=399999996 FreqDrive=2931:2118 Ambient: 27.19 Oven: 35.00 HeatDrive: 2125


When I've finalized what I'm trying to do here, Ill do new PCBs and make two identical independent units, and watch both outputs on a scope for a few hours... 

Maybe one of the time-nuts here could borrow them for evaluation against their best standard?
1001:
u3 u4 u5 u6 u7 and u8 could be replaced with a single ic like SN74LV8154. or am I wrong?
are you sure the 74hc590 works well at 40mhz? nexperia and TI do not ensure that it works well at this frequency.


--- Quote from: intabits on January 19, 2019, 03:53:44 am ---@NorthGuy BTW, thanks for your help on this.


--- Quote ---Or maybe I should be just gating the incoming 40MHz, and leave the CE out of it.

--- End quote ---

That one.

Something like this:-



Timing:-



--- End quote ---
intabits:

--- Quote from: 1001 on January 23, 2019, 06:33:39 pm ---u3 u4 u5 u6 u7 and u8 could be replaced with a single ic like SN74LV8154. or am I wrong?

--- End quote ---
That's an interesting chip, I must get some, I didn't know it existed. (I didn't even know that 7400 series could have 4 digit suffixes)
U8 would still be needed (parallel to serial) because of the limited number of Arduino I/O pins. (I'm going to do similar with a 74595 for outputs on my next version)
Thanks for the tip.


--- Quote ---are you sure the 74hc590 works well at 40mhz? nexperia and TI do not ensure that it works well at this frequency.

--- End quote ---
It's borderline for sure. Typical @4.5v and 25C is 52MHz, but worst case is only 33MHz.
But I'm running everything at 3.3v (including an Arduino Nano hacked for 3.3v) .

So not surprisingly, it's flakey. It counts properly for 10 minutes, then nonsense for 10 mins, then OK for a while...

I used 3.3v because of the oscillator/oven, but if I use 4 level converters to talk to that, everything else can run at 5v.
Which I'm hoping will be OK, though not ideal. (the SN74LV8154 looks to be borderline at 40MHz as well)
Maybe 1 or 2 flip-flops as a prescaler before the counter is the answer.
intabits:
So believing that the flakiness in the values read out of the counter was probably due to running it at 3.3v, where it is not spec'd to count at 40MHz, I rebuilt my breadboard development rig on a PCB, and ran most of it at 5v.

Only the DACs in the oscillator/oven needed to run at 3v3 (the to-be-added frequency synthesizer does also, but that is peripheral to the main oscillator function). And with everything running at 3v3, I also had to hack the Arduino Nano to become a 3v3 device.

But now all the digital parts are running at 5v, including a new Nano. And the DACs are connected via 4 level translators. I also added a 74HC595 shift register as an output expander, freeing up enough I/O pins on the Nano to interface to an LCD display, and to communicate with the GPS module via its serial interface.

However, when I fired it up, I was not surprised to see the flakiness was still there. This is because while building the new PCB, I had begun to suspect that the errors were not due to running the counter too fast, but rather some systemic problem. It had after all, worked properly when I first made it, and the count errors seemed to come and go in waves. It worked for 2 minutes, the went bad for 5, and repeated. I would have expected something more continuous or random if it was just because of the clock speed being too high.

And it turned out to be a software problem, to do with the timing of when the counter value was being latched into its output registers.

It now seems to be running very solidly.
With very little "tuning" of the frequency control algorithm done yet, it quickly converges, and is nearly always showing 40,000,000.00Hz.
That is done with samples taken over 10 PPS pulses, and then averaging groups of 5 sample periods.
The PI algorithm makes its adjustments based on the frequency measured for a group of samples.

I've written a program to monitor and control the device, allowing me to fiddle with all the control values. It will also log and plot long term information. 

Development rig MKII - Top view



Development rig MKII - Underside



Development rig MKII - Oven/Oscillator removed, Oven underside, Arduino Mega2560 for future version, Alternative GPS module



Beginnings of control software, showing precisely 2 billion cycles counted over 5 x 10 second samples

Navigation
Message Index
Previous page
There was an error while thanking
Thanking...

Go to full version
Powered by SMFPacks Advanced Attachments Uploader Mod