J'essaie actuellement de créer une horloge Arduino en utilisant la bibliothèque de temps PJRC ( http://www.pjrc.com/teensy/td_libs_Time.html ). Je sais que puisque la plupart des cartes Arduino fonctionnent avec une horloge de 16 MHz et un seul résonateur, le temps peut devenir "désynchronisé" après un certain laps de temps.
Cependant, je me demandais si quelqu'un avait une idée de la précision de la bibliothèque de temps lorsqu'elle est utilisée sur l'Arduino DUE avec une horloge à 84 MHz. Je l'ai testé et jusqu'à présent, l'horloge a été synchronisée pendant quelques heures. Merci!
time
arduino-due
KK6FSL
la source
la source
Réponses:
Les limites de précision de la bibliothèque dépendent de la précision du cristal. Lorsqu'ils fabriquent ou font cuire le cristal, ils ne peuvent le rendre que dans une certaine mesure, l'environnement du cristal (température, humidité, etc.) joue également un rôle dans sa précision. Disons que vous avez un cristal qui s'éteint de 0,5 seconde toutes les heures, idéal pour le court terme, mais si vous l'étendez sur une année, il est plus d'une heure à ce moment-là. Si vous voulez que quelque chose garde une heure précise sur une longue période, je suggère une horloge en temps réel (ils ont encore des inexactitudes), un module GPS ou une connexion Internet pour se synchroniser.
Pour plus d'informations, consultez l' article de wikipedia sur les cristaux de quartz
L'utilisation d'un cristal à 84 MHz par rapport à un cristal à 16 MHz n'améliorera pas nécessairement la précision de l'horloge Arduino car la fréquence du cristal est plus un indicateur de la vitesse du processeur que de la précision. La précision de l'horloge Arduino dépend principalement de la précision de l'oscillateur à cristal.
EDIT: Je ne suis pas un expert des oscillateurs à cristal, donc si vous voyez quelque chose de mal ici, faites le moi savoir
la source
Revisiter une vieille question ... car j'ai trouvé un article de blog très instructif qui jette un nouvel éclairage dessus. Mais permettez-moi d'abord de fournir un certain contexte avant de donner le lien.
Lors de l'évaluation de la qualité d'une base de temps, qu'il s'agisse d'un cristal, d'un résonateur en céramique ou d'un étalon de fréquence de laboratoire, il convient de distinguer deux notions:
La précision est importante si vous voulez que votre horloge donne l'heure exacte «prête à l'emploi». Cependant, si vous êtes prêt à passer un peu de temps à calibrer votre horloge, vous ne vous en souciez pas vraiment, car vous allez calibrer toute inexactitude que vous mesurez. La réponse de jfpoilpret fournit un exemple de protocole d'étalonnage «manuel», qui est par nécessité assez long. Si vous pouvez emprunter un module GPS avec une sortie 1PPS, l'étalonnage pourrait être effectué en quelques secondes.
La stabilité est un problème plus grave. Si la fréquence de la base de temps dérive de manière aléatoire, cela annulera vos efforts d'étalonnage. Essentiellement, l'étalonnage vous indiquera la vitesse ou le ralentissement de votre horloge en ce moment , mais il ne vous permettra pas de prédire la vitesse ou la lenteur de son exécution à l'avenir .
Voici le lien promis: précision de la fréquence d'horloge Arduino , par Joris van Rantwijk.
Ce que Joris a fait, c'est mesurer la précision et la stabilité d'un Arduino Pro Mini (cadencé d'un résonateur en céramique) et d'un vieux Duemilianove (cristal de quartz). De mon point de vue, les principaux points à retenir sont les suivants:
Voici son graphique de déviation d'Allan , qui mesure l'instabilité de l'horloge en fonction du temps d'observation:
(source: jorisvr.nl )
Bien que cette étude présente certaines limites (seulement deux planches ont été testées et le temps d'observation est trop court), elle est bien pensée et très informative. Je vous encourage à le lire en entier.
la source
La meilleure façon de connaître la précision du résonateur de votre carte est de le mesurer vous-même.
Pour ce faire, vous pouvez utiliser la
millis()
fonction Arduino de votre carte et écrire un petit croquis qui:millis()
valeur toutes les heures environ.Bien sûr, cette approche est loin d'être parfaite car elle nécessite une intervention humaine et créera donc des dérives de temps supplémentaires pendant les mesures, c'est pourquoi vous devez mesurer vos dérives d'horloge sur une longue période.
Une approche améliorée serait de connecter une horloge RTC de haute précision (la précision doit être choisie en fonction de la précision dont vous avez besoin pour votre application) à votre carte et d'adapter le croquis afin qu'il calcule automatiquement la dérive. Une fois que vous avez obtenu la dérive du temps, vous pouvez faire la même chose que l'étape 5 ci-dessus dans vos croquis et déconnecter l'horloge RTC de votre carte.
Points importants :
Enfin, si vous avez vraiment besoin d'une grande précision, connectez définitivement une source d'horloge externe (par exemple, horloge RTC, GPS, NTP) à votre carte et utilisez-la comme SyncProvider pour la bibliothèque PJRC.
la source
Le cristal d'horloge de votre système moyen sera éteint de plusieurs dizaines ppm (parties par million. Ils sont parfaits pour une synchronisation stable et précise des signaux, mais dramatique pour garder une heure précise. Sans dispositions spéciales, le cristal du système peut être éteint de plusieurs secondes par jour.
La solution consiste à utiliser une horloge en temps réel appropriée, entraînée par ce que l'on appelle communément un cristal de montre à 32 768 Hz. Ces cristaux sont facilement 10 fois plus précis. Vous pouvez soit configurer votre propre oscillateur qui interrompt le processeur principal et garder le décompte dans votre croquis Arduino, soit trouver une carte de dérivation RTC.
Deux exemples aléatoires qui apparaissent dans Google avec les termes de recherche "RTC breakout":
la source