Actualmente estoy tratando de crear un reloj de tiempo Arduino usando la biblioteca de tiempo PJRC ( http://www.pjrc.com/teensy/td_libs_Time.html ). Sé que, dado que la mayoría de las placas Arduino funcionan con un reloj de 16MHz y un solo resonador, el tiempo puede quedar "fuera de sincronización" después de un cierto período de tiempo.
Sin embargo, me preguntaba si alguien tiene una idea sobre la precisión de la biblioteca Time cuando se usa en el Arduino DUE con un reloj de 84MHz. Lo he estado probando y hasta ahora, el reloj se ha mantenido sincronizado durante unas horas. ¡Gracias!
time
arduino-due
KK6FSL
fuente
fuente
Respuestas:
Las limitaciones de precisión de la biblioteca dependen de la precisión del cristal. Cuando hacen, o cocinan, el cristal, solo pueden hacerlo hasta cierto grado exacto, también el entorno del cristal (temperatura, humedad, etc.) juega un papel en la precisión del mismo. Supongamos que tiene un cristal apagado por .5 segundos cada hora, ideal para corto plazo, pero si lo expande más de un año, para ese momento ya no tiene más de 1 hora. Si desea que algo mantenga una hora precisa durante un período prolongado, le sugiero un reloj en tiempo real (todavía tienen imprecisiones), un módulo GPS o una conexión a Internet para sincronizar.
Para obtener más información, consulte el artículo de Wikipedia sobre cristales de cuarzo.
El uso de un cristal de 84MHz versus un cristal de 16MHz no necesariamente mejorará la precisión del reloj Arduino ya que la frecuencia del cristal es más un indicador de la velocidad del procesador que la precisión. La precisión del reloj Arduino depende principalmente de la precisión del oscilador de cristal.
EDITAR: no soy un experto en osciladores de cristal, así que si ves algo mal aquí, házmelo saber
fuente
Volviendo a visitar una vieja pregunta ... ya que encontré una publicación de blog muy informativa que arroja nueva luz sobre ella. Pero permítanme primero proporcionar un contexto antes de dar el enlace.
Al evaluar la calidad de una base de tiempo, ya sea un cristal, un resonador de cerámica o un estándar de frecuencia de laboratorio, hay dos nociones que deben distinguirse:
La precisión es importante si desea que su reloj dé la hora correcta "fuera de la caja". Sin embargo, si está dispuesto a pasar un tiempo calibrando su reloj, entonces realmente no le importa porque va a calibrar cualquier inexactitud que mida. La respuesta de jfpoilpret proporciona un ejemplo de un protocolo de calibración "manual", que por necesidad es bastante largo. Si puede tomar prestado un módulo GPS con una salida de 1PPS, la calibración podría realizarse en unos segundos.
La estabilidad es un problema más serio. Si la frecuencia de la base de tiempo varía aleatoriamente, esto anulará sus esfuerzos de calibración. Esencialmente, la calibración le dirá qué tan rápido o lento está funcionando su reloj en este momento , pero no le permitirá predecir qué tan rápido o lento funcionará en el futuro .
Aquí está el enlace prometido: precisión de la frecuencia del reloj Arduino , por Joris van Rantwijk.
Lo que hizo Joris fue medir la precisión y la estabilidad de un Arduino Pro Mini (con un resonador de cerámica) y un viejo Duemilianove (cristal de cuarzo). Desde mi perspectiva, las principales conclusiones son:
Aquí está su diagrama de desviación de Allan , que mide la inestabilidad del reloj en función del tiempo de observación:
(fuente: jorisvr.nl )
Aunque este estudio tiene algunas limitaciones (solo se probaron dos paneles y el tiempo de observación es demasiado corto), está bien pensado y es muy informativo. Te animo a leerlo en su totalidad.
fuente
La mejor manera de conocer la precisión del resonador de su placa es medirlo usted mismo.
Para hacerlo, puede usar la
millis()
función Arduino de su pizarra y escribir un pequeño boceto que:millis()
valor cada hora más o menos.Por supuesto, este enfoque está lejos de ser perfecto, ya que requiere intervención humana y, por lo tanto, creará desviaciones de tiempo adicionales durante las mediciones, es por eso que debe medir las desviaciones de tiempo del reloj durante un largo período.
Un enfoque mejorado sería conectar un reloj RTC de alta precisión (la precisión debe elegirse en función de la precisión que necesita para su aplicación) a su placa y adaptar el boceto para que calcule automáticamente la deriva. Una vez que tenga la deriva del tiempo, puede hacer lo mismo que el paso 5 anterior en sus bocetos y desconectar el reloj RTC de su tablero.
Puntos importantes :
Finalmente, si realmente necesita una alta precisión, definitivamente conecte una fuente de reloj externa (por ejemplo, reloj RTC, GPS, NTP) a su placa y úsela como SyncProvider para la biblioteca PJRC.
fuente
Su cristal de reloj promedio del sistema estará apagado en varias decenas de ppm (partes por millón. Son excelentes para una sincronización estable y precisa de las señales, pero dramático para mantener la hora exacta. Sin provisiones especiales, el cristal del sistema puede estar apagado por varios segundos por día.
La solución es utilizar un reloj de tiempo real adecuado, impulsado por lo que comúnmente se conoce como un reloj de cristal de 32768Hz. Estos cristales son fácilmente un factor 10 mejor en precisión. Puede configurar su propio oscilador que interrumpe el procesador principal y llevar la cuenta en su boceto Arduino o puede encontrar una placa de conexión RTC.
Dos ejemplos aleatorios que aparecen en Google con los términos de búsqueda "RTC breakout":
fuente