¿Cómo puede aumentar la velocidad de una interrupción GPIO externa en stm32f4?

2

Estoy tratando de medir la velocidad de un motor de CC con un sensor IR. Mi motor tenía un disco conectado con solo 1/4 de parte de él reflejando. Quería habilitar la interrupción tanto en el flanco descendente como en el ascendente, por lo que la rutina de interrupción se llamará dos veces en esa cuarta región reflejada cuya distancia ya conozco.

Mi ISR activará el temporizador la primera vez y lo deshabilitará la próxima vez que se llame a la interrupción. El problema (que encontré al estudiar el comportamiento de una variable) es que cuando hago que el sensor reaccione rápidamente, mi interrupción se genera solo una vez y no cuando desaparece la superficie reflectante. Pero, cuando muevo algo lentamente delante de él, ambos ocurren perfectamente.

Entonces, mi conclusión es que mi interrupción no está reaccionando lo suficientemente rápido. ¿Cuál crees que es el problema?

    
pregunta Zero_Cool

1 respuesta

3
  

Mi ISR activará el temporizador la primera vez y lo deshabilitará la próxima vez que se llame a la interrupción.

Este no es el método correcto para medir señales de tiempo rápidas. El microcontrolador tiene temporizadores, y estos temporizadores tienen modo de captura.
En el modo de captura, un borde ascendente / descendente de la entrada hace que el valor del temporizador real se almacene en el registro de captura. Tendrá hasta el siguiente borde para leer la marca de tiempo del borde.
Cuando tienes dos marcas de tiempo puedes calcular el tiempo entre ellas.

De esta manera, usted no depende de la latencia de interrupción y el jitter.

  

El problema (que encontré al estudiar el comportamiento de una variable) es que cuando hago que el sensor reaccione rápidamente, mi interrupción se genera solo una vez y no cuando desaparece la superficie reflectante.

Puede que tengas un problema eléctrico aquí. Verifique si los bordes son correctos y no hay rebotes.
Podría eliminar algunos problemas eléctricos con los filtros de entrada digital básicos en los temporizadores de ST. Pero es mejor tener un filtro en primer lugar.

    
respondido por el Jeroen3

Lea otras preguntas en las etiquetas