A PLL-based 25MHz OCXO for the FZ7001 Frequency Counter
Running the SI5351A with an external 10MHz reference
Update 2017-10-02: Added Firmware archive, see bottom of page
Update 2020-11-18: Added notes on generating your own frequencies for external clock on SI5351A
Update 2021-06-03: Added Link to Dr. Simon Schrödle’s measurements
I own an old ELV FZ7001 frequency counter:
However, after I got a used LPRO-101 Rubidium Reference Clock, I noticed that the OCXO inside the FZ7001 is not very stable: even after warm up, it will drift 1-2ppm depending on time and temperature, which is quite bad for an OCXO.
The FZ7001 OCXO is assembled from discrete components (probably with a normal crystal that is not optimized for this temperature), with a temperature controller (TLC271 and the vertical transistor as heater), and is then packed in insulating foam and a plastic box:
Unfortunately, the crystal frequency is 25MHz – OCXOs for that frequency tend to be exotic and expensive, while used 10MHz OCXOs can be purchased for ~10€ on eBay.
Since I had some SI5351A PLL ICs in the parts bin, I checked if these might solve the problem. The SI5351A which I have is only specified for an external 25MHz crystal, however, the SI5351C has a separate input that works with 10MHz, so the internal PLL should work with 10MHz if feeding it into the crystal input works. The SI5351A parts I have are pre-programmed, but a ATTINY13 has enough space to program the SI5351 with a fixed configuration after each power-up.
The PCB is a drop-in replacement for the original ELV OCXO board, and has options for separate use (I used Dirty PCBs, so I would get at least 10 boards) – the board can be used as a universal clock source with or without the OCXO (a 25MHz SMD crystal can be populated, and the OCXO portion can be cut off):
The SI5351A works fine with the external clock – you need to feed the external input to the XA pin. Performance is more than adequate as a reference for a frequency counter:
Now after a few minutes warm-up time, the counter display is rock-stable.
Firmware source code includes a script that takes the output of the Silicon Labs ClockBuilder tool to generate the required initialization code:
You need AVR-GCC, perl (for the converter script) and make.
Update 2020-11-18: Some notes on using the SI5351A with external clock
The SI5351A is only specified for 25MHz or 27MHz crystals on the XA/XB pins, and thus the ClockBuilder tool only supports these input frequencies. However, the nearly-identical SI5351C has a CLKIN input that is specified for 10MHz-100MHz operation. Since everything after the input circuits is common, feeding different clocks to the XA pin is possible as long as the oscillator circuit inside the SI5351 on pins XA/XB can handle the signal.
If you want to adapt this project for different frequencies, first get the ClockBuilder (or ClockBuilder Pro) tool from the Silicon Labs website. The tool generates the same register settings for both SI5351A and SI5351C, so in order to use the SI5351A with a clock input other that 25MHz or 27MHz, use the following procedure:
- Create a new project with “SI5351C”, QFN20, default I2C address
- Select input “CLKIN” and set the input frequency, leave “XA/XB” disabled
- Configure the output frequencies.
- Export a register file. Select “CSV” when using my converter script – however, newer ClockBuilder versions can also directly export a C header file for use with your own code.
- Manually tweak the generated register file to select XA input:
- Register 2: 0x4B -> 0x53 to switch the LOS mask from CLKIN to XA
- Register 15: 0x04 -> 0x00 to switch PLLA input from CLKIN to XA, similar when using PLLB
- Register 183: 0x12 -> 0x52 to select a valid XA load capacitance (6pF)
Update 2021-06-03: more data
Dr. Simon Schrödle did measurements regarding the required input level versus frequency, available here: