Logo Studenta

Práctica_2_ENCODER

¡Este material tiene más páginas!

Vista previa del material en texto

INSTITUTO TECNOLÓGICO DE LA LAGUNA 
DEPARTAMENTO DE ELÉCTRICA – ELECTRÓNICA 
INGENIERÍA ELECTRÓNICA 
SISTEMAS DE COTROL EN TIEMPO REAL 
 
PRÁCTICA 2: ENCODER 
 
 
CARLOS ALBERTO GARCÍA EZQUERRA 
N° DE CONTROL 17131200 
OSCAR DAVID MORENO GARCÍA 
N° DE CONTROL 17131208 
RAÚL CABRERA OLAGUE 
 N° DE CONTROL 17131192 
RODRIGO SÁNCHEZ ORDAZ 
N° DE CONTROL 17131219 
 
 
 
 
TORREÓN, COAHUILA DE ZARAGOZA, MÉXICO 
19 DE JUNIO DE 2020 
 
INDICE 
 
OBJETIVOS ............................................................................................................ 1 
INTRODUCCIÓN .................................................................................................... 1 
MARCO TEÓRICO ................................................................................................. 2 
ENCODER ........................................................................................................... 2 
TIPOS DE ENCODERS ....................................................................................... 3 
INTERRUPCIONES DE ARDUINO ..................................................................... 5 
DESARROLLO ....................................................................................................... 6 
PRIMER PROGRAMA ......................................................................................... 7 
SEGUNDO PROGRAMA ..................................................................................... 9 
TERCER PROGRAMA ...................................................................................... 12 
CONCLUSIONES ................................................................................................. 15 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
1 
 
 
 
OBJETIVOS 
 
General: Conocer el funcionamiento de los encoders. 
Particulares: 
 Introducirse en el uso del Arduino Due. 
 Realizar mediciones de velocidad de giro y sentido de giro de un motor de 
corriente directa por medio de un encoder, con la ayuda de Arduino. 
 
 
 
INTRODUCCIÓN 
 
Para una gran cantidad de aplicaciones que utilizan motores, es necesario poder 
medir y/o controlar los parámetros de los mismos, tales como el sentido de giro y la 
velocidad angular. Existen una gran cantidad de herramientas y métodos para este 
fin, pero una de las más comunes es el uso de encoders o codificadores rotatorios. 
 La presente práctica se desarrolló con la finalidad de conocer el uso de estos 
dispositivos, además de aprender a implementar aplicaciones con la placa Arduino 
Due. 
 Para ello, se desarrollaron tres programas, todos con la misma finalidad: 
medir el sentido y la velocidad de giro de un motor de corriente directa. La diferencia 
entre ellos es la cantidad de muestras que son tomadas del encoder, esto con la 
finalidad de hacer más óptima la medición. 
 Estos parámetros se midieron de dos maneras: una, observado las señales 
emitidas por el encoder a través de un osciloscopio digital, y la otra, a través del 
monitor serie de Arduino, el cual también permite observar la dirección del giro, junto 
con la cantidad de muestras tomadas del encoder. 
 
 
 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
2 
 
 
 
MARCO TEÓRICO 
 
ENCODER 
 
Los encoders son componentes que se añaden a un motor de corriente 
continua para convertir el movimiento mecánico en pulsos digitales que puedan ser 
interpretados por el sistema de electrónica de control integrado. El principal objetivo 
de los distintos tipos de encoders es el de transformar información de un formato a 
otro, con el propósito de estandarización, adecuación de la velocidad o control de la 
seguridad. 
 
Los motores DC tienen un complejo control de posición y de la velocidad, su 
comportamiento es no lineal y depende mucho de la carga que soportan; por este 
motivo necesitan de la aplicación de un encoder (que puede estar integrado o no) 
que permita conocer y asegurar la correcta posición del eje. 
 
Según su diseño y funcionalidad existen distintos tipos de encoders. 
Poniendo énfasis en su composición, un encoder se compone de un disco 
conectado a un eje giratorio. El disco puede estar fabricado de vidrio o plástico, y 
se codifica combinando zonas transparentes y opacas que bloquean el paso de la 
luz. 
 
A continuación, y entrando ya en su funcionamiento, se puede decir que con 
la rotación del eje, la fuente emisora infrarroja emite una luz que es interpretada por 
el sensor óptico (o foto-transistor) que a su vez genera los pulsos digitales, según 
la luz atraviesa el disco o es bloqueada por las zonas opacas. Esto produce una 
secuencia de información que permite controlar aspectos como la dirección del 
movimiento, el radio de giro, y en algunas circunstancias, la velocidad. 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
3 
 
 
 
Algunas de sus aplicaciones más extendidas son la robótica, los pequeños 
electrodomésticos de uso doméstico o ciertas aplicaciones industriales que 
requieren de una medición angular. 
 
 
 
 
TIPOS DE ENCODERS 
 
Encoder óptico 
Se trata del tipo de encoder más usado y está compuesto por una fuente emisora 
de luz, un disco giratorio y una detector de luz “foto detector”. 
El disco está montado sobre un eje giratorio y dispone de secciones opacas y 
transparentes sobre la cara del disco. La luz que emite la fuente es recibida por 
el fotodetector o interrumpida por el patrón de secciones opacas produciendo como 
resultado señales de pulso que son leídas por un dispositivo controlador el cual 
incluye un microprocesador para determinar el ángulo exacto del eje. 
 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
4 
 
 
 
Encoder lineal 
Es un dispositivo o sensor que cuenta con una escala graduada para determinar su 
posición. Los sensores en el encoder leen la escala para después convertir su 
posición codificada en una señal digital que puede ser interpretada por un 
controlador de movimiento electrónico. 
 
Los encoders lineales pueden ser absolutos o incrementales y existen 
diferentes tipos de encoders lineales según la tecnología que se usa en su 
mecanismo. 
 
Este tipo de encoder se utiliza en aplicaciones de metrología, sistemas de 
movimiento y para controlar instrumentos de alta precisión en la fabricación de 
herramientas. 
 
Encoder absoluto 
Los encoders absolutos ofrecen un código único para cada posición y se dividen 
en dos grupos: los encoders de un solo giro y los encoders absolutos de giro 
múltiple. Su tamaño es pequeño, lo que permite una integración más simple. 
 
Los encoders absolutos se aplican en motores eléctricos de corriente directa y 
sin escobillas, en sectores específicos como la maquinaria sanitaria. 
Encoder incremental 
Se trata de un tipo de encoder óptico, que determina el ángulo de posición a raíz de 
realizar cuentas incrementales, donde cada posición es completamente única. 
 
Encoder de cuadratura 
Estas 2 señales son leídas por un sistema microcontrolador, el cual 
puede calcular tanto la velocidad en revoluciones por minuto (RPM), la posición 
del eje y el sentido de giro. 
Los sensores de efecto Hall son transductores que generan un voltaje de 
salida en respuesta a la presencia de un campo magnético variable. 
Las aplicaciones típicas son en sensores de proximidad, medición de 
corriente y medición de velocidad en motores de corriente directa. 
Para aplicaciones de cálculo de velocidad y posición, los sensores son 
colocados con una separación de 90°, con respecto al círculo completo de giro 
del eje del motor. 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
5 
 
 
 
Un imán de ferrita induce en los sensores las señales A y B mostradas 
en la figura de abajo. Ambas señales están desfasadas 90°, debido a la 
posición de los sensores con respecto al círculo de giro. 
 
 
 
INTERRUPCIONES DE ARDUINO 
 
Arduino dispone de dos tipos de eventos en los quedefinir interrupciones. Por 
un lado están las interrupciones de timers, y por otro, están las interrupciones 
de hardware, que responden a eventos ocurridos en ciertos pines físicos. 
Dentro de las interrupciones de hardware, Arduino es capaz de detectar 
los siguientes eventos. 
 RISING, ocurre en el flanco de subida de LOW a HIGH. 
 FALLING, ocurre en el flanco de bajada de HIGH a LOW. 
 CHANGING, ocurre cuando el pin cambia de estado (rising + falling). 
 LOW, se ejecuta continuamente mientras está en estado LOW. 
En el caso del Arduino Due los 53 pines digitales pueden ser usados 
para interrupciones. 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
6 
 
 
 
DESARROLLO 
 
La práctica consistió en comprobar el funcionamiento de un encoder de cuadratura 
en un motor de corriente directa. 
 
Para ello, se probaron 3 programas distintos, que se describirán más 
adelante. Las conexiones realizadas corresponden al siguiente diagrama, para las 
tres fases de la práctica: 
 
El comportamiento del motor se observó a través del osciloscopio, pues con 
la señal generada es posible conocer el sentido y la velocidad de giro. La eficacia 
de los programas se observó a través del serial de Arduino, pues en él es posible 
observar la cantidad de muestras tomadas por el encoder, además del sentido de 
giro. 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
7 
 
 
 
PRIMER PROGRAMA 
 
El código introducido fue el siguiente: 
 
Se empiezan declarando los pines 3 y 4 del arduino en donde las salidas 
del encoder entraran. La variable encoder0Pos es la posición angular cuyas 
unidades son las muestras que el arduino obtiene del encoder. 
En el setup se definen las variables encoder0PinA (pin 3 del arduino) y 
encoder0PinB (pin 4 del arduino) como entradas. Se comienza la comunicación 
serial y se define una resolución de escritura de 8 bits. 
Dentro del loop primero se lee el estado de encoder0PinA y se compara 
mediante un if con la última muestra obtenida de la misma variable, si son 
diferentes significa que hubo un desplazamiento angular. Después se pregunta 
por el estado de encoder0PinB para definir en qué sentido está girando el motor 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
8 
 
 
 
y definir si la posición encoder0Pos está aumentando o disminuyendo. Se 
imprimen los resultados en el monitor serial. Dado que este programa 
solamente detecta los cambios de estado cuando se pregunta por ellos, la 
cantidad de muestras no será muy grande, además de que depende del 
encoder utilizado. En este caso, este programa con este encoder, brinda 86 
muestras. 
Si el motor, visto de frente, gira hacia la derecha, la señal amarilla del 
osciloscopio aparecerá adelantada y el monitor serie mostrará un ascenso en 
los valores de sus salidas, si gira hacia la izquierda, la señal azul aparecerá 
adelantada y el monitor serie mostrará un descenso en los valores de sus 
salidas. A continuación se muestran los resultados obtenidos con este 
programa. Primero, se muestran el monitor serie y el osciloscopio para un giro 
hacia la derecha. 
 
 
 
 
 
 
 
 
Y ahora se muestra la señal para un giro hacia la izquierda: 
 
 
 
 
 
 
Se puede observar que los resultados obtenidos son los predichos. 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
9 
 
 
 
SEGUNDO PROGRAMA 
 
El código introducido fue el siguiente: 
 
Se empiezan declarando las variables globales encoder0PinA en el pin 
2 del Arduino y encoder0PinB en el pin 3, que son las salidas del encoder. Se 
define encoder0Pos como una variable de tipo entero que será la posición 
angular del motor cuyas unidades serán las muestras obtenidas del arduino 
por el encoder. 
 
En el setup se definen los pines encoder0PinA y encoder0PinB como 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
10 
 
 
 
entradas y se les asigna un valor inicial en alto. Se declara la interrupción en 
el pin 2 de tal forma de que cuando haya un cambio de estado (de 0 a 1 o de 
1 a 0), es decir que haya un desplazamiento angular, se interrumpa el programa 
y realice la función doEncoder. 
 
En el loop se imprime la posición encoder0Pos en el monitor serial 
mientras se espera por la interrupción. 
 
En la función doEncoder, que es la función de interrupción si 
encoder0PinA y encoder0PinB se encuentran en el mismo estado (alto o bajo) 
está girando en un sentido, si se encuentran en estado diferente está girando 
en sentido contrario. 
 
En este programa, el Arduino detecta los cambios de estado mediante 
una interrupción, es decir, que el programa detectara una muestra si hay un 
cambio independientemente de en qué parte del código este corriendo en ese 
momento, por lo que la cantidad de muestras debería ser aproximadamente el 
doble que en el programa anterior. Mediante pruebas, se determinó que este 
nuevo número es 164. 
 
A continuación se muestran los resultados obtenidos con este 
programa. Primero, una prueba estática para determinar el número de 
muestras por medio del monitor serie: 
 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
11 
 
 
 
Se muestran también las señales obtenidas en el osciloscopio, para 
ambos sentidos de giro, siguiendo la misma convención que en el programa 
pasado. 
 
 
 
 
 
 En estas imágenes es posible apreciar también la posibilidad de medir la 
velocidad de giro. Claramente una señal con una frecuencia mayor, indica una 
mayor velocidad de giro, como lo es el caso de la segunda de las imágenes 
presentadas arriba. A partir de la frecuencia, se puede obtener el período de la 
señal. Por ejemplo, en la segunda imagen la frecuencia es de 111.4Hz o ciclos por 
segundo. Dado que una revolución consta de 84 ciclos, se puede establecer que el 
motor gira a 1.32 revoluciones por segundo. El mismo calculo sencillo permite 
conocer la velocidad angular del motor a partir de la frecuencia medida. 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
12 
 
 
 
TERCER PROGRAMA 
 
El código introducido fue el siguiente: 
 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
13 
 
 
 
 
Igual que en los códigos anteriores se declaran como variables globales 
encoder0PinA en el pin 2, encoder0PinB en el pin3 y encoder0Pos. 
En el setup se definen encoder0PinA y encoder0PinB como entradas. 
Hasta aquí todo igual que el código anterior. La diferencia es que ahora se 
declaran dos interrupciones, una para cada salida del encoder. Cuando haya 
un cambio de estado (lo que significa un desplazamiento angular) en el pin 2 
el programa se interrumpe para realizar la función doEncoderA y cuando haya 
un cambio de estado en el pin 3 el programa se interrumpe para realizar la 
función doEncoderB. Por ultimo en el setup se inicia la comunicación serial. 
En el loop se imprime la posición encoder0Pos en el DAC mientras se 
espera por las interrupciones.Las funciones doEncoderA y doEncoderB son 
prácticamente iguales así que solo se describirá una. Se pregunta por el 
encoder0PinA si se encuentra en alto, si es así ahora se pregunta por el estado 
del encoder0PinB para saber en qué sentido está girando el motor. Si el 
encoder0PinA se encontraba en bajo igual se vuelve a preguntar por el estado 
de encoder0PinB para saber en qué sentido se encuentra girando el motor. 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
14 
 
 
 
Dada la mejora en el programa, la nueva cantidad de muestras será 
aproximadamente el doble, pues ahora detecta los flancos de subida. 
Realizando pruebas, se pudo observar que el nuevo número de pruebas es 
329. Esto se puede observar en la siguiente imagen, que muestra las salidas 
del monitor serie: 
 
 Se presentan también imágenes de las señales del osciloscopio para 
corroborar el correcto funcionamiento del encoder, y las cuales muestran una 
mayor velocidad de giro. 
 
 
 INTITUTO TECNOLÓGICO DE LA LAGUNA 
 
 
15 
 
 
 
CONCLUSIONES 
 
Los encodersson herramientas sumamente útiles para realizar mediciones de 
los parámetros de motores de corriente directa. Además de esto, y aun cuando 
no se vio en esta práctica, su uso permite realizar un control muy preciso del 
movimiento de los motores, brindando la posibilidad de decidir qué tanto se 
desplaza, a qué velocidad o en qué dirección. 
 Es importante que tanto el encoder como el programa utilizados sean 
capaces de brindar una cantidad suficiente de muestras, ya que entre más 
muestras se tengan, más precisos serán los movimientos del motor en caso de 
ser controlado. 
El uso de las interrupciones es también muy útil para este tipo de 
aplicación, pues permite medir con mayor precisión los fenómenos físicos que 
ocurren durante el movimiento de los motores.

Continuar navegando