Actualmente estoy construyendo mi propio oscilador disciplinado por GPS. Tengo un OCXO que se usa como fuente de reloj para un microcontrolador y uno de sus contadores, y la señal de 1PPS del módulo GPS está conectada a una de las entradas de captura del mismo contador.
Actualmente, tengo el siguiente algoritmo de control: En el flanco ascendente de la señal PPS, el valor del contador se bloquea y se compara con el valor anterior. Si la diferencia es algo más que 10000000, entonces el voltaje de EFC del OCXO aumenta o disminuye en consecuencia. Tengo mi GPSDO ahora funcionando por varios días, y parece ser estable como una roca en comparación con un GPSDO comercial de Trimble, pero tiene el problema de que toma al menos un día completo hasta que se bloquee correctamente. Así que trato de encontrar un algoritmo de control que se bloquee más rápido.
Estaba pensando si podría implementar algo como un PLL en el software.
Por ejemplo, Cada vez que se produce el flanco ascendente de la señal 1PPS, podría calcular el valor que el temporizador debería tener la próxima vez que se produzca el flanco ascendente, y así sucesivamente. Al restar el valor del temporizador real del deseado, obtengo algo así como un error de fase que luego podría usar para dirigir el OCXO. Yo esperaría que esto se bloquee más rápido que mi enfoque actual, y debería ser más preciso porque el tiempo de integración es básicamente infinito; incluso el error más pequeño conducirá, en algún momento, a una diferencia de fase superior a 1 conteo.
Otro problema que tengo con ambos enfoques es: ¿cómo puedo determinar cuándo está bloqueada la GPSDO?
¿Hay otros enfoques, probablemente mejores, para el control de un OCXO mediante un pulso de 1PPS?