He diseñado un circuito contador de frecuencia de alta precisión. Lo estoy utilizando para medir una frecuencia de alrededor de 35kHz que es estable a 0,1mHz. Puedo medir la frecuencia usando un Stanford Research Systems SR620 y los únicos dígitos que cambian son 0.000XXX. Mi contador de frecuencia varía alrededor de 1Hz con la misma señal. El SR620 utiliza algún tipo de cálculo de la media para proporcionar un resultado más preciso. Estoy buscando cómo aprender a hacer lo mismo.
Cómo funciona el circuito
Hay dos contadores. Un contador de cuenta atrás y un contador de cuenta arriba. El contador de cuenta atrás se carga con la frecuencia base (o frecuencia de entrada perfecta esperada) multiplicada por el tiempo de muestreo en segundos. El contador descendente disminuye en cada periodo de la entrada de 35kHz. El contador de cuenta ascendente cuenta una señal de 2GHz mientras el contador de cuenta descendente cuenta hasta cero. El contador de cuenta ascendente se detiene cuando el contador de cuenta descendente llega a cero.
Entonces la frecuencia = (frecuencia base * tiempo de muestreo en segundos) / (contador ascendente / 2GHz) o (contador descendente cuenta de inicio) / (contador ascendente / 2GHz)
Mi circuito utiliza un chip PLL bloqueado a un OCXO de 10ppb y 100MHz para generar una señal de 2GHz. Usando un estándar de rubidio de 1pps de salida mi contador tiene una precisión de 2.000.000.000 +-15 para una lectura de 1 segundo. Necesito ser capaz de leer una señal de 35kHz y tener una precisión de 100uHz para una lectura de 1 segundo. La señal de 35kHz puede variar hasta 31kHz y hasta 39kHz pero mis lecturas no se realizan mientras la frecuencia está cambiando.
¿Qué tipo de cálculo haría que estas lecturas fueran más precisas y alguien conoce algún recurso que lo explique?
Mi solución
Mi problema terminó siendo un problema de lógica de circuito a software. Mi desviación estándar pasó de 1Hz a 100uHz después de la corrección. No necesité modificar las matemáticas de mi firmware.