Hola!
Dije que pondría un ejemplo de control de motor "por comparación numérica" con encoder incremental y lo prometido es deuda. No me he complicado mucho la vida y sólo lo he hecho de 8 bits de resolución.
Controlar motores de esta manera es sólo para encoders de muy poca resolución, por ejemplo unos 40 pulsos por vuelta del motor como máximo (esto es dicho a ojo, igual se puede un poco más). No se puede aplicar este método a encoders de mucha resolución porque funciona en plan "o todo o nada" y no tendría un espacio físico para parar el motor de forma estable (se pondría a vibrar).
Yo he usado un motor con encoder "chapuz-casero" de 4 pulsos por vuelta, pero como el "discriminador" o decodificador de onda multiplica por 4, queda como uno de 16 pulsos por vuelta.
Para no andar con 8 cables o interruptores decidí entrar la posición final (posición a la que queremos llevar el motor) a través del PC y el USB, enviando la información a la Icestick (en este caso, porque mañana será Alhambra!). Las conexiones son las siguientes:

Y gráfica, el funcionamiento interno es algo parecido a esto, luego comento detalles sobre cómo funciona exactamente.

Lo importante, y de ahí su nombre, es el comparador. En la entrada A le entra (en este caso) a través del USB un byte de información, que es la posición a la que queremos llevar al motor. La entrada B es la posición actual del motor, y utiliza el mismo esquema que puse en el primer post de ese hilo, pero es de 9 bits. En función del peso de A y B hará girar el motor hacia un lado o hacia el otro y cuando llegue a la posición deseada, parará.
El ICE del circuito real son bloques con funciones específicas. Si hacéis doble clic sobre ellos veréis sus tripas; incluso hay bloques dentro de otros bloques. Esta es una de esas cosas geniales que tiene Icestudio.
En el ICE que adjunto verás el siguiente esquema.

No es tan complicado como aparenta. Lo que sucede es que el comparador lo tuve que dividir para no tener problemas. He añadido 8 leds para poder ver lo que envía el ordenador (la posición deseada); y las tres puertas lógicas es para evitar que el motor se pase en las posiciones finales (cuando llega a 0 y 255). Para poder tener todo el recorrido es importante que el lector de encoder sea de un bit de más, por eso es de 9 bits (Q0..Q8).

Adjunto también el programa (en FreeBasic) por si alguien se anima a probarlo. Con las teclas puedes hacer que haga incrementos/decrementos de 1, 4 y 8. También permite ir directamente a la posición 0, 126 y 255. Funciona a un baudrate de 115200.
Os dejo un vídeo. Piensa que estoy comandando el motor a través del teclado del PC. Le hago moverse con incrementos/decrementos y 3 posiciones absolutas, como expliqué antes. Los leds rojos es la posición que recibe la Icestick desde el PC. Verás que una de las aspas del encoder es de color negra, esa es la referencia y has de comprobar que cuando es 0, esa aspa siempre está en la misma posición, lo cual quiere decir que no pierde ningún pulso.
Saludos!