Question:
Construction d'horloge en rubidium bricolage
ecfedele
2015-05-20 22:34:05 UTC
view on stackexchange narkive permalink

J'ai récemment trouvé mon chemin sur un standard de rubidium Datum x72 et j'ai eu la moitié envie de le transformer en une horloge atomique homebrew, car je ne l'utilise pas exactement pour une entreprise de satellite basée dans un garage.

Il semble qu'il existe de nombreux exemples de construction d'horloges atomiques à l'aide d'AVR et de PIC en ligne, mais la plupart d'entre eux semblent alimenter l'une des entrées dérivées de la source (par exemple, le signal 1pps) dans une minuterie qui compte. Sur l'interruption, il y a une action logicielle qui pilote l'horloge.

Je suppose que la question principale est: y a-t-il une meilleure façon, plus directe, de faire cela? Je n'ai trouvé aucun module RTC qui accepterait un signal de 10 MHz (car cela entraînerait une consommation électrique, annulant le concept d'un RTC), mais y a-t-il une sorte de dispositif de synchronisation ou de circuit intégré qui pourrait référencer le signal de rubidium ?

Le système d'horloge logiciel a tendance à me sembler un peu un hack, donc si quelqu'un pouvait casser un peu mieux les composants de ce projet pour moi, ce serait très apprécié.

Si vous avez une sortie de 10 MHz disciplinée vers l'oscillateur, alors vous pouvez simplement synchroniser un AVR et utiliser le périphérique de minuterie pour produire des intervalles à compter dans le logiciel pour votre affichage d'horloge.Faites très attention à ne pas avoir de calculs qui accumulent des erreurs d'arrondi.
La sortie 1pps ne divise-t-elle pas déjà le signal 10MHz pour vous?
Info seulement: les horloges Rubidinium ont deux (au moins) modes de dégradation de la stabilité.Un problème courant est causé par le placage de rubidium sur le verre de la lampe et les personnes excessivement enthousiastes peuvent résoudre ce problème avec un pistolet à air chaud et suffisamment de connaissances et d'audace.Bonne brève discussion [** ici **] (http://www.eevblog.com/forum/testgear/any-good/10/?wap2)
En fonction de la sortie voulue, un GPS et tout osc de rubidium pouvant s'y verrouiller donnera du temps aux 10 dizaines de ns.Il existe des récepteurs gps qui acceptent le 10mhz et le 1pps pour donner une précision jusqu'à ns.
Cinq réponses:
#1
+7
Ignacio Vazquez-Abrams
2015-05-20 22:37:32 UTC
view on stackexchange narkive permalink

Si vous configurez un MCU pour utiliser un oscillateur externe, vous pouvez alors envoyer le signal 10MHz dans le MCU (vous aurez peut-être besoin d'un décaleur de niveau s'il n'utilise pas les niveaux de signal TTL / 5V CMOS), puis utiliser des prérégleurs de minuterie pour obtenir à une fréquence d'horloge plus gérable pour une utilisation ultérieure.

Ce n'est peut-être pas si simple.Beaucoup de ces appareils émettent une forme d'onde qui est soit sinusoïdale, soit au moins très éloignée d'une onde carrée.Et toute méthode de conversion en un signal d'horloge doit avoir un bruit de phase ultra-faible si l'utilité du signal de référence d'origine doit être maintenue.
#2
+3
markrages
2015-05-20 22:55:25 UTC
view on stackexchange narkive permalink

Si vous voulez un signal de 1 pps à partir d'une entrée de 10 MHz, vous pouvez configurer deux compteurs 4059 en série, disons diviser par 5000 puis diviser par 2000. (Si vous voulez une onde carrée symétrique, divisez à 2 Hz, puis faites-le passer par une bascule pour la dernière division par 2.)

Bien sûr, un microcontrôleur peut aussi faire la division. Mais parfois, la soudure est plus facile que la programmation.


Pour la précision d'une horloge, vous devez spécifier quelle est votre sortie. Si vous voulez qu'un écran puisse être lu par un humain, prendre quelques ms pour mettre à jour l'affichage après avoir reçu la bascule PPS n'est pas un problème. De même, un peu de gigue est acceptable pour une utilisation humaine (l'implémentation naïve prendra un peu plus de temps lorsque les valeurs reviennent.) Si vous avez besoin d'une sortie à faible gigue ou à latence nulle, vous devez indiquer vos besoins plus clairement.

«La soudure est plus facile que la programmation» - bravo à cela.Cependant, la norme Datum x72 comporte déjà des sorties 1pps.Ce qui m'inquiète le plus, c'est du point de vue de l'architecture du code - il est assez facile d'exécuter un compteur, mais un schéma d'horloge HH: MM: SS standard nécessite des boucles et des comparaisons, et je crains que ces opérations ne diluent la précision.d'utiliser un étalon de rubidium.
En fait, je suppose que sur un signal 1pps, il y aurait suffisamment de temps pour exécuter des ISR itératifs, mais pouvez-vous aider à faire la lumière sur les perspectives générales du code?
#3
+3
David Hunter
2015-05-21 01:36:24 UTC
view on stackexchange narkive permalink

Si l'entrée est réduite à 1PPS, alors une méthode pour maintenir le calcul du temps à ISR déterministe (ni rapide, ni lent, mais cohérent) serait de calculer le temps une seconde dans le futur ailleurs, puis utiliser l'ISR pour mettre à jour l'heure à l'heure "une seconde à l'avance". Dans ce cas, même un code périodique relativement lent pourrait:

  1. Conserver une heure précédente et voir l'ISR avancer l'heure
  2. Utilisez le changement d'heure pour calculer le "temps de la seconde suivante" afin de le préparer pour l'ISR.

Si le moment de l'interruption est plus rapide que 1PPS, cela signifie simplement moins de temps pour détecter et calculez le temps 1 / x dans le futur ailleurs.

Bien sûr, il peut toujours y avoir une certaine gigue si la latence d'interruption est variable (en raison de la nécessité de compléter une instruction multicycle, peut-être) ou si l'interruption est masquée
#4
+1
Adam Haun
2015-05-21 01:27:06 UTC
view on stackexchange narkive permalink

S'il s'agit d'une onde carrée de 10 MHz, à peu près n'importe quel système numérique fera l'affaire. La suggestion d'Ignacio de synchroniser directement un microcontrôleur est bonne. Vous pouvez également diviser l'horloge de 10 MHz à 1 kHz et la connecter à la broche d'interruption externe d'un MCU. Une interruption par milliseconde devrait être facile à gérer sans aucun retard perceptible. (D'ailleurs, il en serait de même d'une interruption par seconde.)

Si vous préférez éviter les MCU, vous pouvez utiliser des circuits intégrés à décades et des portes logiques pour produire des valeurs BCD pour des secondes, des dizaines de secondes, des minutes, des dizaines de minutes, etc. Cette page Web montre un exemple de circuit. Encore une fois, vous pouvez le faire avec une horloge divisée de 1 kHz (si vous souhaitez afficher les millisecondes) ou le signal de 1 PPS. Les valeurs BCD peuvent ensuite être introduites dans des décodeurs à sept segments pilotant des affichages LED à sept segments.

Si vous souhaitez contrôler une horloge analogique, vous pouvez utiliser une méthode similaire pour générer des impulsions pour un moteur pas à pas.

Quelle que soit la méthode que vous utilisez, il ne devrait y avoir aucune inexactitude ou dérive perceptible au-delà de ce que l'oscillateur au rubidium fournit.

#5
  0
Guill
2015-05-22 12:12:11 UTC
view on stackexchange narkive permalink

J'ai conçu et construit un RTC pour un PC avant les RTC ont été inclus dans les PC (vers 1980). J'ai utilisé un oscillateur à cristal de 10 MHz et je l'ai divisé à 1 PPS. Puis, comme Adam le mentionne, j'ai compté les impulsions et utilisé des affichages à 7 segments pour afficher les heures, les minutes et les secondes. La raison pour laquelle j'ai utilisé la source à 10 MHz était d'obtenir une très grande précision. Il n'y a aucune raison pour laquelle une source "plus précise" n'a pas pu être utilisée (votre oscillateur au rubidium). Rien de «fantaisie» n'est requis. Des diviseurs, des compteurs et des présentoirs sont tout ce dont vous avez besoin.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...