On this page we look into how to generate a reference clock. The reference clock is generated by an oven controlled oscillator (OCXO), that is disciplined by a 1 pulse per second signal (1PPS). We refer to this unit by pulse-pre-second disciplined oscillator (PPSDO). The 1PPS signal is either generated by a Rubidium standard, or a GNSS receiver. The setup looks as following:
+---------+ 1PPS +-------+ 15 MHz | GNSS/Rb |---------->| PPSDO |-----------> reference clock +---------+ +-------+
In the following, we will use a FEI FE-5680B rubidium oscillator, which is connected to a Lucent REF 0 PPSDO. There will two PCBs to connect to the Rb oscillator and generate fake GPS strings, so the PPSDO accepts the 1PPS signal.
The FEI FE-5680B rubidium oscillator
The FE-5680B is sometimes available for under 100 Euros. The FE-5680A (note the ‘A’ instead of ‘B’) version with 10 MHz output seems a bit more useful and is more common to be found. But it is not clean enough for the direct use. The configuration and the available reference outputs of the ‘B’ unit might vary, although they have the same part name. Some general information about the pin out can be found here. There was also some effort to hack the ‘B’ to provide additional output. Here, in contrast, we will just focus on the 1PPS output.
1PPS buffer
The board essentially contains a 74AC04 hex-inverter as 1PPS buffer and a DC filter. The latter is essential, since I plan to use step-down converters to supply the FE-5680B with 15 V and the 74AC04 with 5 V. The DC/DC converter are not part of this PCB.
+-----+ 15 V +---+ +-|DC/DC|------>|LPF|---------------------+ | +-----+ +---+ | 24 V -+ V | +-----+ 5 V +---+ +-----------+ +-|DC/DC|------>|LPF| | FE-5680B | +-----+ +---+ +-----------+ +-------+ | V | +------+ | 1PPS <----|Buffer|<-----------------------------+ +------+
The first revision looks as following. Looks ok, besides some pins on the pin header are wrongly assigned. Nevertheless, this does not affect the operation as 1PPS buffer.
The Lucent KS-24361 REF 0 L101
This unit is a PPSDO which is normally used for telecommunication systems. The 1PPS signal is normally generated by REF 1 GPSDO. In addition to the 1PPS, the REF 0 expects this GPSDO to send Motorola Oncore messages. Here I am trying to repeat some previous results by Dan Watson which you might want to read first. I am using the same wiring for standalone operation. This is
- +24V on P1 pin 1
- GND on P1 pin 2
- jumper between J5 pin 6 and J5 pin 10
- 1PPS on J5 pin 11
- Oncore messages on J5 pin 15
Further details can be found on the time-nuts mailing list here and here.
Standalone operation with PC
+-----+ PPS +---------+ CTS +--------+ | GPS | -----> | USB-CTS | -----> | Python | +-----+ +---------+ +--------+ | | | | Oncore | V | +----------+ | PPS | USB-UART | | +----------+ | UART | | +-------------------------+ | | | V | +--------+ inv UART +-------+ +--->| 74AC04 | ----------> | REF 0 | +--------+ +-------+ | ^ | inv PPS | +----------------------+
For emulating a Oncore GPS, I wrote a Python script. It sends some required messages to the REF-0 unit, after catching a 1PPS signal on the CTS line. For this I am using a FTDI USB to UART cable with which I got a delay of 0.8 ms and a jitter of +/- 0.1 ms. The 1PPS signal with a pulse with of 100 ms is generated by a NS-RAW gps receiver. Both, UART and 1PPS signals, are inverted with a 74AC04 and send inserted in J5. After some minutes the NO GPS led should go off.
Standalone operation without PC
A PCB with an ATTiny841 will simulated the Oncore messages. The code and idea comes from Dan Watson. In contrast to him, I try to not installed inside, but to have the board connected to the Interface connector on the outside.
Commands
Some documentation for the commands can be found here. Connecting a EIA-422 cable to connector J8 gives access to SCPI terminal. We can enter the pForth mode with
:SYSTem:LANGuage "PFORTH"
where small letters can be omitted. Using ‘words’ in pForth mode to get a list of valid commands:
duart_debug fp_u es_ascii print_l1 force_15_pass force_15_fail force_1pps_fail sync_imm efc_rep pll_rep loop_time pr_hold_cause gps_query gps_change pstat disable_gps_cmds pr_time_raim pr_1pps pr_gps_id pr_gps_istate pr_avg pr_gps_cmds clr_gps_debug pr_gps_debug master_reset quiet_status gps_query_all init_gps clr_avg avg q_gps_cable_dly q_gps_php q_eman eman leapsec crash print_clk_list log_send pr_pll lock pll_debug pll_restart pr_efc efc_wr force_ext_1pps force_gps_1pps gps_cable_dly gps_ph gps_php gps_date gps_time print_bc print_ext_msg xdop_stat_rate ext_msg_rate print_vis vis_stat_rate stat_rate print_stat abr_stat set_time get_time clk_synch debug_psos clear_nv wr_eeprom dmes_all dmes_curv dmes_spoo dmes_scpi dmes_root dmes_pllp dmes_klok dmes_hmon dmes_gpsm dmessage efc_write pr_adc_avg adc_read s_rep mem_rep ps user !iodev dev_ctrl dev_write dev_read dev_close dev_open dev_init ident mode pause get_v wait_v signal_v request_x send_x delete_x create_x jam_x priority resume suspend delete ver spawn ?^C my_pid root watch execute 0x number unfence fence immediate recurse does> pad tib count word type expect interpret startup words forget ] [ ['] ' state base hex decimal .s u.x u. . (.") ." cr spaces space emit cos sin >> << 2* 2/ 2- 2+ 1- 1+ +! + - * / */ */mod /mod mod ; : literal constant create variable ! @ i j k leave +loop loop ?do do until again repeat while begin endif then else if depth dup swap drop 2drop cmove> cmove ?dup 0> 0= 0< < > = xor not and or true false halt abort ( 2swap 2dup allot -rot rot c, w, , pick fill r> >r here negate c! c@ w! w@ min max abs over
Troubleshooting
The termination characters of the messages are important. A problem here is denoted as frame error when calling pr_gps_debug. In general there should be no error reported.
One can force the unit to lock on the external PPS signal with:
1 force_gps_1pps
Apparently, this still requires Onecore messages send on J5. After forcing to use the external 1PPS signal, we get this result after approximately 30 hours:
--------------------------- Primary Receiver Status --------------------------- SYNCHRONIZATION ............................................. [ Outputs Valid ] SmartClock Mode ___________________________ Reference Outputs _______________ >> Locked to GPS TFOM 3 FFOM 0 Recovery 1PPS TI -30.0 ns relative to GPS Holdover HOLD THR 1.000 us Power-up Holdover Uncertainty ____________ Predict 1.9 us/initial 24 hrs ACQUISITION ................................................ [ GPS 1PPS Valid ] Tracking: 0 ____ Not Tracking: 10 _______ Time ____________________________ PRN El Az PRN El Az GPS 02:01:41 01 Jan 1998 * 2 80 16 17 32 5 GPS 1PPS Invalid: not tracking * 4 48 32 18 48 0 ANT DLY 0 ns * 6 64 0 Position ________________________ * 8 90 0 MODE Hold *10 90 1 *12 90 2 LAT N 23:18:06.080 *14 90 3 LON E 8:59:34.784 *16 90 4 HGT +2.56 m (GPS) *attempting to track HEALTH MONITOR ......................................................... [ OK ] Self Test: OK Int Pwr: OK Oven Pwr: OK OCXO: OK EFC: OK GPS Rcv: OK