Electronics > Projects, Designs, and Technical Stuff
Yep, it's ANOTHER GPSDO - Development rig MKII
iMo:
I built a similar stuff but placed into an iCE40LP384 fpga. Basically a reciprocal counter. My counters are latched (by a single edge coming from an MCU) into registers, and those registers are then read out by the MCU. The counters do not stop nor are reset, so you can do "new-old" without loosing the phase information in your math then .
When talking GPSDO - I doubt you will be happy by measuring the frequency with 1 count resolution, though. You have to go much deeper, into mHz resolution. That could be only achieved by a time interpolator (analog or digital).
When using an interpolator you cannot stop or reset the counters as your "phase" information will be lost.
For example the Lars' GPSDO claims "1ns" resolution (it is using an analog time interpolator). That is equivalent of counting 1GHz for 1sec with 1 count resolution. Or counting 10MHz for 100 seconds.
Thus to get a better performance you have to get an information on the actual 10MHz OCXO frequency with better than 10 milliHertz resolution each second.
PS: a good 10MHz OCXO drifts +/- few mHz when locked to GPS timing pulses.
metrologist:
--- Quote from: imo on January 19, 2019, 04:15:16 pm ---PS: a good 10MHz OCXO drifts +/- few mHz when locked to GPS timing pulses.
--- End quote ---
My Wenzel timekeeper drifts an average 5mHz per day while free running. Since September it's moved ~700mHz.
iMo:
For example, in order to discipline an average 10MHz OCXO your counter's readings may look like:
--- Code: ---Time [sec] Reading [Hz]
455 9.999.999,989
456 9.999.999,993
457 9.999.999,995
458 9.999.999,992
459 9.999.999,988
460 9.999.999,991
461 9.999.999,996
462 10.000.000,002
463 9.999.999,997
..
--- End code ---
That frequencies are then inputs into your PI(D) control loop math (math->DAC->OCXO_EFC).
intabits:
--- Quote from: imo on January 19, 2019, 04:15:16 pm ---....
When talking GPSDO - I doubt you will be happy by measuring the frequency with 1 count resolution, though. You have to go much deeper, into mHz resolution.
....
For example the Lars' GPSDO claims "1ns" resolution ...
That is equivalent of counting 1GHz for 1sec with 1 count resolution. Or counting 10MHz for 100 seconds.
--- End quote ---
So counting 40MHz for 25 seconds is also 1nS resolution, isn't it?
The following is still without an oven cover, heating, temperature control or frequency control:-
09:09:03.244 -> Measure for 25s: Count=1000000002
09:09:30.254 -> Measure for 25s: Count=1000000003
09:09:57.257 -> Measure for 25s: Count=1000000003
09:10:24.308 -> Measure for 25s: Count=1000000001
09:10:51.218 -> Measure for 25s: Count=1000000001
09:11:18.203 -> Measure for 25s: Count=1000000002
09:11:45.225 -> Measure for 25s: Count=1000000003
09:12:12.249 -> Measure for 25s: Count=1000000004
09:12:39.255 -> Measure for 25s: Count=1000000005
09:13:06.247 -> Measure for 25s: Count=1000000003
09:13:33.283 -> Measure for 25s: Count=1000000004
09:14:00.287 -> Measure for 25s: Count=1000000004
09:14:27.183 -> Measure for 25s: Count=1000000004
09:14:54.220 -> Measure for 25s: Count=1000000002
09:15:21.226 -> Measure for 25s: Count=1000000004
09:15:48.250 -> Measure for 25s: Count=1000000004
09:16:15.254 -> Measure for 25s: Count=1000000002
09:16:42.258 -> Measure for 25s: Count=1000000004
09:17:09.261 -> Measure for 25s: Count=1000000002
09:17:36.188 -> Measure for 25s: Count=1000000002
09:18:03.223 -> Measure for 25s: Count=1000000003
09:18:30.200 -> Measure for 25s: Count=1000000000
09:18:57.238 -> Measure for 25s: Count=999999996
09:19:24.222 -> Measure for 25s: Count=999999995
09:19:51.273 -> Measure for 25s: Count=999999995
09:20:18.276 -> Measure for 25s: Count=999999993
09:20:45.266 -> Measure for 25s: Count=999999991
09:21:12.196 -> Measure for 25s: Count=999999992
09:21:39.217 -> Measure for 25s: Count=999999992
09:22:06.214 -> Measure for 25s: Count=999999993
09:22:33.240 -> Measure for 25s: Count=999999990
09:23:00.236 -> Measure for 25s: Count=999999990
09:23:27.256 -> Measure for 25s: Count=999999991
09:23:54.255 -> Measure for 25s: Count=999999992
09:24:21.274 -> Measure for 25s: Count=999999993
09:24:48.190 -> Measure for 25s: Count=999999994
09:25:15.208 -> Measure for 25s: Count=999999994
09:25:42.214 -> Measure for 25s: Count=999999992
09:26:09.224 -> Measure for 25s: Count=999999993
09:26:36.260 -> Measure for 25s: Count=999999996
09:27:03.279 -> Measure for 25s: Count=999999999
09:27:30.284 -> Measure for 25s: Count=1000000004
09:27:57.178 -> Measure for 25s: Count=1000000004
09:28:24.215 -> Measure for 25s: Count=1000000004
09:28:51.213 -> Measure for 25s: Count=1000000003
09:29:18.224 -> Measure for 25s: Count=1000000001
09:29:45.220 -> Measure for 25s: Count=1000000003
09:30:12.228 -> Measure for 25s: Count=1000000002
09:30:39.266 -> Measure for 25s: Count=1000000001
09:31:06.250 -> Measure for 25s: Count=1000000001
09:31:33.176 -> Measure for 25s: Count=1000000003
09:32:00.180 -> Measure for 25s: Count=1000000004
09:32:27.185 -> Measure for 25s: Count=1000000002
09:32:54.235 -> Measure for 25s: Count=1000000001
09:33:21.247 -> Measure for 25s: Count=1000000002
09:33:48.251 -> Measure for 25s: Count=1000000001
09:34:15.263 -> Measure for 25s: Count=1000000000
09:34:42.262 -> Measure for 25s: Count=1000000001
09:35:09.194 -> Measure for 25s: Count=1000000000
09:35:36.219 -> Measure for 25s: Count=1000000001
09:36:03.222 -> Measure for 25s: Count=1000000001
09:36:30.243 -> Measure for 25s: Count=1000000001
09:36:57.246 -> Measure for 25s: Count=1000000003
09:37:24.265 -> Measure for 25s: Count=1000000002
09:37:51.284 -> Measure for 25s: Count=1000000002
09:38:18.163 -> Measure for 25s: Count=1000000002
09:38:45.183 -> Measure for 25s: Count=1000000001
09:39:12.187 -> Measure for 25s: Count=999999999
09:39:39.226 -> Measure for 25s: Count=1000000000
09:40:06.252 -> Measure for 25s: Count=1000000128
09:40:33.226 -> Measure for 25s: Count=1000000000
09:41:00.272 -> Measure for 25s: Count=999999999
09:41:27.269 -> Measure for 25s: Count=1000000000
09:41:54.167 -> Measure for 25s: Count=999999999
09:42:21.171 -> Measure for 25s: Count=999999997
09:42:48.210 -> Measure for 25s: Count=999999998
09:43:15.223 -> Measure for 25s: Count=999999998
09:43:42.210 -> Measure for 25s: Count=999999997
09:44:09.225 -> Measure for 25s: Count=999999999
09:44:36.266 -> Measure for 25s: Count=999999997
09:45:03.163 -> Measure for 25s: Count=999999998
09:45:30.174 -> Measure for 25s: Count=999999997
09:45:57.172 -> Measure for 25s: Count=999999998
09:46:24.238 -> Measure for 25s: Count=999999998
09:46:51.207 -> Measure for 25s: Count=999999999
09:47:18.219 -> Measure for 25s: Count=1000000000
09:47:45.265 -> Measure for 25s: Count=1000000000
09:48:12.272 -> Measure for 25s: Count=1000000000
09:48:39.154 -> Measure for 25s: Count=1000000000
09:49:06.187 -> Measure for 25s: Count=999999999
09:49:33.169 -> Measure for 25s: Count=999999999
09:50:00.193 -> Measure for 25s: Count=999999999
09:50:27.244 -> Measure for 25s: Count=999999999
09:50:54.248 -> Measure for 25s: Count=999999998
09:51:21.235 -> Measure for 25s: Count=999999996
09:51:48.270 -> Measure for 25s: Count=999999994
09:52:15.183 -> Measure for 25s: Count=999999996
09:52:42.203 -> Measure for 25s: Count=999999997
09:53:09.175 -> Measure for 25s: Count=999999996
09:53:36.215 -> Measure for 25s: Count=999999996
09:54:03.208 -> Measure for 25s: Count=999999997
09:54:30.230 -> Measure for 25s: Count=999999998
09:54:57.245 -> Measure for 25s: Count=999999999
09:55:24.289 -> Measure for 25s: Count=1000000000
09:55:51.156 -> Measure for 25s: Count=1000000001
09:56:18.199 -> Measure for 25s: Count=1000000000
09:56:45.229 -> Measure for 25s: Count=999999999
09:57:12.200 -> Measure for 25s: Count=999999997
09:57:39.232 -> Measure for 25s: Count=1000000002
09:58:06.233 -> Measure for 25s: Count=1000000001
09:58:33.247 -> Measure for 25s: Count=1000000000
09:59:00.153 -> Measure for 25s: Count=999999998
09:59:27.170 -> Measure for 25s: Count=999999997
09:59:54.176 -> Measure for 25s: Count=999999997
10:00:21.181 -> Measure for 25s: Count=999999998
10:00:48.199 -> Measure for 25s: Count=999999998
10:01:15.212 -> Measure for 25s: Count=999999998
10:01:42.248 -> Measure for 25s: Count=999999998
iMo:
--- Quote ---09:36:30.243 -> Measure for 25s: Count=1000000001
09:36:57.246 -> Measure for 25s: Count=1000000003
09:37:24.265 -> Measure for 25s: Count=1000000002
--- End quote ---
With 25 seconds gating time and 40MHz OCXO you get an "1 count" resolution of 40ms, that is an equivalent resolution of 10mHz with a 10MHz OCXO, that is an equivalent resolution of "1ns" time interpolator with a 10MHz OCXO.
In other words, you will not detect any drift of your 40MHz OCXO which is smaller than 40mHz between two measurements (25 seconds in your case). Also mind the 25sec long measurement works as an "integrator" - that means during that time the OCXO may fluctuate a lot but you may get an average below 40mHz.
Navigation
[0] Message Index
[#] Next page
[*] Previous page
Go to full version