26 votos

¿Cómo se puede conseguir una precisión de reloj decente en los microcontroladores (por ejemplo, una desviación máxima de 1 segundo en un año)? ¿Cómo lo consiguen los fabricantes de relojes digitales?

Estoy aprendiendo con microcontroladores (principalmente PIC16/18 y AVR) desde hace algún tiempo, haciendo varios proyectos experimentales. Una de las cosas que he encontrado sorprendentemente difícil es mantener la precisión del reloj decente.

La mayoría de mis proyectos tienen relojes internos al menos para mostrar el tiempo de actividad, pero muchos de ellos (los que tienen interfaz de visualización) también tienen un reloj ajustable. Incluso he creado mi propio reloj despertador para mi mesita de noche usando un PIC16, pero todos ellos son sorprendentemente inexactos, a pesar de usar osciladores de cristal (usar reloj RC interno es absolutamente terrible.)

He implementado varios ajustes interactivos para configurar la deriva y hacer que el reloj sea lo más preciso posible, pero todavía me encuentro con una deriva de unos 10 segundos después de dos meses en comparación con un reloj calibrado por NTP (en mi teléfono).

Básicamente esta es mi observación:

  • Reloj RC interno - se desvía ~10 segundos en 24 horas
  • Oscilador de cristal 8 MHz - usando retardos de interrupción por defecto calculados por MPLAB MCC deriva en ~10 segundos en pocos días
  • Oscilador de cristal 8 MHz - utilizando retardos calibrados por cada cristal individualmente deriva en ~10 segundos en un mes.
  • Oscilador de cristal 16 MHz - utilizando retardos calibrados por cada cristal individualmente deriva en ~10 segundos en dos meses.

Lo que también me ha sorprendido es que cada cristal, aunque sea de la misma frecuencia y del mismo fabricante está dando una frecuencia ligeramente diferente, porque cada uno necesita una calibración diferente para dar la hora exacta. ¿Es algo habitual?

Estoy utilizando cristales baratos que se pueden comprar en Farnell, tales como éste .

Estuve leyendo sobre esto y encontré que hay unos "osciladores de cristal controlados por horno" que son necesarios para la hora exacta que mantienen la temperatura del cristal, pero me cuesta creer que estos pequeños hornos estén instalados en aparatos electrónicos como relojes de pulsera.

Mi mecanismo de calibración me permite ajustar el "intervalo de segundos" a la resolución de un solo ciclo de reloj del microcontrolador, pero sigue sin ser preciso incluso con un cristal de 16 MHz después de varios meses.

¿Cómo resuelven este problema los fabricantes de relojes de pulsera?

  • ¿Están usando cristales controlados por horno?

  • ¿Calibran cada reloj de pulsera individualmente, ya que cada cristal tiene un desplazamiento/frecuencia de PPM ligeramente diferente del otro?

Muchos aparatos electrónicos vienen con relojes clásicos de 24 horas, pero no utilizan NTP para la sincronización. ¿Cómo se hace generalmente?

5voto

Ronan Paixão Puntos 101

Lo primero que debe tener en cuenta son tolerancias del cristal que suelen estar en el PPM gama. Cuanto más bajo sea el PPM, menos deriva aleatoria tendrá su tiempo. Tenga en cuenta que se trata de un número relativo, por lo que tener un reloj más alto no le ayudará realmente si su cristal tiene una gran deriva.

El segundo problema es dependencia térmica . Los cristales son diapasones afinados. Si cambia la temperatura, también puede cambiar la frecuencia. A veces esto se puede compensar en el software, por lo que un sensor de temperatura podría ayudarte con eso. Sin embargo, ten cuidado con el autocalentamiento si quieres utilizar un sensor de temperatura interno en una MCU: si tu uso no es de ultra bajo consumo, el autocalentamiento podría convertirse en un problema. Afortunadamente, la mayoría de los relojes son ULP debido a las limitaciones de la batería, pero los relojes de sobremesa podrían no serlo.

En tercer lugar, algunos MCU disponen de un registro interno para ajustar la sintonización del oscilador de cristal. Normalmente, un MCU más simple como el AVR sólo tiene un registro para la calibración del oscilador RC interno. Sin embargo, algunos más avanzados, como el STM32, pueden tener tanto un oscilador para ejecutar programas como otro para medir el tiempo, como un RTC (reloj en tiempo real). De esta forma es posible tener un reloj más barato y de mayor frecuencia para la mayoría de las cosas, mientras se mantiene la hora con un cristal más preciso. A veces también es posible utilizar el oscilador interno para calibrar el cristal del RTC, como se describe en Nota de aplicación 2604 de ST .

Cuarto, uniendo todo: es absolutamente crítico que no mantengas el tiempo sólo en software. Tienes que usar un temporizador hardware con una interrupción que no se meta con el valor del temporizador, o lo más probable es que tengas problemas de jitter. Si quieres suficiente precisión, puede que tengas que calibrar realmente el reloj RTC para múltiples temperaturas, guardar los valores en una tabla y ajustar los bits CAL[6:0] y el preescalador (si usas el STM32 o similar).

Encontrará más detalles técnicos en la mencionada AN2604 .

3voto

chews Puntos 1507

Todas las grandes respuestas anteriores, pero también quiero señalar que hay algunos nuevos chips TXCO digitales increíbles disponibles ahora, incluyendo el RV-3032 que mantiene +/-1,5ppm a temperaturas normales de interior utilizando sólo 160nA (!).

https://www.microcrystal.com/en/products/real-time-clock-rtc-modules/rv-3032-c7/

No 1 segundo al año, pero muy por debajo de 1 minuto al año y de muy, muy bajo consumo y sencillo de utilizar con un microcontrolador.

2voto

Ogge Puntos 111

Cuando sea posible, utilice una sincronización horaria GPS. La mayoría de las unidades pueden emitir un pulso muy preciso cada segundo. Utilice el software para ajustar la configuración de la división. Puedes añadir un poco más de precisión invirtiendo en un oscilador de cristal controlado por horno.

2voto

Kuba Ober Puntos 1474

Para $2k-$ 3k puedes conseguir un reloj atómico a escala de chip ("CSAC"). Es la única forma de conseguir la estabilidad que buscas. A menos que quieras aprender todo lo que hay que saber sobre cómo fabricar tus propios resonadores de cristal, envolver osciladores a su alrededor, caracterizar su rendimiento y, por último, utilizar modelos matemáticos para calibrar la deriva de frecuencia. Es más divertido jugar con cristales si tienes tiempo para ello y estás dispuesto a montar un laboratorio donde se puedan hacer experimentos (recocido, pruebas tempco, pruebas de estabilidad a largo plazo, etc.).

No lo he probado, pero tal vez el uso de un conjunto de resonadores, con tempcos muy variables, podría permitir la compensación cruzada, con técnicas de modelado convenientemente avanzadas. Me gustaría saberlo, pero no aguanto la respiración y probablemente no lo intentaría más que por curiosidad.

1voto

Pierre Buyle Puntos 3107

¿Cómo resuelven este problema los fabricantes de relojes de pulsera?

Se basan en la muñeca de un ser humano vivo (que está a 37 °C) para mantener el cristal a una temperatura constante, aunque ligeramente más fría.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X