| Electronics > Projects, Designs, and Technical Stuff |
| Yep, it's ANOTHER GPSDO - Development rig MKII |
| << < (3/4) > >> |
| 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 |
| Message Index |
| Next page |
| Previous page |