3
\$\begingroup\$

I have an application where I need to provide a 1 pulse per second 'heartbeat' signal with a very good accuracy over an extended period of time (1 second between pulse edges ± approx. 200 μs for several hours).

I am specifying a very accurate 10 MHz VCOCXO and have a Spartan-7 FPGA available.

My initial idea is to use an 8-bit counter in the FPGA to count clock edges for 20 μs, and compare the result to a constant of 200, then use the offset to drive a DAC to pull the frequency of the clock.

Due to the environment, I don't have any external timing sources available (GPS etc.).

(vital edit) I've missed out a key piece of information here - there is an external synchronisation pulse, which I get once, and sets the time reference (2 pulses, 1 sec apart from an atomic standard), I then need to maintain that 1 second reference from then on (/vital edit). After these two pulses, there is then no connection to the frequency standard

Is this a valid plan, or does anyone have any better ideas?

\$\endgroup\$
10
  • 2
    \$\begingroup\$ Without an external reference, how do you know what 20 usec is in the FPGA? This would seem to call for something like PTP, GPS, etc. \$\endgroup\$
    – TypeIA
    May 15 at 8:02
  • \$\begingroup\$ What are you using for a time/frequency reference, and what clock frequency do you intend to pull? While there is theory to improve on a clock of greater accuracy using many clocks of lesser accuracy, it is considerable effort. But I'm not at all certain you don't describe trying to improve the OCXO using a run-of-the-mill logic/FPGA clock. \$\endgroup\$
    – greybeard
    May 15 at 8:04
  • 1
    \$\begingroup\$ Using a control loop to frequency align an internal clock against an external PPS reference is a valid concept. But you will need a continuous reference, not a one-shot PPS pulse at startup. Otherwise there is no "loop" and the best you can do is a one-shot best-effort compensation measurement, which is of very questionable usefulness. \$\endgroup\$
    – TypeIA
    May 15 at 8:38
  • 2
    \$\begingroup\$ You don't need to control control oscillator frequency: adjust count for one second. You need to measure & model influences on oscillator frequency such as oscillator (!) supply voltage & temperature and compensate for them, control them tightly, or do both. As your oscillator won't operate with galvanic connection to the atomic standard (add that information to the question!), you have no chance to get a useful reference point from just two successive signals: transmission adds considerable jitter \$\endgroup\$
    – greybeard
    May 15 at 9:33
  • 1
    \$\begingroup\$ Try to specify exactly where you need very good accuracy (± approx. 200 μs for several hours): Interval from each reference edge to the next within .2 ms of a second, over 10000 seconds (difficult, Asian style), between longest and shortest such interval. \$\endgroup\$
    – greybeard
    May 15 at 10:05

2 Answers 2

5
\$\begingroup\$

I need to provide a 1 pulse per second 'heartbeat' signal with a very good accuracy over an extended period of time (± approx. 200 μs for several hours).

If 200µs applies to 1s period that would be 200ppm which is easy. So I assume instead you mean 200µs total drift over several hours. Say over 4 hours, that rounds to 10ppb, For this you need OCXO with a specification of "time drift over N hours < 200µs".

I don't understand about the VCO part. If you want that kind of stability with a VCO then you need the same kind of stability on the control voltage.

Instead you could measure the OCXO frequency with the required accuracy, then simply use a divider/counter to output your 1Hz signal. In this case the OCXO frequency doesn't matter, only stability matters, so maybe you can use a cheaper OCXO.

If the OCXO is around 10MHz, to get the required 200µs drift over several hours (say 4 hours) you'll need to measure its frequency with an accuracy of 10ppb so about 0.1Hz which is... maybe a little bit complicated.

Then you need a fractional counter, trivial in a FPGA.

However

There is an external synchronisation pulse, which I get once, and sets the time reference (2 pulses, 1 sec apart from an atomic standard), I then need to maintain that 1 second reference from then on (/vital edit). After these two pulses, there is then no connection to the frequency standard

Now that's a can of worms, because if you want to measure than 1 second pulse, seeing it only once, with an accuracy of 10ppb... that's 10ns... let's hope there's no noise on the edges and they're sharp enough. In fact the rise time is probably going to eat your error budget. And you're going have to implement a time to digital converter, or maybe just use a PLL to multiply the 10MHz OCXO to 500MHz and then count the periods of that clock during the 1 second pulse.

Personally since this project feels a bit expensive, I would make the FPGA board output the 10MHz OCXO frequency, and feed that to an off the shelf frequency meter synchronized to the atomic clock. Then the frequency meter tells the FPGA (via GPIB) what its OCXO frequency is, and then it's calibrated.

\$\endgroup\$
3
  • \$\begingroup\$ There's some great suggestions there. You are correct that the requirement is the drift across 4 (or so) hours - the systems people haven't decided on the exact number.... I was thinking about the idea of measuring the frequency then counting that, I'll need to do it with small IC's, I'm space limited, so the bench type frequency meter is a no-go In short you've given me a bunch of stuff to think about, thank you! \$\endgroup\$
    – droseman
    May 15 at 17:30
  • \$\begingroup\$ @droseman what is outputting the synchronization pulse? Is there a reason you can't put the frequency counter in that device? \$\endgroup\$ May 15 at 21:01
  • \$\begingroup\$ I can't modify the interface equipment easily, as it may require further qualification tests. I did enquire into having a pulse train of synchronisation, but I will only get 2 pulses \$\endgroup\$
    – droseman
    May 25 at 7:52
2
\$\begingroup\$

1 s / 200 μs is 5000: an 8-bit counter will not get you anywhere.

You don't need to adjust oscillator frequency when you can adjust count between pulses to sub-ppm precision.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.