Вы находитесь на странице: 1из 9

MOTOR PASO A PASO Y ENCODER EN

ARDUINO
Aprendizaje basado en proyectos

Autor: Juan Lagos Roca


Fecha de Elaboración: 21/01/2017
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

En este tutorial, el motor paso a paso (en adelante, MPP) se moverá de acuerdo a cómo se rota
el encoder. Además, el encoder posee un botón central, el cual se utiliza para devolver el MPP
hacia su posición inicial. En este proyecto, se utiliza, un MPP NEMA 17 (ver Figura 1) con un
encoder rotatorio con botón (o pulsador) incluido (ver Figura 2), como controlador para el motor
se utiliza la tarjeta Easy Driver (ver Figura 3), la tarjeta de programación electrónica utilizada es
un Arduino UNO (ver Figura 4).

Figura 1: Motor Paso a Paso NEMA 17

Figura 2: Encoder Rotatorio con botón central en la manilla

Figura 3: Tarjeta controladora para Motores Paso a Paso ‘Easy Driver’

Figura 4: Tarjeta Electrónica de Programación ‘Arduino UNO’

En la Figura 5 se muestra el diagrama esquemático del proyecto. Como se muestra en el


diagrama, se utilizan 5 pines para conectar el controlador Easy Driver y 3 pines para el Encoder.

www.biwy-mecatronica.com 1
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

Los 4 cables del MPP NEMA (2 por bobina), son conectados directamente a las salidas A y B del
Easy Driver. Los pines 2, 3 y 4 del Arduino están conectados a los pines CLK, DT y SW,
respectivamente, del encoder rotatorio. El pin voltaje y GND Easy Driver son conectados a una
fuente de alimentación de 12V 1A. El motor NEMA 17 que se utiliza tiene un amperaje máximo
de alrededor de 0.45A. Se conecta el GND del Arduino UNO al Easy Driver para servir como una
referencia.
Para la programación del Arduino, se utiliza como apoyo explicativo el diagrama de flujo
mostrado en la Figura 6. En primera instancia, se definen los pines que se conectan a la tarjeta
Easy Driver, se declaran las variables para las interrupciones para detectar el movimiento del
Encoder Rotatorio, se declaran las constantes para las conexiones del Encoder, se declaran las
variables para almacenar la posición del MPP, para el control de la velocidad y para setear la
dirección de la rotación del MPP, ya sea derecha o izquierda. La variable para guardar la
posición actual, se utiliza para poder mover de regreso a la posición inicial, cuando el botón es
presionado. A continuación, se muestra el código correspondiente.

www.biwy-mecatronica.com 2
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

ALIMENTACIÓN ETAPA DE SENSADO ETAPA DE PROCESAMIENTO ETAPA DE ACTUACIÓN

ARDUINO
MOTOR PASO A PASO
ENCODER CLK 2
DT 3 8 DIR EASY DRIVER 1A 1A
SW 4 9 STEP 1B 1B
10 MS1 2A 2A
5V-Encoder 11 MS2 2B 2B
12 SLEEP GND
12V
FUENTE DE ALIMENTACIÓN

5V-Encoder

5V-Arduino 5V-Arduino

12V-Easy Driver

(*) Se recomienda generalmente conectar los dispositivos directamente a la fuente de alimentación y evitar utilizar la alimentación proveída del Arduino. En otras palabras, si por ejemplo, el encoder se alimenta con 5V (como
en este caso), se puede conectar a la alimentación que entrega el Arduino (Pin 5V), aunque por recomendación se debería conectar directamente a la fuente de alimentación.
(**) Si se utiliza más de una fuente de alimentación que entregan diferentes voltajes, se deben unir la todas las tierras de las diferentes fuentes de alimentación.

Figura 5: Diagrama Esquemático del Proyecto

www.biwy-mecatronica.com 3
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

Iniciar

Conexiones,
Variables y
Parámetros

Función:
DeteccionRotacion()

Función:
setup()

Función Ciclo:
loop()

¿PinSW es
presionado?

¿MPP hacia la
derecha?
No Sí

Regresar a la Regresar a la
Posición Inicial Posición Inicial
(Mover hacia la (Mover hacia la
derecha) izquierda)

¿Se ha
No detectado una
vuelta?

¿Dirección
Izquierda?
No Sí

Mover hacia la Mover hacia la


derecha izquierda

Figura 6: Diagrama de Flujo Generalizado para la programación

www.biwy-mecatronica.com 4
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

Luego, se desarrolla una función para una rutina de interrupción que se ejecuta si la señal
CLK va desde HIGH a LOW. Si la señal en el PinCLK es HIGH, entonces la señal en el PinDT
también es HIGH. Lo mismo ocurre con LOW. Esto permite determinar el sentido de la variable
DeteccionRotacion de acuerdo a cómo se mueva el encoder rotatorio. Debido a que es una
función, se ejecutarán las instrucciones cuando sea llamada o invocada.

En la función setup() se inicializan los pines de entrada y salida, y aquellas instrucciones que
se ejecutan una vez al iniciar la ejecución del programa.

En la función loop() se ejecutan aquellas instrucciones que se repiten durante el


funcionamiento. En esta función se tienen las siguientes instrucciones. Se consulta si el botón del
encoder PinSW es presionado. Luego se consulta si la posición del motor PosicionMpp es
distinto de cero, es decir que se ha movido y no se encuentra en la posición inicial. Luego, se
consulta si el motor se ha movido hacia la derecha, para ello, la PosicionMpp debió haber
aumentado con respecto a la posición inicial. Si se cumplen las tres condiciones anteriores,

www.biwy-mecatronica.com 5
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

entonces el motor regresará a la posición inicial moviéndose hacia la izquierda. Como no se


utiliza ninguna librería en este proyecto, para mover el Motor NEMA 17, se debe ingresar HIGH
y Low muy rápido. La variable PasosRecorrido se utiliza para controlar de cierta manera, la
velocidad por cada movimiento. Hay librerías que permiten más opciones, como establecer la
velocidad, la aceleración y más.

De manera similar al algoritmo anterior, en caso de que el motor se ha movido hacia la


izquierda, se regresará a la posición inicial moviéndose el motor hacia la derecha.

La decisión principal anterior, corresponde a la decisión de cuándo es presionado el botón del


encoder para regresar al motor a su posición inicial. Otra decisión principal, corresponde a la

www.biwy-mecatronica.com 6
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

decisión de cuándo es rotado el encoder para mover el motor hacia una determinada posición y
dirección, de acuerdo al movimiento de rotación del encoder. Para lograr esta decisión principal,
en primera instancia se consulta si hay una vuelta detectada en el encoder rotatorio, es decir, si la
variable VueltaDetectada es igual a true. Luego, la misma variable se iguala a false, para evitar
que el encoder rotatorio genere pasos adicionales, lo que podría provocar una posición incorrecta
del motor. A continuación, se consulta la dirección de la rotación del encoder, por medio de la
variable DireccionRotacion. Si DireccionRotacion es igual a true, significa que el encoder se ha
movido en sentido anti-horario, por lo que el motor se moverá en la misma dirección. Las
instrucciones para mover el motor son similares a las utilizadas anteriormente, para cuando se
mueve el motor en el momento en que el botón es presionado.

En el caso de que la rotación del encoder sea a la derecha (sentido horario), DireccionRotacion
= false, entonces se moverá el motor en la misma dirección.

www.biwy-mecatronica.com 7
Motor Paso a Paso y Encoder en Arduino. Aprendizaje basado en proyectos

Redes Sociales

https://www.youtube.com/c/biWy-mecatronica

https://www.facebook.com/biwy.mecatronica

https://twitter.com/biWy_MCT

www.biwy-mecatronica.com 8

Вам также может понравиться