La solución es dependiente del HW y la forma de hacer la conversión giro a orden de subir/bajar.
A fin de cuentas para saber si el giro es rápido o lento se necesita una base de tiempo con la que comparar.
Si dispones de temporizador HW o SW con una granularidad suficiente como para medir el tiempo entre pulsos entonces podrás tomar la decisión.
Piensa que 16 pulsos por revolución son 22,5°, 32 pulsos 11,25° y así sucesivamente. Si el número de pulsos es bajo la sensación es tosca pero si es muy alto la separación entre pulsos puede ser menor a 1 ms y por tanto el polling debería ser menor a 0,5 ms para asegurarte de no perder un estado. Esta frecuencia tan alta (2000 Hz) requiere de un procesador potente para muestrear y hacer cálculos...
Aunque te parezca una exageración 1ms entre pulsos solo tienes que poner el osciloscopio al encoder y darle un golpe al botón para hacer un avance rápido y veras lo que digo.
Además para cada muestreo tienes que asegurarte que no te encuentras en un rebote, cosa que con un encoder caro no sucede.
Una solucion para ver la velocidad es pasar la rotación a tensión mediante un filtro pasoalto de prenfasis y si el muestreo es a velocidad "constante" un filtro FIR te puede valer, pero claro esto es mas tiempo de CPU.
En el PIC yo uso interrupciones por flanco en ambos bits. Cada dibit leído una vez filtrado con el sw antirebote adaptativo se encola en una FIFO suficientemente larga como para no perder pulsos. Cuando haya tiempo se analiza la secuencia y se hacen los cálculos necesarios y aunque el uP esté liado con esta u otra tarea, los pulsos que van llegando del encoder se siguen almacenando...
Si el uP dispone de RTOS mucho mejor, pero si el encoder no se gestiona 100% por HW para que el SW sea menos crítico no queda otra que optimizar mediante interrupciones e incluso ensamblador. El polling puede funcionar bien si solo se dedica al muestreo y poco más, nada de tareas "apropiativas" largas y cosas así.
Y no me enrrollo más. Uf