Estoy tratando de medir la velocidad de un motor de CC usando un sensor IR. Mi motor tenía un disco adjunto con solo 1/4 parte reflejada. Quería habilitar la interrupción tanto en el borde descendente como en el ascendente para que la rutina de interrupción se llame dos veces en esa región reflectante de 1/4 cuya distancia ya conozco.
Mi ISR activará el temporizador la primera vez y lo desactivará 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 frente a é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?
Mi ISR activará el temporizador la primera vez y lo desactivará 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 flanco ascendente/descendente de la entrada hace que el valor real del temporizador se almacene en el registro de captura. Tendrá hasta el próximo borde para leer la marca de tiempo del borde.
Cuando tiene dos marcas de tiempo, puede calcular el tiempo entre ellas.
De esta forma, no depende de la latencia de interrupción ni de la fluctuación de fase.
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.
Es posible que tenga 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 básicos de entrada digital en los temporizadores de ST. Pero es mejor tener un filtro en primer lugar.
Ale..chenski