Estoy buscando construir un módulo RTC para Arduino que se ejecute en tiempo de Marte. El factor de conversión es 1.0274912510 segundos terrestres a 1 segundo de Marte.
Si bien logré lograr esto mediante programación con una resolución de <2 segundos (que no es exactamente la 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 preguntándome si sería posible tener algún tipo de oscilador de bajo voltaje funcionando exactamente a 31,891,269,116 µHz (31.891269116 kHz) que, más o menos, sería 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 se active una vez cada 1.0274912510 segundos.
Respuestas:
Use un cristal de 32768 kHz como todos los demás, pero divida por 33669 en su lugar, dando un error de -5.08ppm. (Puede eliminar eso recortando la capacidad 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 para el 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 30ms 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 suspender 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 tiempo de la Tierra hasta el momento, aunque eso probablemente se puede solucionar cambiando una constante.
fuente
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 su intervalo de temporizador en 33668 ticks, 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 a 33669 ticks.
De lo contrario, deje el contador solo y configure el intervalo del temporizador para el siguiente segundo en 33668.
Esto le dará (suponiendo un cristal perfecto de 32.768kHz) un intervalo promedio de
segundos (menos de un error de parte por billón en relación con 1.0274912510), en lugar de 1.0274963378906 segundos (error de casi 5 partes por millón). 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 menos de una marca de error por año. Aunque la longitud de cualquier único segundo tendrá un error relativo de hasta 25 ppm, más de más tiempo e intervalos de promediación más largos desaparece el error.
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 para 33668.833312768 es [33668; 1, 4, 1, 1349, 1, 7].
Al descartar el último término se obtiene la aproximada 33668 + 6754/8105, que tiene todas las partes que se ajustan perfectamente a 16 bits.
fuente
Un oscilador que funciona exactamente a 31,891,269,116 µhz o un temporizador con un período de 1.0274912510 segundos requeriría una precisión de al menos10- 10 . Su mejor opción es usar un reloj atómico que pueda ser tan preciso como10- 14 .
fuente
Se podría hacer con un rubidio u otro reloj de referencia atómica a 10MHz, quizás un PLL para dar (digamos) 100MHz, y luego contar con un acumulador de fase de ~ 36 bits para dar una resolución de 0.001Hz. 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 quizás 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.
fuente
No se define "caro", por lo que esto es algo así como un tiro en la oscuridad.
Comience con un generador comercial de 10 MHz (incluido eBay). Rubidio para elegir, pero cualquier precisión que pueda obtener establece su rendimiento.
Ahora construya un divisor programable de 28 bits de longitud. A 10 MHz puede salirse con la lógica CMOS 74HC, pero necesitará usar una configuración de transporte rápido. La salida también desencadena una división entre dos flip-flop que proporciona el bit 29.
El divisor puede funcionar a una relación de 10,274,912 o 10,274,913, dependiendo del 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 es aproximadamente exacto a 1 ppb, o aproximadamente 30 ms / año Una entrada menos precisa, por supuesto, producirá una salida menos precisa.
Usando 74HC161s estándar de pantano, puede hacer esto con 8 circuitos integrados, y si tiene cuidado, podría usar una placa de tira de prototipos estándar, aunque debería tener mucho cuidado al reforzar el sistema de tierra. El 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 relación de 5,137,456. Esta frecuencia de reloj más baja en los contadores permitirá una estructura de transporte más simple, evitando el transporte rápido que sería necesario a 10 MHz. Su precisión ahora es del orden de 60 ms / año para un reloj perfecto.
EDICION ADICIONAL
Un vistazo rápido a eBay muestra una gran cantidad de OCXO de 10 MHz por menos de 20 dólares. Normalmente tendrán una estabilidad de 1 ppb o mejor, con 0.2 ppb como una especificación bastante común. Obtenga uno de estos y debería estar en buena forma. Debería pedir 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.
fuente
Los relojes del "Estrato 1" se derivan de10- 11 SC corta cristales usados en ~ $ 250 VC-OCXO (por ejemplo, Vectron) a menos que compre usados. Luego, con la sintonización para la sincronización con relojes globales como WWV, VLF, GPS 10MHz o reloj de 1pps que a su vez se sincronizan10- 14 relojes atómicos a través de "bloqueado a 3 satélites". Entonces puedes calibrar a10- 11 error.
Para hacer otra f, como su frecuencia, requiere un desplazamiento del 2.07% de 1pps, por lo que esto no se puede hacer ajustando un cristal de reloj en10- 6 estabilidad.
Se utiliza un tipo PLL de "fracción N sintetizador" para derivar cualquier relación de una referencia, como 10Mhz, de algunas unidades GPS.
Si un oscilador TCXO tiene una estabilidad de 1ppm, solo se puede ajustar un poco más que esto y no un desplazamiento del 2.07% de 1 pps o 1.0274912510 Hz, por lo que un PLL con un chip N fraccionario es una forma de hacerlo con un VC-OCXO o una tapa mecánica sintonizada OCXO.
agregado - Para generar el 1pps en tiempo MAR, entonces 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 haga un microhorno a ~ 30 ° C, ya que Tempco generalmente es nulo alrededor de la temperatura corporal para algunos XTALS no necesariamente MEM. A menos que Vcc y temp estén en contacto dentro de 0.1 ° C, cualquier cosa que intente corregir el error del residuo mejor que 0.01 ppm es imposible, incluso 0.1ppm es difícil a corto plazo y el envejecimiento a largo plazo será de al menos 1ppm por año.
Por lo tanto, en teoría, si tuviera un reloj calibrado de 1 ppm de un GPS para sintonizar 1 ppm de tiempo en la Tierra, sería imposible esperar una mejor corrección de precisión para los residuos.
Valor de error residual del divisor por segundo. es 44856/100000 (+26,337)
Esto necesita un contador de residuos para alternar entre / 44856 y 45857
Hacemos esta división de residuos truncando el número de residuo binario 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 de 11110101 y donde cada posición de bit "n" = 1 es el valor de conteo en binario n ^ 2, donde la relación de división entera es 45857 en lugar de 44856. Dado que el LSB = 1, significa que cada segundo conteo cambia hasta 101 segundos, entonces la opción del divisor se alterna para el siguiente recuento de 1pps. Esto se repite para elegir qué divisor se usará para el siguiente segundo, luego incremente el puntero, hasta que el puntero llegue al final y espere el siguiente reloj terrestre de 1pps.
Este proceso se repite para el recuento completo de este residuo binario rotado o 10101111> 11110101 = 245 segundos, de modo que se crea un divisor de sintetizador N fraccionario de 1pps de tiempo de Marte cada segundo con correcciones hechas cada ciclo de 245 segundos para permanecer en el tiempo. a largo plazo.
-quizás la relación del divisor de punto flotante para el reloj es más fácil.
fuente
Puede resolver esto de manera bastante trivial en el software sin cambiar el hardware (aunque es posible que desee una frecuencia de referencia más estable), utilizando fracciones binarias, y puede hacerlo de una manera que le brinde una resolución de milisegundos y pueda 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 relación de un milisegundo de Tierra a un "milisegundo de Marte" como desee.
Digamos por razones de argumento que deseaba una resolución de 32 bits para la conversión. Podría usar un acumulador de 64 bits, con los 32 bits más bajos que representan la fracción Lo que haría es calcular el valor apropiado, un poco menos de 2 ^ 32, que representa el factor de conversión. Cada vez que se dispara su interrupción de milisegundos de Tierra, agrega este valor al acumulador. Cada vez que desee consultar el reloj, devuelve los 32 bits superiores, que es el número de milisegundos completos 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. 32 bits es casi seguro que es demasiado largo para la fracción, mientras que 32 bits para todo el milisegundo pueden ser demasiado cortos, pero puede ajustarlos como desee.
Por cierto, esta técnica de acumular en un registro largo pero solo informar un número 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, puede estar 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 8/16 MHz habitual y volver a calcular relaciones divisorias en consecuencia.
fuente
El enfoque de síntesis digital directa (DDS) o oscilador controlado numérico es una forma bastante simple 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 su alrededor agrega un incremento de fase que también tiene una buena resolución. 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 frecuencia de bucle del software), por lo que el borde fluctúa desde donde debería estar, pero con el tiempo, no hay error acumulativo: puede hacer la resolución como tan 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 PIC pequeño 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 de 10 MHz preciso.
fuente
Busque conseguir que un cristal de cuarzo personalizado al horno 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"
fuente