Maak de meest nauwkeurige doe-het-zelf-kwartsklok tot nu toe

Nauwkeurige timing is iets waar ik altijd in geïnteresseerd ben geweest. Tegenwoordig zijn we sterk afhankelijk van het weer dat ons via internet wordt geleverd, via radiogolven van GPS-satellieten of radiostations. Maar ik wilde een klok die uitstekend de tijd zou bijhouden zonder afhankelijk te zijn van de buitenwereld – zeker iets beters dan de tijd die wordt geleverd door de kwartskristaloscillator die wordt gebruikt in een typische digitale klok of microcontroller, die ongeveer 1,7 seconden per dag of meer kan afwijken 10 minuten gedurende het jaar.

Natuurlijk zou ik een atoomklok kunnen kopen, dat wil zeggen een klok met een rubidium-oscillator erin, van het soort dat wordt gebruikt in ingebouwde GPS-satellieten. (Niet het soort dat wordt geadverteerd als een ‘atoomklok’, maar een die feitelijk afhankelijk is van het ontvangen van radiotijdsignalen.) Rubidiumklokken bieden een ongelooflijke nauwkeurigheid, maar kosten duizenden dollars. Ik had iets daar tussenin nodig, en de redding werd gevonden in de vorm van een ovengestuurde kristaloscillator, die om historische redenen altijd bekend staat als een OCXO. Met zo’n horloge zou ik voor ongeveer 200 dollar mijn eigen horloge kunnen bouwen, en een horloge dat ongeveer 200 keer nauwkeuriger is dan een typisch quartzhorloge.

Temperatuurveranderingen zijn de grootste bron van fouten in conventionele kristaloscillatoren. Ze zorgen ervoor dat het kwarts uitzet of samentrekt, waardoor de resonantiefrequentie verandert. Eén oplossing is het monitoren van de temperatuur en het compenseren van veranderingen in de frequentie. Maar het zou beter zijn om de frequentie überhaupt niet te veranderen, en dat is waar de OCXO in beeld komt.

Een printplaat omgeven door componenten, waaronder een LED-displaymatrix, een nano-microcontroller en een roterende controller.Printplaat [center] het kan in twee delen worden gesneden, waarbij de timingcomponenten op het onderste deel zijn gemonteerd en de bedienings- en displaycomponenten op het bovenste deel zijn gemonteerd.James Provoost

De OCXO houdt het kristal op een constante temperatuur. Om de complexiteit van het verwarmen en afkoelen van het kristal als reactie op omgevingsschommelingen te vermijden, wordt het kristal verwarmd rond de 80 °C, ruim boven de omgevingstemperatuur die het waarschijnlijk zal ervaren. In het verleden waren OCXO’s hongerig en omvangrijk of duur, maar de laatste paar jaar zijn er miniatuurversies verschenen die veel goedkoper zijn en veel minder stroom verbruiken. De Raltron OCXO die ik voor mijn horloge heb gekozen, kost $ 58, werkt op 3,3 volt en trekt 400 milliampère in stabiele werking.

De OCXO resoneert op 10 megahertz. In mijn klok wordt dit signaal naar een 4-bits teller gevoerd, die elke keer dat hij binair telt van 0000 tot 1111 een puls afgeeft, waardoor het signaal van 10 MHz effectief door 16 wordt gedeeld. Dit signaal van 625 kilohertz (kHz) start vervolgens een hardware-signaal. timer in de Arduino Nano-microcontroller, die elke tiende van een seconde een programma-onderbreking activeert om de tijdbasis van de klok bij te werken. (Volledige details over hoe de echtscheidingsketen en de software werken zijn beschikbaar in een begeleidende post op IEEE-spectrum‘s website, compleet met stuklijst en printplaatbestanden.) Met een draaiknop die rechtstreeks op de Nano is aangesloten, kunt u de tijd instellen.

Nano houdt de tijd bij, gaat vooruit in seconden, minuten en uren, en voedt ook het scherm. Deze display is gemaakt met behulp van zes Adafruit “CharliePlex FeatherWings”, dit zijn 15 bij 7 LED-matrices met gecontroleerde verlichting in verschillende kleuren. Elk van hen wordt bestuurd via een adresseerbaar I2C serieel busprotocol. Het probleem doet zich voor omdat de CharliePlex zo is bedraad dat hij slechts één van de twee mogelijke I2C-adressen heeft, waardoor het onmogelijk wordt om de zes klokcijfers afzonderlijk op een enkele bus te adresseren. Mijn oplossing was om een ​​I2C-multiplexer te gebruiken, die binnenkomende I2C-gegevens opneemt en deze tussen zes afzonderlijke bussen schakelt.

Blokschema dat OCXO, 4-bits teller, nano-microcontroller, I2C-multiplexer en zescijferig display verbindt.De distributieketen begint met de OCXO-oscillator en zijn 10 megahertz-signaal en eindigt met een display-update elke seconde. Het timingsignaal synchroniseert de hardwaretimer in de Nano-microcontroller om de interrupthandler in de Nano-software 10 keer per seconde te activeren. Daarom kunt u via softwarewijzigingen veel wijzigingen aanbrengen of nieuwe functies toevoegen.James Provoost

Het gebruik van microcontrollers – in plaats van bijvoorbeeld discrete logica-chips – vereenvoudigde het ontwerp en maakte eenvoudige aanpassingen en uitbreidingen mogelijk. Het is triviaal om de software aan te passen om bijvoorbeeld uw eigen lettertypeontwerp voor de cijfers te vervangen of om de schermhelderheid aan te passen. Seriële interface-connectorblokken zijn direct beschikbaar op de Nano, wat betekent dat u de klok kunt gebruiken als timer of trigger voor een ander apparaat.

Voor dit doel kunt u de weergave geheel weglaten, waardoor de grootte van de klok aanzienlijk wordt verkleind (hoewel u de software moet aanpassen om de schermverificatie bij het opstarten te onderdrukken). De klokprintplaat is ontworpen om in tweeën te worden gesneden, waarbij het onderste derde deel de microcontroller, OCXO en andere ondersteunende elektronica bevat. Het bovenste tweederde deel bevat het display en de roterende encoder. Door vier headers toe te voegen en twee kabels tussen de onderdelen te laten lopen om ze met elkaar te verbinden, kunt u de kaarten zo rangschikken dat ze een breed scala aan fysieke configuraties vormen, waardoor u veel vrijheid krijgt bij het ontwerpen van de vormfactor van elke kast die u voor het horloge wilt maken. . Het zo maken van de printplaat dat dit mogelijk was, was waarschijnlijk het meest uitdagende deel van het hele proces. Maar de resulterende hardware- en softwareflexibiliteit van het uiteindelijke ontwerp was het waard.

Het hele apparaat wordt gevoed via een Nano USB-C-poort. USB-C was nodig om voldoende stroom te leveren, omdat de klok, OCXO en display samen meer dan de nominale maximale stroom van 500 mA van de eerdere USB-poorten nodig hadden. Er is een back-upbatterij nodig die op deze poort is aangesloten om resetten als gevolg van stroomuitval te voorkomen; het gebruik van een van de populaire op knoopcelgebaseerde realtime back-upklokken zou zinloos zijn vanwege hun relatieve onnauwkeurigheid.

En wat betreft dat doel, het creëren van een nauwkeurige, hoogwaardige klok, controleerde ik de uitvoer van mijn OCXO in-circuit met een HP 53150A-frequentieteller. Het resultaat is dat de klok niet meer dan 0,00864 seconden per dag beweegt, of minder dan 3,15 seconden per jaar. Eigenlijk is de nauwkeurigheid waarschijnlijk beter dan dat, maar ik had de limiet bereikt van wat ik kon meten met mijn frequentieteller! Ik hoop dat je er zelf een maakt – het kost maar een paar uur solderen, en ik denk dat je het ermee eens zult zijn dat het een goed bestede tijd zou zijn.