Hola!
Me engancho al proyecto.
Siempre que pense en estos carteles me complicaba pensando en como alimentar la parte movil. Ahora ya lo se, gracias al post anterior.
Respecto de la velocidad del motor, es algo con lo que me ha tocada trabajar en algunas oportunidades, y es mas bien sencillo:
Ponemos un sensor que envie un pulso (o dos) por vuelta del eje. Yo uso sensores HALL y dos imanes (2 para no desbalancear el motor), pero en definitiva es lo mismo.
Supongamos que quiero mantener fija una velocidad de 2000 rpm. Ajusto el PWM al 90% (como para empezar, un valor arbitrario cualquiera serviria), y mido el tiempo entre dos pulsos. Ese sera el tiempo que le tomo al motor dar una vuelta (o media, si tengo dos sensores). Si el tiempo es mayor que el correspondiente a 2000 rpm (que deberia ser 0.03 segundos si las cuentas no me fallan), significa que voy muy lento, asi que aumento el PWM (a 91%, por ejemplo) y vuelvo al paso anterior. Si el tiempo es menor, resto 1 al PWM, y vuelvo al paso anterior. Y listo!
Yo arranco con el pwm = 50%, y en unas pocas vueltas la velocidad alcanza el valor deseado. Suele ser conveniente promediar 10 vueltas y despues ajustar el pwm. Eso hace mas lenta la respuesta, pero evita que el motor cambie de velocidad constantemente. Esta "paradoja" se da por la inercia mecanica del motor:
Supongamos que con PWM=50% la velocidad es baja. Ponemos 51% y volvemos a medir. Sigue siendo baja, ponemos 52%, etc. Quizas cuando lleguemos a 70% la velocidad sea la correcta. Pero, a la vuelta siguiente, la velocidad resulta ser excesiva. ¿Por que ocurre eso? Sencillo: pasar de 50% a 70% solo nos tomo 20 vueltas del motor (o 10 si tenemos dos sensores), lo que significa que debido a la inercia mecanica el motor este todavia acelerando y al llegar a la velocidad requerida "se pase".
Soy una animal explicandolo, pero creo que el concepto queda claro. Si no, posteo un trozo de codigo que seguramente se va a entender mejor.
Saludos!