[time-nuts] GPSDO for my rubber duckie

Bob Camp lists at rtty.us
Mon Aug 1 21:56:47 UTC 2011


Hi

Without knowing the full objective it's always hard to offer up suggestions. I'm going to *assume* that you want a PPS that is good to < 1 ms on your custom time scale. I'm also assuming that sidereal time is a reasonable analog to what you are trying to do. I think your approach is overly complex for implementing this. 

An alternative approach:

1) Take the PPS out of the GPS and route it to an interrupt on a cheap processor.
2) Use the interrupt to start a timer
3) Take your custom PPS off of the output of the timer

The timer only needs a one second range and the process only needs to be good to 1 ms. You need to calculate the number that goes into the timer and get it there. Assuming your time scale isn't to crazy, you don't need to do the calculation very often. Minutes / Hours / Days / Weeks / Years simply come off of the calculated PPS. You only need to get them in synch once. You likely do need to pay attention to the GPS's calendar to calculate the number to feed into your timer. 

Precision wise, the oscillator that drives the timer needs to be good to 0.1%. You can overkill that by 10X and still not spend any real money. No need for a 10 MHz out of the GPS. No need for the clock and PPS to be phase locked. 

Unless there's something really wild about the calculations, it all should fit in something in the sub $10 range CPU wise. Any GPS with a half way decent serial data stream should be good enough for 1 ms. The auction sites likely will sell you a GPS like that for < $20. 

Again - I could be way off base. I'm not at all sure what your calculations look like. 

Bob

On Aug 1, 2011, at 3:23 PM, Michael Sokolov wrote:

> Hello time-nuts,
> 
> I've been on this list for several years now and I've made a few little
> comments on occasion, but this will be my first real technical post.
> 
> I desire to build a timekeeping apparatus which I have nicknamed the
> rubber duckie, or a Rubber Time Generator.  As I've voiced very
> vigorously on the leapsecs list, I wish to live my personal life on a
> timescale that is anchored to Earth rotation via elastic (rubber) seconds
> rather than leap seconds or PHK/ITU-style total decoupling.  I do not
> wish to go into the reasons for that in this thread - the leapsecs list
> would be better for that - but here I am soliciting technical advice
> with the actual implementation.
> 
> In technical terms I envision a device (a physical piece of hardware)
> that takes MCAT (Muggle Consensus Atomic Time) as input and produces
> UTR (UT Rubber) as output.  MCAT is my term that encompasses all of UTC,
> TAI, GPS time, other GNSS time etc, basically all the various timescales
> which produce their 1 PPS at exactly the same time but label their
> seconds differently.  As a matter of practical implementation my choice
> of specific MCAT realization for Version 1 of my rubber duckie will
> probably be GPS.
> 
> Thus what I am soliciting on this list is advice with choosing a good
> GPS receiver / GPSDO for my application, which is feeding MCAT input to
> my rubber duckie.  My requirements are:
> 
> * I want to be able to disable the leap second correction in the GPS
>  receiver, i.e., have it output time such that I can add a constant 19
>  to it and get TAI.  (Or TAPF = Temps Atomique Pedant-Free, which is
>  defined to be identical with TAI in every respect except that it is
>  free from the edict of "though shalt not use TAI".)
> 
> * I'm striving to move away from the Gregorian calendar wherever I can.
>  Therefore, if the GPS receiver is trying to be "user-friendly" and
>  convert the date part of GPS time into Gregorian format, I want to be
>  able to disable that function.  I want MJD numbers instead of Gregorian
>  dates, or GPS week numbers / day-of-week / time-of-day.
> 
> * I think I need a GPSDO rather than just a GPS receiver.  The hardware
>  design I have in mind for my rubber duckie is a custom PowerPC board
>  on which I will run a specially modified and heavily stripped-down
>  version of 4.3BSD-Quasijarus, an embedded PowerPC port thereof.
> 
> In order to run a version of 4.3BSD-Quasijarus on my custom PowerPC
> board and make it do what I want (generate UTR from MCAT), I would like
> to implement a circuit on my board that generates an interrupt per
> millisecond.  These millisecond interrupts need to be aligned with 1 PPS
> such that every 1000th millisecond interrupt also serves as an on-time
> mark for MCAT (TAI/UTC/GPS/etc) seconds.
> 
> Someone please correct me if I'm missing some other simpler way, but it
> seems to me that in order to generate these 1 ms interrupts with the
> properties I require, I will need a 10 MHz input in addition to 1 PPS,
> hence the need for a GPSDO rather than just a GPS receiver.  I envision
> my clock interrupt generation logic working as follows:
> 
> * Starting at power-up boot, divide 10 MHz input by 10000 and produce an
>  interrupt every 1 ms.  At this point these interrupts aren't aligned
>  with anything, but they are good enough for the OS to boot.
> 
> * The FPGA in which this circuit resides gets an "acquire lock" command
>  from the software.  It hunts for an external 1 PPS pulse, generates
>  its own 1 ms interrupt at the same time (modulo a few cycles of 10 MHz
>  for logic and synchronizer delays), and resets its divide-by-10000
>  logic from there, such that all subsequent 1 ms interrupts will follow
>  in proper sequence.
> 
> * In the preceding description the external 1 PPS pulse is acted upon
>  only once, and all subsequent 1 ms and 1 s timing is derived from
>  10 MHz.  However, there will also be a sanity check circuit that will
>  look for the external 1 PPS "in the vicinity" (+/- 1 ms maybe?) of the
>  internally-derived 1000th 1 ms interrupt.  If the internal and
>  external 1 PPS signals disagree, signal an error indication to the
>  software.  The software will then declare the UTR output as possibly
>  invalid and resync itself; the resync sequence will include telling
>  the FPGA to resync itself to the external 1 PPS.
> 
> In order for my clock interrupt generation circuit to work as I envision,
> the 10 MHz and 1 PPS signals going from the GPSDO to my rubber duckie
> will need to meet certain requirements:
> 
> 1. The 10 MHz and 1 PPS signals will need to match each other in the
>   sense that the 10 MHz does exactly 10 million cycles between two
>   successive 1 PPS pulses.
> 
> 2. Simultaneous with requirement 1, the 1 PPS signal also needs to
>   indicate the "true" UTC/TAI/GPS second boundaries decoded from the
>   GPS signal.  To satisfy this simultaneously with #1, the 10 MHz
>   freq reference will also need to be locked to the "true" 1 PPS from
>   GPS - is that what a GPSDO does?
> 
> 3. I've heard something about sawtooth correction, and I'm guessing I'll
>   need it in order for the 1 PPS to occur exactly every 10 million
>   cycles of 10 MHz, or very close to that.  Are there any commonly
>   available GPSDO types that do this sawtooth correction on their
>   1 PPS output?
> 
> 4. GPSDO holdover performance: I'm hoping that the GPSDO can discipline
>   its 10 MHz well enough so that if GPS reception goes out "briefly"
>   for some definition of "briefly", the internal PPS marks within my
>   rubber duckie (every 1000th 1 ms interrupt from the FPGA) will still
>   be close enough to the real 1 PPS from GPS when the latter comes back,
>   such that no full resync will be required.
> 
> So, are there any commonly available (eBay etc) GPSDOs that will do
> what I have in mind?  What kind of GPSDO would the more experienced
> time nuts recommend for my application?
> 
> Oh, and before someone asks if I've already looked into the Soekris
> net4501 - yes, I have.  I really do want to build my own PowerPC-based
> board for my rubber duckie rather than use net4501.  The reason is
> because my rubber duckie will be quite different from a standard NTP
> server, and I really do want to run a variant of 4.3BSD-Quasijarus on
> it, my very own OS.  Standard 4.3BSD runs only on VAX; ports exist to
> other old-school architectures like m68k and SPARC.  There is no PowerPC
> port yet, but I have been thinking of doing one for a very long time now,
> so I'm ready for that adventure.  However, I absolutely do NOT want to
> do an x86 port - the x86 architecture is on my no-no list.
> 
> MS
> 
> _______________________________________________
> time-nuts mailing list -- time-nuts at febo.com
> To unsubscribe, go to https://www.febo.com/cgi-bin/mailman/listinfo/time-nuts
> and follow the instructions there.




More information about the time-nuts mailing list