Hola!!
Necesito controlar de forma precisa, la velocidad de un pequeño motor de continua y parece ser que el método más óptimo es por modulación de ancho de pulso. La razón es que dicho motor mueve un engranaje que lleva un encoder óptico, de forma que se puede controlar su posición por el número de pulsos que genera dicho encoder... ;D
Por el momento estoy utilizando un driver (L293D) y la velocidad la estoy regulando introduciéndole una señal PWM (obtenida de Arduino y con la función "analogWrite") a la patilla "ENABLE" de dicho driver.
Según tengo entendido, con Arduino sólo podemos obtener una señal PWM de frecuencia y PW (ancho de pulso) constante y dónde sólo podemos variar el Voltage de salida, entre un rango de 0-255 (0 es voltios y 255 es 5 voltios) ¿Esto es así?... :

Con ello consigo un cambio de velocidad pero no con la precisión que necesito para controlar el engranaje...

También he pensado en crear una función software para generar dicho tren de pulsos.
Supongo que básicamente se trataría de utilizar la función "digitalWrite" y bucles anidados, con conceptos del ejemplo de generación de tonos de música con Piezo Speaker ("Play Melody") y parecida a la que ha desarrollado Quique [Ver Topic : Controlando varios motores de contínua] .
Así que dicha función, contendría parámetros con los que pudiera controlar la Frecuencia, Periodo, PW (ancho de pulso), "Vaverage" (tasa de voltage de salida) o factor "Duty Cycle" (% tiempo que el pulso está activo en un ciclo), etc. Es decir, con los parámetros que definen la señal PWM.
En el siguiente enlace de Wiring se habla de todo ello:
http://webzone.k3.mah.se/k3dacu/projects/ivrea/motor/pwm.html¿Podría ser esto viable?...¿O alguién ya lo ha pensado?... ???
También he investigado por la red y he encontrado el siguiente esquema de circuito, para controlar la velocidad de un motor DC a través de un tren de pulsos!!:
http://www.todorobot.com.ar/circuitos/dc-speed.pdfNo lo he implementado todavía, pero estoy en ello...Y parece ser bastante sencillo y fácil de acoplar con Arduino...Ya me dicen... ;D
Ufff...pues eso es todo...
Un saludo.