Oscilador disciplinado usando contador + micro

2

Estoy trabajando en la implementación de un oscilador disciplinado para aumentar la precisión y la estabilidad a largo plazo. El oscilador sería un VCTXO que se ejecuta a aproximadamente 25 MHz. Mi idea es tener un contador de 32 bits que cuente cada ciclo de reloj. Se usaría un GPS 1PPS como la referencia de tiempo y el conteo comenzaría en un pulso dado. Después de varios pulos (quizás uno, quizás 100, quizás algún otro valor), un microcontrolador leerá el conteo y se generará una señal de realimentación para reducir o acelerar la frecuencia del VCTXO.

Como un ejemplo más concreto, un oscilador de 25 MHz idealmente tendría exactamente 2,500,000,000 pulsos en un período de 100 segundos. Pero el conteo real será ciertamente alto o bajo. Basado en el conteo real, se aplicaría una señal de corrección al VCTXO para acelerarlo o ralentizarlo. La estabilidad y precisión del oscilador a largo plazo se vincularían a la referencia temporal

Mi principal dificultad es encontrar un contador adecuado.

  • Me gustaría algo que sea de 32 bits (da algo así como 200 segundos entre reinversión).
  • El contador debe ser pequeño. Estoy desarrollando para un dispositivo móvil de bajo consumo. Un solo ic de 4 a 7 mm de tamaño sería ideal.
  • Idealmente, la lectura del contador estaría sobre SPI para admitir el microcontrolador actual. Por tamaño y simplicidad, preferiría no usar un bus paralelo para leer el valor del contador.
  • ¿Pensamientos en contadores síncronos frente a asíncronos?

Estoy abierto a diferentes tecnologías que se podrían usar como contador (micro, FPGS, CPLD, array Flip-flop, etc.). Dé sugerencias sobre cómo implementar.

Encontré el LS7366R-TS ( enlace ) que parece algo que podría funcionar, pero parece que no puedo encontrarlo en venta en cualquier lugar. Me puse en contacto con la empresa y aún no he recibido respuesta. Pero también me pregunto si hay alternativas y métodos que podrían ser más adecuados y más fáciles de almacenar. Déjeme saber si necesito aclarar más el problema.

    
pregunta py_man

2 respuestas

2

Es extremadamente difícil encontrar un microcontrolador en el mercado en estos días que no tenga algún tipo de módulo contador / temporizador incorporado en el chip; por lo general, tienen varios, porque son universalmente útiles. Y a menos que elija un µC muy pequeño y de baja potencia, no tendrá ningún problema en contar a 25 MHz.

Si el contador de hardware no tiene suficientes bits, utilícelo como preescalador y haga el resto del conteo en el software. Utilice la interrupción de desbordamiento del contador para incrementar un contador de software y combine los resultados según sea necesario.

Entonces, simplemente conecte su oscilador a la entrada del reloj del contador y configure el contador para que funcione libremente. Conecte la señal del GPS 1 PPS a una línea de interrupción. Cada vez que se dispara la interrupción, lea el contador. Reste la lectura anterior de la lectura actual para averiguar cuántos ciclos de osciladores han transcurrido en el segundo GPS actual (lo que explica el balanceo, por supuesto). Utilice este valor para calcular la próxima actualización de voltaje de control.

Y querrás hacer esto cada segundo. Intentar promediar el conteo durante cientos de segundos puede parecer una buena forma de obtener una mayor precisión, pero de hecho, hará que el sistema se corrija muy lentamente luego de perturbaciones externas (por ejemplo, cambios de temperatura y voltaje).

    
respondido por el Dave Tweed
2

Hice sonething así hace un tiempo. Es un vctcxo Tyco de alta estabilidad disciplinado por un GPS. Uno de The mcus está configurado como un comparador de fase y otro como generador de frecuencia de contador.

Puedo publicar un enlace más tarde.

Editar: no se pudo encontrar el enlace más, pero aquí está la esencia del proyecto.

El objetivo era producir cualquier generador de frecuencia arbitrario a partir de un oscilador fijo disciplinado por una señal de GPS de 1pps.

Se compone de dos mcus.

Mcu1 usa el oscilador principal como su reloj (un vctcxo de alta estabilidad tco919r. Es un oscilador sonet). Este mcu hace dos cosas. 1. Nos divide la frecuencia del oscilador a través de un generador propio y 2. Produce una señal de 1pps, que se compara con la señal de GPS de 1pps

Mcu2 compara los dos trenes de pulsos de 1pps. Esencialmente, es un contador donde el conteo se inicia con un tren de pulsos y termina con el otro. La cuenta se usa luego como un ciclo de trabajo para impulsar un generador propio cuya salida pasa a través de un lpf en el pin vctrl del vctcxo.

Implementación minimalista, muy simple de implementar. Todo esto lleva de 10 a 15 segundos para bloquear. Probablemente el gpsdo más simple que puedas encontrar.

La configuración de dos mcu fue necesaria para reducir el jitter.

Espero que ayude.

Edit 2: Mentí acerca de no poder encontrar la li k. Aquí está enlace

    
respondido por el dannyf

Lea otras preguntas en las etiquetas