¿Es menos preciso usar un temporizador más corto que usar uno más largo?

3

Estoy usando un dsPIC 33FJ128GP804 y estoy tratando de registrar datos a 200 Hz con la mayor precisión posible. Mi dispositivo también tiene un GPS y me doy cuenta de que mi temporizador está a la deriva en comparación con el GPS en aproximadamente 333 ms / hora. Creo que debería ser posible hacerlo mejor que eso. Mi fuente de reloj es un cristal de 40 Mhz con una tolerancia de 30 ppm y una estabilidad de 50 ppm y un envejecimiento de 5 ppm / año.

Tengo el oscilador del PIC en funcionamiento a 72Mhz. No puedo cambiar esto, es necesario ejecutar UARTS a 3Mbit.

Durante mi prueba para averiguar por qué hay tanta tendencia, hice un experimento. Estoy ejecutando dos temporizadores, uno a 200Hz y otro a 5Hz. En los controladores de interrupción, el temporizador de 200Hz incrementa la int larga en 1 y el temporizador de 5Hz incrementa la int larga en 40. Los dos ints largos deben permanecer iguales. Sin embargo, después de 45 minutos, los valores difieren en 6. (30 ms)

¿Por qué veo una diferencia entre los dos valores? ¿Y hay algo que pueda hacer para aumentar la precisión de mi temporizador además de cambiar el cristal? ¿Tener un período más largo aumenta la precisión? Si es así, ¿podría usar un temporizador más lento para restablecer periódicamente mi temporizador más rápido? ¿Cambiaría la fuente de mi temporizador al oscilador externo desde el reloj de instrucciones?

Utilizo el tiempo del GPS para corregir el tiempo en el procesamiento posterior, pero el GPS no siempre está disponible, por lo que no quiero tener que confiar en él.

    
pregunta FigBug

1 respuesta

5

Los temporizadores dividen el reloj hacia abajo por valores enteros. El promedio a largo plazo que sale de un temporizador será el mismo que el del oscilador.

Parece que su período de temporizador está apagado en 1. Lea la hoja de datos cuidadosamente. Probablemente no haya puesto el valor correcto en el registro de períodos. Por lo general, estos temporizadores funcionan de tal manera que el período es el valor de registro del período más 1.

Otra posible fuente de error es cómo se acciona el cristal. La precisión se especifica para una capacitancia de carga particular, que a menudo puede ser un poco impredecible ya que la capacitancia parásita puede ser una parte significativa del total. Sin embargo, eso no explicaría por qué dos temporizadores que se ejecutan desde el mismo reloj no están de acuerdo con el tiempo transcurrido. Solo un error de firmware puede causar eso.

    
respondido por el Olin Lathrop

Lea otras preguntas en las etiquetas