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

14

Estoy buscando construir un módulo RTC para Arduino que funcione en el tiempo de Marte. El factor de conversión es 1.0274912510 segundos de la Tierra a 1 segundo de Marte.

Aunque he logrado esto programáticamente con una resolución de < 2 segundos (lo cual no es exactamente lo ideal, preferiría algo así como 300 ms de precisión) utilizando matemáticas de punto fijo en un Arduino Uno conectado a un RTC normal módulo, me pregunto 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 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, siempre y cuando no sean prohibitivamente caras.)

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

    
pregunta renegadeds

9 respuestas

40

Utilice un cristal de 32768 kHz como todos los demás, pero en lugar de eso, divídalo por 33669, lo que da un error de -5.08ppm. (Puede eliminarlo 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 la compensación de temperatura para las temperaturas ambientales de Marte, la mayoría de los cristales de reloj solo están disponibles para el uso de la Tierra, a menos que pueda encontrar proveedores marcianos ...

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

Arduino o similar hará el trabajo, pero el MSP puede ponerse en suspensión 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 ser arreglado cambiando una constante.

    
respondido por el Brian Drummond
41

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 lo suficientemente fácil como para no hacerlo.

Establezca el intervalo del temporizador en 33668 ticks, comience un contador en 0, y en cada interrupción del temporizador, incremente el contador en 6754.

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

De lo contrario, deje el contador solo 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 un error de una parte por trillón en relación con 1.0274912510), en lugar de 1.0274963378906 segundos (casi 5 partes de error por millón). Esto significa que la precisión a largo plazo de su reloj dependerá verdaderamente de la precisión del oscilador; el error debido a las matemáticas contribuirá sustancialmente a menos de una marca de error por año. Aunque la duración de cualquier single segundo tendrá un error relativo de hasta 25 ppm, en intervalos de promediación más largos y más largos, el error desaparece.

Esto es algoritmo de Bresenham aplicado a la hora, 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 el aproximado 33668 + 6754/8105, que tiene todas las partes que encajan perfectamente en 16 bits.

    
respondido por el hobbs
17

Un oscilador que se ejecute a precisamente 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} \ $.

    
respondido por el Dmitry Grigoryev
15

Se podría hacer con un reloj de referencia de rubidio u otro atómico a 10MHz, tal vez 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. Lo último se podría hacer 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 Rubidium están disponibles en el mercado de excedentes, o de fabricantes como Microsemi.

    
respondido por el Spehro Pefhany
7

No se define "caro", por lo que es una especie de tiro en la oscuridad.

Comience con un generador de 10 MHz comercialmente (incluido eBay). Rubidium para elegir, pero la precisión que obtenga puede establecer su rendimiento.

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

El divisor puede funcionar en una proporció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 de 1 ppb, o alrededor de 30 mseg / año. Una entrada menos precisa, por supuesto, producirá una salida menos precisa.

Al usar 74HC161s estándar, puede hacer esto con 8 IC, y si tiene cuidado puede usar un tablero de tiras de prototipos estándar, aunque debería tener mucho cuidado al reforzar el sistema de tierra. El panel de perfilado 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, puede 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.

EDIT

Tenga en cuenta que su estándar de rendimiento, al estar vinculado a RTC "regulares", está en el rango de precisión de 1 seg / día, que es 30 veces peor que este enfoque. Entonces, primero que nada, 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 menor velocidad de reloj 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.

MÁS EDICION

Un vistazo rápido a eBay muestra una gran cantidad de OCXO de 10 MHz por menos de 20 dólares. Estos tendrán típicamente estabilidades de 1 ppb o mejor, con 0.2 ppb una especificación bastante común. Consigue uno de estos y deberías estar en buena forma. Querría pedir prestado un medidor de frecuencia / período de resolución bastante alta para determinar la frecuencia de salida real, y luego ajustar la proporción de división para que coincida.

    
respondido por el WhatRoughBeast
4

Los relojes "Stratum 1" se derivan de \ $ 10 ^ {- 11} \ $ SC cristales de corte utilizados en ~ $ 250 VC-OCXO (por ejemplo, Vectron) a menos que compre usado. Luego, con la sintonización para sincronizar los 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". Luego puede calibrar a \ $ 10 ^ {- 11} \ $ error.

Para hacer otra f, como su frecuencia, requiere un desplazamiento del 2.07% de 1pps, por lo que no es posible sintonizar un cristal de reloj a \ $ 10 ^ {- 6} \ $ estabilidad.

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

Si un oscilador TCXO tiene una estabilidad de 1 ppm, solo se puede sintonizar un poco más que esto y no un desplazamiento del 2,07% desde 1 pps o 1.0274912510 Hz, por lo que un PLL con un chip (es) fraccional N es una manera de haga esto con un VC-OCXO o un capuchón mecánico sintonizado OCXO.

añadido - Para generar 1pps en el tiempo de MAR, la relación de división es de 26,337.44856 con 5 dígitos enteros y un residuo de 5 dígitos.

  • Si puede sintonizar el Xtal a 0.01 ppm, por lo general solo será estable a 1 ppm, a menos que se fabrique un microhorno a ~ 30 ° C, ya que el Tempco generalmente es nulo alrededor de la temperatura corporal para algunos XTALS no necesariamente MEM. A menos que Vcc y la temperatura estén dentro de 0.1 ° C, cualquier cosa que intente corregir un error de 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 desde un GPS para ajustar la hora de la Tierra de 1 ppm, sería imposible esperar una mejor corrección de precisión para el residuo.

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

  • Convertir 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 residuo binario en 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 n ^ 2 binario donde la relación de enteros de división es 45857 en lugar de 44856. Dado que el LSB = 1, significa que cada segundo conteo alterna hasta 101 segundos, luego la opción del divisor se alterna para el siguiente conteo de 1pps. Esto se repite para elegir qué divisor se usa para el siguiente segundo, luego el puntero de incremento, hasta que el puntero llegue al final y espere el próximo reloj terrestre de 1pps.

  • Este proceso se repite durante todo el recuento de este residuo binario rotado o 10101111 > 11110101 = 245 segundos, de modo que se crea un divisor de N fraccional de sintetizador de 1pps cada segundo de Marte, con correcciones cada 245 seg. a tiempo. a largo plazo.

-puede que la proporción de divisor de punto flotante para el reloj sea más fácil.

    
respondido por el Tony EE rocketscientist
2

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), mediante el uso de fracciones binarias, y puede hacerlo de una manera que le brinde una resolución de milisegundos y pueda hacerlo fácilmente. tener 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ías es modificar la interrupción del temporizador para que se acumule en un registro muy amplio, y en cada interrupción, agrega un valor bastante largo que sea tan preciso como una representación de la relación de un milisegundo de la Tierra a un "milisegundo de Marte", según lo que deseo.

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 más bajos que representan la fracción. Lo que haría sería calcular el valor apropiado, un poco menos que 2 ^ 32, que representa el factor de conversión. Cada vez que su milisegundo en la Tierra interrumpa los incendios, agregue este valor al acumulador. Cada vez que desee consultar el reloj, devuelve los 32 bits superiores, que es el número de milisegundos de Marte completos, mientras que los 32 bits inferiores solo se conservan internamente para evitar el error 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 para la fracción, mientras que 32 bits para los milisegundos completos pueden ser demasiado cortos, pero puede ajustarlos como desee.

Por cierto, esta técnica de acumulación en un registro largo, pero que solo reporta algunos de los 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 sustituirlo por la fuente de reloj AVR habitual de 8/16 MHz y volver a calcular proporciones divisoras en consecuencia.

    
respondido por el Chris Stratton
0

El enfoque de síntesis digital directa (DDS) o de oscilador controlado numérico es una forma bastante simple de obtener el 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 bucle 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 velocidad de bucle del software), por lo que el borde tiembla de donde debería estar, pero con el tiempo, no hay un error acumulativo. Haz la resolución tan alta como quieras.

Puede hacerlo en software con bastante facilidad (por ejemplo, en AVR), y algunos micros ahora tienen hardware NCO. enlace 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.

    
respondido por el Henry Crun
-1

Considere lograr que un cristal de cuarzo personalizado horneado se ejecute 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"

    
respondido por el D Duck

Lea otras preguntas en las etiquetas