¿Cómo haría para que un pequeño oscilador funcione exactamente a 31 891 269 116 µHz?

Estoy buscando construir un módulo RTC para Arduino que se ejecute en el tiempo de Marte. El factor de conversión es 1.0274912510 segundos terrestres a 1 segundo marciano.

Si bien logré lograr esto mediante programación con una resolución de <2 segundos (que no es exactamente ideal, preferiría algo así como 300 ms de precisión) usando matemáticas de punto fijo en un Arduino Uno conectado a un módulo RTC normal, estoy Me preguntaba si sería posible tener algún tipo de oscilador de bajo voltaje funcionando precisamente a 31.891.269.116 µHz (31,891269116 kHz) que sería, más o menos, intercambiable con un cristal de reloj estándar de 32 kHz (sin embargo, estaría abierto a otras ideas, así que siempre y cuando no sean prohibitivamente caros).

¿Alguna idea de cómo esto puede ser posible? Alternativamente, también sería aceptable algún tipo de temporizador que suene una vez cada 1.0274912510 segundos.

¿Cuál es la precisión requerida en partes por billón?
¿Por qué la extraña unidad (µHz?) Eso es 31.891 kHz. Entonces, probablemente esté buscando un reloj de cristal de 32kHz.
@JRE Podría haberlo expresado como 31.891269116kHz, pero cuando necesita una cantidad específica de precisión, tiene más sentido para mí escribirlo en la unidad de medida requerida.
@pjc50 20ppm probablemente sería una cantidad aceptable.
Tu pregunta es demasiado amplia. Debe agregar restricciones como el costo, el tamaño y el consumo de energía. Describa su aplicación y el entorno en el que debe funcionar. ¿Tiene acceso a referencias externas como GPS o la línea eléctrica? No es posible una solución exacta, por lo que debe poner límites reales a los errores, tanto a corto plazo (inestabilidad) como a largo plazo (deriva), que puede tolerar. Edite esta información en su pregunta en lugar de dejarla en los comentarios.
Comience con sus requisitos. Ha especificado una precisión extraordinaria. ¿Por qué? En otro lugar dices que puedes hacer lo que quieras con un Arduino. Lamento decirte esto, pero te estás engañando a ti mismo, a menos que estés usando algo como un reloj de rubidio o cesio como referencia. Díganos qué está haciendo y cuáles son sus requisitos de rendimiento. Esos son requisitos funcionales, no su rendimiento derivado. Si está tratando de producir un reloj que está sincronizado con otro, dígalo y háganos saber cuáles son sus requisitos (y tolerancias).
Básicamente estás preguntando "Quiero una regla de 116 mm de 31,891.269. ¿Cómo construyo una?" Imagine una pieza de metal de más de 104 pies de largo, donde la pulgada final debe ser precisa con seis decimales. Y luego dices: "Está bien, debe tener unos 104 pies de largo, pero necesito saber la variación con seis decimales". Las dos preguntas son completamente diferentes, ahora: ¿cuál es?
Estás tratando de resolver tu falta de habilidad en programación con hardware muy costoso y personalizado. Puede implementar fácilmente una conversión de punto flotante de 256 bits en un Arduino, o cualquier precisión que desee.
@pipe Eso no es absolutamente lo que estoy tratando de hacer. Estoy tratando de no tener que usar un Arduino en absoluto.
@JohnBurger Creo que especifiqué claramente que ambos están en la pregunta original. Entiendo lo que estaba preguntando, por eso pregunté si era posible y, de ser así, cómo podría hacer o adquirir tal cosa.
Bien, ahora sabemos que desea construir un RTC marciano. Ahora. ¿Qué tan preciso necesita que sea? 1 segundo por día? 1 segundo por año? y que resolucion requieres? ¿1 segundo? 1 ms? 1 uso? Tenga en cuenta, por ejemplo, que su solución Arduino no es más precisa que su reloj Arduino, y le garantizo que eso es mucho peor que 1 segundo/año.
Creo que este es un gran ejemplo de por qué incluir más información por adelantado permite a las personas orientarte en la dirección correcta. La respuesta de Brian Drummond es ahora la mejor, o al menos barata y factible para un aficionado. También es un buen ejemplo de por qué debe tener cuidado al especificar precisión y exactitud: hay muchos parámetros que son potencialmente relevantes para un reloj. Ni siquiera hemos discutido la compensación de temperatura o el jitter todavía.
@WhatRoughBeast Absolutamente. Mi solución actual tiene una resolución de 1-2 segundos y una deriva de alrededor de 4 segundos por día, lo cual es menos que ideal. La mayoría de los RTC que se basan en cristales de cuarzo tienen <2 s de deriva por día pero con una resolución casi perfecta de 1 s. Simplemente estoy tratando de ser tan preciso como cualquier otro reloj de cuarzo.
Y por eso preguntaba. Su pregunta original planteaba una cosa y sus comentarios a otras preguntas implicaban algo completamente diferente. De ahí el comentario... ¿"Menos que ideal"? Nada es ideal, y "tan preciso como cualquier otro reloj de cuarzo" es una respuesta muy específica, ¡gracias!
@ pjc50 Mis disculpas, es la primera vez que publico aquí. Lo tendré en cuenta para el futuro. Estoy de acuerdo, la solución de Brian es la mejor. gracias por tu ayuda
¿Alguna vez ha buscado la precisión de un cristal de reloj ordinario de 32 kHz?
"El factor de conversión es 1.0274912510 segundos terrestres a 1 segundo de Marte". -- ¿Estás confundiendo la diferencia en la duración de los días entre Marte y la Tierra con la duración de un segundo? La duración de un día solar en Marte es de 88 775 s, o 1,02749 días terrestres (de 86 400 s). Por otro lado, el segundo está definido por la radiación emitida por un átomo de cesio, e incluso teniendo en cuenta la dilatación del tiempo, necesitarías velocidades de alrededor de 0,23 c para obtener esa diferencia del 2,7 %.
El segundo de Marte es exactamente tan largo como el segundo de la Tierra y el segundo de Próxima Centauri también. El punto mismo de una unidad de medida es ser igual. Sugerencia: los días terrestres y los años tampoco son valores "redondos" en segundos, solucionamos esto con segundos de vuelta.
Entiendo que alguien que no sea astrofísico pueda pensar que estoy equivocado, pero no es así. En Marte, el segundo se alarga a 1,0274912510 segundos terrestres para mantener el tiempo de 24 horas. Si el segundo de Marte es 1.0274912510 segundos terrestres, terminas con 86400 de ellos por sol. Puede obtener más información aquí si está interesado en comprender cómo funciona el cronometraje de Marte: giss.nasa.gov/tools/mars24/help/algorithm.html
En la especificación de relojes para electrónica, generalmente incluimos tolerancias. Esto habría evitado gran parte del debate que ocurrió aquí. Si pidieras un reloj que suene a las 31.891269116 +/- 0.006kHz, hubiera sido más fácil responder a esta pregunta (que sería el reloj que pediste con un error de 20ppm en cualquier dirección). Dicho esto, si realmente quisiera más precisión que eso, podría considerar obtener un GPS para Arduino y hacer los cálculos para convertir de UTC a fecha/hora marciana. ¡Creo que gps es bueno para 40ppb!

Respuestas (9)

Use un cristal de 32768kHz como todos los demás, pero divida por 33669 en su lugar, dando un error de -5.08ppm. (Puede eliminar eso recortando la capacitancia de carga si lo desea).

No es preciso , pero para un reloj de Marte será tan bueno como cualquier reloj de cuarzo de la Tierra. Es decir, ignorando los problemas de compensación de temperatura para la temperatura ambiente de Marte, la mayoría de los cristales de reloj solo están disponibles cortados para uso en la Tierra, a menos que pueda encontrar proveedores marcianos...

Usaría los periféricos del contador de tiempo en un MSP430 para hacer la división y (suponiendo que esté manejando un movimiento de reloj mecánico de cuarzo estándar) generaría pulsos bipolares de 30 ms en sus pines de salida cada segundo, siguiendo aproximadamente los tiempos originales que puede medir en un osciloscopio.

Arduino o similar hará el trabajo, pero el MSP se puede poner a dormir entre pulsos, consumiendo menos de 1uA con el oscilador LF en funcionamiento. Aquí hay un diseño de ejemplo con código fuente y PCB para un reloj: solo la hora de la Tierra hasta ahora, aunque eso probablemente se pueda solucionar cambiando una constante.

¡Gracias! Según otros comentarios, creo que esta parece la opción más viable sin tener que profundizar en el ámbito de los relojes atómicos, por lo que la he elegido como la solución a mi pregunta. También aprecio especialmente el diseño que has vinculado.
Tenga en cuenta que las cifras significativas que proporcionó no se cumplirán con un cristal RTC estándar. El error de 5 ppm de las matemáticas probablemente será menor que la tolerancia del cristal.
@ user2943160 si tiene una buena referencia, puede alcanzar 1 ppm más o menos con el recorte inicial: habrá una deriva de algunas ppm durante algunos años y (extrañamente para los cristales de diapasón) una variación parabólica con la temperatura. Todos los relojes de cuarzo baratos en mi casa funcionan a diferentes ritmos, probablemente nunca fueron recortados en la fábrica y no son mucho mejores que un reloj de péndulo compensado por temperatura.
+1 solo para los "proveedores marcianos".

Puedes hacerlo mejor que la sugerencia de Brian Drummond. Aunque puede ser cierto que su oscilador es la mayor fuente de error en el sistema, no hay razón para agregar un error sistemático adicional cuando es bastante fácil no hacerlo.

Establezca el intervalo de su temporizador en 33668 tics, inicie un contador en 0 y, en cada interrupción del temporizador, incremente el contador en 6754.

Si, después de incrementar, el contador es >= 8105, reste 8105 y configure el intervalo del temporizador para el segundo siguiente en 33669 tics.

De lo contrario, deje el contador en paz y establezca el intervalo del temporizador para el segundo siguiente en 33668.

Esto le dará (asumiendo un cristal perfecto de 32.768kHz) un intervalo promedio de

(33668 + 6754 / 8105) / 32768 ~= 1.0274912510006

segundos (menos de una parte por billón de error en relación con 1,0274912510), en lugar de 1,0274963378906 segundos (casi 5 partes por millón de error). Esto significa que la precisión a largo plazo de su reloj dependerá realmente de la precisión del oscilador; el error debido a las matemáticas contribuirá sustancialmente a menos de un tic de error por año. Aunque la duración de cualquier segundo tendrá un error relativo de hasta 25 ppm, en intervalos de promedio cada vez más largos, el error desaparece .

Este es el algoritmo de Bresenham aplicado al cronometraje, y la fracción 6754/8105 se encontró de la siguiente manera:

32768 * 1,027491251 = 33668,833312768

La fracción continua exacta de 33668.833312768 es [33668; 1, 4, 1, 1349, 1, 7].

Omitir el último término da el aproximado 33668 + 6754/8105, que tiene todas las partes que encajan perfectamente en 16 bits.

Un oscilador que funcione con precisión a 31 891 269 116 µhz o un temporizador con un período de 1,0274912510 segundos requeriría una precisión de al menos 10 10 . Su mejor apuesta es usar un reloj atómico que puede ser tan preciso como 10 14 .

Tenía la esperanza de evitar el hardware costoso si es posible. En este momento estoy logrando esto con un módulo RTC regular y un Arduino, y puedo hacer la conversión de 1000ms a 1027.4912510ms, sin embargo, solo tengo una resolución de aproximadamente 1-2 segundos, lo que significa que ES autocorregible pero no es terriblemente preciso .
@renegadeds, entonces debe dejar en claro en su pregunta qué precisión es aceptable. Y proporcione algo de contexto: una sola etiqueta [arduino] sería una buena pista de que no está construyendo un soporte de laboratorio de alta precisión.
Observé que actualicé la pregunta y agregué la etiqueta Arduino.

Podría hacerse con un reloj de referencia atómico de rubidio u otro a 10 MHz, tal vez un PLL para dar (digamos) 100 MHz, y luego contar con un acumulador de fase de ~36 bits para dar una resolución de 0,001 Hz. Esto último podría hacerse con un pequeño FPGA.

Puede leer sobre los métodos de síntesis digital directa (DDS). Hay chips que hacen el DDS pero tal vez no con un ancho de bits tan amplio.

Los módulos de reloj de rubidio están disponibles en el mercado de excedentes o de fabricantes como Microsemi.

No defines "caro", por lo que esto es algo así como un tiro en la oscuridad.

Comience con un generador comercial (incluido eBay) de 10 MHz. Rubidio para elegir, pero cualquier precisión que pueda obtener determina su rendimiento.

Ahora construya un divisor programable de 28 bits de longitud. A 10 MHz, puede salirse con la suya con la lógica CMOS 74HC, pero deberá usar una configuración de transporte rápido. La salida también activa un flip-flop de división por dos que proporciona el bit 29.

El divisor puede funcionar en una proporción de 10 274 ​​912 o 10 274 ​​913, según el estado del bit 29. Para una entrada perfecta de 10 MHz, el período de salida efectivo para el bit 28 será de 1,02749125 segundos, que tiene una precisión aproximada de 1 ppb, o unos 30 mseg/año. Una entrada menos precisa, por supuesto, producirá una salida menos precisa.

Usando 74HC161 estándar de bog, puede hacer esto con 8 circuitos integrados, y si tiene cuidado, podría usar una placa de tira de prototipos estándar, aunque querrá tener mucho cuidado al reforzar el sistema de tierra. Perfboard sería más barato, más compacto y más duradero, pero el cableado sería menos conveniente, ya que necesitaría soldar las conexiones. Luego podría colocarlo en algo como RTV de grado electrónico (NO el RTV que obtiene en la ferretería), para un tamaño de módulo final en el rango de 2 x 2 x 1/2 pulgadas, sin contar el oscilador.

EDITAR

Tenga en cuenta que su estándar de rendimiento, al estar vinculado a los RTC "normales", en realidad está en el rango de precisión de 1 segundo/día, que es 30 veces peor que este enfoque. Entonces, en primer lugar, puede eliminar la etapa de bit 29 o, alternativamente, dividir sus 10 MHz a 5 MHz y usar una proporción de 5,137,456. Esta velocidad de reloj más baja en los contadores permitirá una estructura de acarreo más simple, evitando el acarreo rápido que sería necesario a 10 MHz. Su precisión ahora es del orden de 60 mseg/año para un reloj perfecto.

EDICIÓN ADICIONAL

Una mirada rápida a eBay muestra una gran cantidad de OCXO de 10 MHz por menos de 20 dólares. Por lo general, tendrán estabilidades de 1 ppb o mejores, con 0,2 ppb como una especificación bastante común. Consigue uno de estos y deberías estar en buena forma. Querría tomar prestado un medidor de frecuencia/período de resolución bastante alta para determinar la frecuencia de salida real, luego ajustar la relación de división para que coincida.

De acuerdo, e incluso si OCXO no está en el presupuesto de energía, un TCXO es y aún puede mejorar un cristal de reloj.

Los relojes "Estrato 1" se derivan de 10 11 Cristales de corte SC utilizados en ~ $ 250 VC-OCXO (por ejemplo, Vectron) a menos que compre usados. Luego, con la sintonización para sincronizar relojes globales como WWV, VLF, GPS 10MHz o 1pps, que a su vez están sincronizados con 10 14 relojes atómicos a través de "bloqueado a 3 satélites". Entonces usted puede calibrar a 10 11 error.

Para hacer otra f, como su frecuencia, se requiere una compensación de 2.07% de 1 pps, por lo que esto no se puede hacer ajustando un cristal de reloj en 10 6 estabilidad.

Se utiliza un PLL de tipo "sintetizador de fracción N" para derivar cualquier proporción de una referencia como 10Mhz de algunas unidades de GPS.

Si un oscilador TCXO tiene una estabilidad de 1 ppm, solo se puede ajustar un poco más que esto y no un 2,07% de compensación de 1 pps o 1,0274912510 Hz, por lo que un PLL con un chip N fraccional es una forma de hacer esto con un VC-OCXO o un OCXO sintonizado con tapa mecánica.

agregado : para generar 1 pps en el tiempo de MAR, la relación de división es 26,337.44856 usando 5 dígitos enteros y un residuo de 5 dígitos.

  • Si puede ajustar el Xtal a 0,01 ppm, solo será estable, por lo general, a 1 ppm, a menos que se fabrique un microhorno a ~30 °C, ya que Tempco suele ser nulo en torno a la temperatura corporal para algunos XTALS, no necesariamente MEM. A menos que el Vcc y la temperatura sean constantes dentro de 0,1 grados 'C, cualquier intento de corregir el error residual mejor que 0,01 ppm es imposible, incluso 0,1 ppm es difícil a corto plazo y el envejecimiento a largo plazo será de al menos 1 ppm por año.

  • Por lo tanto, en teoría, si tuviera un reloj calibrado de 1 ppm de un GPS para sintonizar la hora de la Tierra en 1 ppm, sería imposible esperar una mejor corrección de precisión para el residual.

  • Valor de error residual del divisor por segundo. es 44856/100000 (+26,337)

  • Convirtiendo 44856 a binario = 1010111100111000
  • Esto necesita un contador de residuos para alternar entre /44856 y 45857

  • Hacemos esta división de residuos truncando el número de residuos binarios a 8 bits y luego girando los bits para que MSB se convierta en LSB.

  • 10101111 se convierte en 11110101

  • Cada segundo, un contador de residuos desde 11110101 y donde cada posición de bit "n" = 1 es el valor de conteo en binario n ^ 2 donde la proporción de enteros divididos es 45857 en lugar de 44856. Dado que el LSB = 1, significa que cada segundo conteo cambia hasta 101 segundos, luego la opción del divisor se alterna para el siguiente conteo de 1 pps. Esto se repite para elegir qué divisor se usa para el siguiente segundo, luego incrementa el puntero, hasta que el puntero llega al final y espera el próximo reloj terrestre de 1 pps.

  • Este proceso se repite para la cuenta completa de este residuo binario rotado o 10101111>11110101= 245 segundos, de modo que se crea un divisor de sintetizador N fraccionario de 1 pps de tiempo de Marte cada segundo con correcciones realizadas cada ciclo de 245 segundos para mantenerse a tiempo. a largo plazo.

-quizás la relación divisoria de punto flotante para el reloj es más fácil.

Puede resolver esto de manera bastante trivial en el software sin cambiar el hardware en absoluto (aunque es posible que desee una frecuencia de referencia más estable), mediante el uso de fracciones binarias, y puede hacerlo de una manera que le brinde una resolución de milisegundos y puede liberarse fácilmente suficientes errores de conversión acumulativos para permitirle ver la precisión fundamental de cualquier fuente a la que pueda hacer referencia, incluido un reloj atómico.

Lo que haría es modificar la interrupción de su temporizador para que se acumule en un registro muy amplio, y en cada interrupción agregue un valor bastante largo que sea una representación tan precisa de la proporción de un milisegundo de la Tierra a un "milisegundo de Marte" como desee.

Digamos por el bien del argumento que quería una resolución de 32 bits para la conversión. Podría usar un acumulador de 64 bits, con los 32 bits inferiores representando la fracción. Lo que haría sería calcular el valor apropiado, un poco menos de 2^32, que representa el factor de conversión. Cada vez que se activa la interrupción de milisegundos de la Tierra, agrega este valor al acumulador. Cada vez que desee consultar el reloj, devolverá los 32 bits superiores, que es el número de milisegundos enteros de Marte transcurridos, mientras que los 32 bits inferiores solo se conservan internamente para evitar errores de redondeo.

El uso de fracciones binarias largas como esta le permite realizar una conversión con tanta precisión como desee. Es casi seguro que 32 bits es demasiado largo para la fracción, mientras que 32 bits para los milisegundos completos pueden ser demasiado cortos, pero puede ajustarlo como desee.

Por cierto, esta técnica de acumular en un registro largo pero solo reportando una cantidad de bits más significativos es cómo la síntesis digital directa puede producir una resolución de frecuencia extremadamente alta.

También podría considerar hacer parte de la conversión cambiando la relación del divisor del reloj del sistema de 8 o 16 MHz a la interrupción de milisegundos, acercándolo al intervalo de un "milisegundo de Marte". Especialmente si desea algo más preciso que un cristal barato, es posible que esté tratando con una referencia habitual de 10 MHz disciplinada por un GPS o más directamente por un reloj atómico, por lo que podría sustituirla por la fuente de reloj AVR habitual de 8/16 MHz y volver a calcular relaciones de división en consecuencia.

La síntesis digital directa (DDS) o el enfoque del oscilador controlado numéricamente es una forma bastante sencilla de obtener cualquier nivel deseado de resolución de una frecuencia de salida sin depender de la frecuencia del reloj.

En este enfoque, tiene un acumulador de fase de alta resolución. Cada ciclo a tu alrededor agrega un incremento de fase que también tiene una resolución fina. La salida es el bit más alto del acumulador.

Cuando se usa para dar una onda cuadrada, los bordes solo pueden cambiar con el reloj de entrada (o la velocidad del bucle del software), por lo que el borde se mueve desde donde debería estar, pero con el tiempo, no hay un error acumulativo: puede hacer la resolución como alto como quieras.

Puede hacerlo en software con bastante facilidad (por ejemplo, en AVR), y algunos micros ahora tienen hardware NCO. http://ww1.microchip.com/downloads/en/AppNotes/90003131A.pdf Un pequeño PIC podría hacer esto en hardware con una resolución de 20 bits (1 ppm), desde un xtal de 32 kHz o desde un horno preciso de 10 MHz.

Considere obtener un cristal de cuarzo personalizado horneado que funcione en algún múltiplo entero de su frecuencia deseada. No cuestan mucho más que una frecuencia estándar. Búsqueda web "cristal de cuarzo personalizado"