Esto va a ser bastante difícil de hacer para dos motores, ya que tienes que mirar dos canales de encoder por motor. No es imposible, pero hay mucha codificación realmente cuidadosa para asegurarse de que no se pierda ninguna transición de ninguno de los canales del codificador en ninguno de los motores (es decir, tiene 4 cosas que observar para los eventos, y si bien hay una correlación entre los canales, no hay ninguno entre los motores). Habría cierta tentación de darle a cada motor su propio microcontrolador o usar un chip de contador en cuadratura para capturar la retroalimentación (o hacerla usted mismo en un CPLD barato).
Ya que quiere poder girar ángulos precisos, presumiblemente por la rotación diferencial de las dos ruedas, consideraría hacer un par de controladores de posición en lugar de un controlador de velocidad, cada uno de los cuales giraría su motor para igualar los conteos logrados a los conteos en un registro de posición deseado. Para simplificar las cosas, su interfaz de comando principal podría ser un número firmado (de al menos 16 bits, pero probablemente 24 o incluso 32) que se agregará a la posición deseada que está buscando cada controlador.
En un nivel superior, entonces tendría un planificador de movimiento, que periódicamente usaría para actualizar las posiciones deseadas. Cuando se mueve a una velocidad fija, simplemente emite un comando para otros n pasos cada milisegundos, cuando acelere o disminuya la velocidad, lance menos. Para convertir, envía un número positivo a uno y un resultado menos positivo (o para el momento, negativo) al otro. Conceptualmente, esto es lo mismo, independientemente de si se está comunicando entre bloques lógicos en un programa en un procesador o comandando procesadores esclavos.