Building a Better RTL-SDR TCXO

Its hard to beat the cost and versatility of the ubiquitous RTL-SDR dongles, but the temperature stability of their reference oscillators isn’t sufficient for some applications. While the internal 28.8MHz quartz crystal in these units can be replaced by a high quality temperature compensated oscillator, these tend to be relatively expensive and/or difficult to source.

Here’s a scratch-built 28.8MHz TCXO capable of +-1ppm stability from 0C-55C; best of all, it’s not only easy to build, but is designed entirely from readily available and inexpensive components. For improved temperature stability, the main oscillator can even be replaced with one of many commercially available TCXOs!

UPDATE: Elia has kindly designed a PCB for this circuit, using a commercially available TCXO. Now available from OSHPark!

KiCAD schematics and additional project files are available on github.

28.8MHz TCXO schematic diagram

28.8MHz TCXO schematic diagram

TCXO f-T curve

TCXO f-T curve

References and additional reading:

Description Reference
Oscillator temperature compensation techniques Design Technique for Analog Temperature Compensation of Crystal Oscillators, Mark A. Haney, Virginia Polytechnic Institute
TXCO tutorial Tutorial on TCXOs, Vectron International
R820T datasheet R820T: High Performance Low Power Advanced Digital TV Silicon Tuner, Rafael Microelectronics
Guide to proper toroid selection Iron Power Cores for High Q Inductors, Jim Cox, Micrometals, Inc.

16 thoughts on “Building a Better RTL-SDR TCXO

    • Capacitor C4 is an N750 type, which has a negative temperature coefficient. This pulls the crystal frequency as temperature increases/decreases, counteracting the crystal’s natural drift (at least, in between the crystal’s high and low turnover points).

      • Xtals have a third degree polynomial curve of frequency/temperature.
        The exact orientation of the quartz crystal cutting have strong influence on the curve.
        The temperature range you use is a small portion at the middle of the Frequency/Temperature curve. The temperature compensation you did is good just for a specific crystal cutting angle resulting in a xtal with frequency /temperature having moderate negative coefficient so a NPO capacitor corrected it. Taking a random xtal, it might have Frequency/temperature curve which has a much more negative or even positive freq/temp coefficient negating the possibility to correct it with just a N750 capacitor.
        Victor – 4Z4ME

        • That’s absolutely correct, and I discussed the cubic f-T curves of AT cut crystals briefly in the video, showing how the f-T curve is affected by the specific crystal’s cut. This is obviously not intended to be a perfect compensation technique for any random crystal, and as I stated in the video, it’s not going to work beyond the crystal’s f-T turnover points, which restricts its useful temperature range (see the first link in the “References/additional reading” section above for a more complete solution over wider temperatures, using capacitors as well as thermistors to extend the compensation over a wider temperature range).

          I’ve tested the f-T curves of various AT cut crystals of different frequencies/packages/manufacturers over the years and found that the vast majority have negative tempcos. I’ve also always found specific crystal models (e.g., different physical crystals, but of the same manufacturer and part number) to all have either a positive or negative tempco, and do not “flip-flop” between the two as you test different individual crystals. Granted the specific frequency deviation over temperature will change from one crystal to the next, but that’s why C3 and C4 are trimmer caps; adjusting their ratios controls the degree to which C4 (the N750 capacitor) affects the crystal’s frequency over temperature.

          Admittedly, I don’t work for a crystal manufacturer and this is all anecdotal evidence, but considering most crystals >10MHz can be pulled by a few kilohertz via reasonable capacitive load changes, I would expect similar temperature compensation results to be obtainable provided you are using the same model 19.2MHz 10ppm crystals that I did (manufacturer and part# info are in the KiCAD schematic file on github).

          With that said, most temperature compensation techniques (both analog and digital) need to be tailored to the temperature characteristics of the specific crystal being used, unless you’re implementing some frequency measurement with feedback (a-la “huff-n-puff” stabilization). Commercial TCXO manufacturers work closely with crystal manufacturers (or *are* crystal manufacturers!) to ensure repeatability, but for hobbyists that isn’t practical. There are absolutely situations where a single N750 capacitor won’t be sufficient for your crystal/oscillator! I encourage everyone to experiment with different crystals and different compensation techniques – you’ll get a much better understanding of (and appreciation for) the performance of commodity TCXOs!

  1. Pingback: Building a 28.8 MHz TCXO for the RTL-SDR -

  2. Is there some reason (like creating a spurious oscillation mode) that drove you to not use the same compensation technique on the 28.8 MHz xtal already on the board?

    • Nope, this was just more fun. 🙂 Assuming the on board crystal has a negative tempco (which I suspect is likely), you could replace one of the existing caps with an N750 type (or just add an N750 in parallel/series with the existing ones).

      The real advantage to doing it the way I did is that you can use readily available professionally made 19.2MHz TCXOs which cost $3-4USD in single quantities from Digikey, and which don’t require you to fiddle with capacitor values and perform controlled temperature tests to ensure decent performance.

  3. Pingback: Improving the RTL-SDR | Hackaday

  4. Pingback: Improving the RTL-SDR | wisdomparliament

  5. Pingback: Improving The RTL-SDR | Geek Casual

  6. Pingback: Improving the RTL-SDR – Pro

  7. I’ve seen others mention a problem with these dongles picking up harmonics from the onboard 28.8 MHz oscillator. Did encasing the oscillator separately in this manner help with that?

  8. The confusion between XTAL_I and XTAL_O is very common on microprocessors (this device included). XTAL_I is the Input to the XTAL, which is an output, while XTAL_O is the Output of the XTAL, which is the input to the chip.

  9. Pingback: 28.8MHz TCXO with +-1ppm Stability - Electronics-Lab

Leave a Reply
