[time-nuts] Thunderbolt? (re simple gpsdo.)

David davidwhess at gmail.com
Sat Dec 31 22:27:35 EST 2011

On Sat, 31 Dec 2011 17:56:46 -0800, Hal Murray
<hmurray at megapathdsl.net> wrote:

>This looks like fun to me, but I like writing that sort of code.  Note that 
>it doesn't need an OS or even any libraries.

Both designs look fun to me but for different reasons.  The analog
design requires attention to leakage and noise while the digital
design requires high resolution, good DNL, and attention to cycle
accurate counting.

My ongoing notebook doodles are tending toward using a simple PIC as a
cycle accurate frequency comparator and high resolution low frequency
oscillator to drive a high resolution frequency to voltage converter.
The part I have not figured out is measuring phase below one cycle
without frequency multiplication.  There must be a better way than
doing a time to voltage conversion.

I figure I could get better than 17 bits of INL and 20 bits of DNL for
the OCXO control signal.

>The context for "simple" wasn't well specified.
>Does simple refer to design or construction?

I would say that "simple" means diagnosis can be performed with a
multimeter and oscilloscope and all parts are user replaceable without
any programming.

>I think the main problem in this area is building a low pass filter with a 
>long time constant.
>The time constant of the filter has to be:
>  long relative to the noise from the phase detector
>  short relative to aging of the oscillator
>  short relative to environmental changes
>    (so the osc can track temperature and voltage
>      those changes may be in the PLL system rather than the osc)
>If we are starting with PPS (rather than 10KHz), the filter time constant 
>needs to be 10s or 100s of seconds.  How do I build an analog filter with a 
>time constant that long?

Use op-amp integrators and pay careful attention to leakage.  Because
of the long time constant involved, tuning it will be arduous.  If
noise is a problem, it might be worth using a discrete FET
differential amplifier input stage.

The phase detector should probably be disconnected when GPS lock is
lost to prevent integrator windup.  A fast time constant mode would
make for a faster lock.  I think a dual phase/frequency detector could
be used to indicate when a lock has been achieved.

>What's the input impedance of a VCXO or Rb unit?  I assume we will need an op-amp to buffer the filter.

I would probably drive it directly from an op-amp integrator output.

>The ugly problem in this area is that time constant to filter out phase detector noise overlaps the time constant needed to let environmental changes through.  That doesn't matter if the filter is analog or digital.

In a state variable filter you can adjust the filter cutoff by
adjusting the integrator gain.  I did something like this in a low
noise chopper stabilized amplifier that I designed where I adjusted
the integrator time constant via the gain for lowest output noise and
amazingly enough, it ended up matching the bipolar amplifier noise
corner frequency very closely.  When set too high, the broadband noise
from the chopper stabilized amplifier rose and when set too low, the
1/f noise from the bipolar amplifier rose.  The whole thing worked
well enough that I could measure the resistance of a piece of wire
from its Johnson noise.

>If the osc is stable (Rb) filter time constants of 1000s of seconds might make sense.  That might help take care of some of the hanging bridges.
>For those who aren't familiar with this trick, it's easy to make a low pass filter in software:
>  X = X*(1-k) + k*new
>  X = X -k*X + k*new
>where k is less than one.  Smaller k makes a slower filter.
>If you pick k as a (negative) power of 2, the multiplies can be done with a shift so there is nothing complicated with making filters with a very long time constant.  (You may have to use multi-precision arithmetic, but that's not a big deal.)

Would you measure the differential phase and then update the filter
and output every second?

More information about the time-nuts mailing list