Febrero 16, 2015

Servo pequeño – encoder de alta resolución

Written by

Como el encoder que estamos usando parece que no produce resultados adecuados, decidimos cambiarlo y compramos otro de mejor resolución. Buscamos en Ebay y vemos uno que parece de tipo óptico, de 600 pulsos por vuelta. La referencia es: Encoder 600P/R Incremental Rotary Encoder AB 2 phase 6mm Shaft 5V-24V +coupling:

encoder 600 ppv con acoplador de ejes

encoder 600 ppv con acoplador de ejes

Cuando lo recibimos, nos damos cuenta de que no es óptico, o al menos no lo dice, pero lo probamos. Tenemos que cambiar la forma de acoplarlo al motor, usando otro listón y pegándolo con termofusible para que no se mueva. Finalmente queda:

Servo con encoder 600

Servo con encoder 600

Lo conectamos al Arduino maestro y probamos con el mismo programa que tenemos:

Servo L298 con Arduino maestro

Servo L298 con Arduino maestro

El resultado no es alentador. Se muestra igual de caótico en el movimiento. Probamos a medir la salida del encoder y parece que todo funciona correctamente, pero el sistema no controla la posición. Movemos el eje con la mano y parece producir números correctos, aunque cuando se pone en funcionamiento el motor, todo se estropea. Probamos con varias versiones de programa, por si el encoder se puede leer de otra manera, pero sin resultado positivo.

Finalmente escribimos la duda en el foro de Arduino. Pensamos que el problema puede estar en el tratamiento de la lectura del encoder, que se hace con interrupciones. Un par de días después, dos personas responden y parecen confirmar que la velocidad aproximada del eje de salida del motor, multiplicada por 600 pulsos por vuelta del encoder y 4 interrupciones que produce cada pulso, hacen un número demasiado grande para que el Arduino UNO las pueda manejar.

Entonces, decidimos probar a cambiar el encoder al segundo eje, que como tiene una reductora de tornillo sinfin de relación 18:1, esperamos que sea más controlable. Para adelantar la prueba, el profesor se encarga de preparar el cambio del encoder. Quitamos el encoder del eje de salida del motor, ponemos un soporte, por si el tornillo sinfin de salida se tuerce, algo casero, colocamos el acoplador de ejes con el encoder en el segundo eje, y lo apoyamos en una extensión de la base de todo el sistema. Al final queda así:

Servo L298 con encoder en segundo eje

Servo L298 con encoder en segundo eje

Servo L298 con encoder en segundo eje

Servo L298 con encoder en segundo eje

 

 

 

 

 

 

Lo probamos con el programa maestro y el resultado tiene otro cariz. Ahora parece que es más estable y reproduce mejor los movimientos.

 

 

El código que finalmente empleamos es:

ServoL298

Category : BRAZO ROBOT XL

Comments

2 Responses

  1. fernando dice:

    y el codigo

  2. admin dice:

    Hola Fernando. La entrada del blog era antigua y por error no se añadió el código. Ya lo hemos puesto.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Proudly powered by WordPress and Sweet Tech Theme