Logo Studenta

Practica 1_ Encoder rotatorio

¡Este material tiene más páginas!

Vista previa del material en texto

Instituto tecnológico de la laguna 
 
Practica #1: Encoder rotatorio. 
D.I.E.E.E.R 
Profesor: M.C. Edmundo Javier Ollervides Vásquez 
Sistemas de Control en Tiempo Real 
Alumnos: 
 Roberto Blademir Mejia Esquivel 
Angélica Nayeli Calvete Zapata 
Karol Gabriel Vidaña Aldaba 
Torreón, Coahuila. 
27/03/2020 
Índice 
Índice .................................................................................................... ¡Error! Marcador no definido. 
Objetivo: .............................................................................................................................................. 3 
Marco Teórico: .................................................................................................................................... 3 
Material y/o equipo: ........................................................................................................................... 4 
Desarrollo: ........................................................................................................................................... 4 
Resultados: .......................................................................................................................................... 6 
Tabla comparativa ........................................................................................................................... 8 
Código 1: Por nivel .......................................................................................................................... 8 
Código 2: Utilizando una Interrupción .......................................................................................... 10 
Código 3: Dos interrupciones ........................................................................................................ 12 
Conclusión: ........................................................................................................................................ 15 
 
 
 
Objetivo: 
Que los alumnos conozcan el funcionamiento básico de un Encoder rotatorio, sean capaces de leer 
la señal de entrada de dicho dispositivo contabilizando los cambios de estado que se generan al 
intentar cambiar su posición angular (girarlo) 
Marco Teórico: 
Encoders 
En pocas palabras, un encoder es un dispositivo de detección que proporciona una respuesta. Los 
Encoders convierten el movimiento en una señal eléctrica que puede ser leída por algún tipo de 
dispositivo de control en un sistema de control de movimiento, tal como un mostrador o PLC. El 
encoder envía una señal de respuesta que puede ser utilizado para determinar la posición, contar, 
velocidad o dirección. Un dispositivo de control puede usar esta información para enviar un 
comando para una función particular. 
Por ejemplo: 
• En una aplicación de corte a medida, un Encoder con una rueda de medición indica al dispositivo 
de control la cantidad de material que se ha alimentado, por lo que el dispositivo de control sabe 
cuándo cortar. 
Los Encoders utilizan diferentes tipos de tecnologías para crear una señal, incluyendo: mecánica, 
magnético, óptico y de resistencia – óptica es la más común. En el diagrama de un encoder de 
detección óptica, el encoder proporciona 
información basada en la interrupción de la luz. 
El gráfico a la derecha describe la construcción 
básica de un encoder rotativo incremental con 
tecnología óptica. Un haz de luz emitida por un LED 
pasa a través del disco de código, que está 
modelada con líneas opacas (muy similar a los 
radios de una rueda de bicicleta). A medida que el 
eje del encoder gira, la viga de luz del LED es 
interrumpida por las líneas opacas en el disco de 
código antes de ser recogido por la Asamblea 
Fotodetectora. Esto produce una señal de pulso: 
luz = encendido; sin luz = apagado. La señal se 
envía al contador o controlador, que a su vez 
enviará la señal para producir la función deseada. 
Los encoders pueden producir señales ya sea 
incrementales o absolutas. Las señales 
incrementales no indican la posición específica, sólo que la posición ha cambiado. Los Encoders 
absolutos, por otra parte, utilizan una "palabra" diferente para cada posición, lo que significa que 
un encoder absoluto proporciona tanto la indicación de que la posición ha cambiado y una 
indicación de la posición absoluta del encoder. 
Además de la configuración óptica en los encoders, otro método de detección de cambio de estado 
es mediante efecto hall, con magnetismo. 
Los conocidos como 'encoders cuadratura', funcionan mediante el principio del efecto Hall y 
generan 2 señales de onda cuadrada con un desfasamiento de 90°. Es por esto que se conocen como 
encoders en 'cuadratura', ya que ocupan un cuadrante del círculo de 360°. 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. 
Un imán de ferrita induce en los sensores las señales A y B mostradas (ver figura 1). Ambas señales 
están desfasadas 90°, debido a la posición de los sensores con respecto al círculo de giro. 
 
Material y/o equipo: 
- Arduino (uno o due) 
- Encoder 
- Fuente CD variable 
- Osciloscopio 
- Jumpers 
- Laptop 
 
Desarrollo: 
Para la realización de la práctica se utiliza un encoder incremental de 83 perforaciones, es decir, que 
por cada revolución del disco obtendremos 83 lecturas de cambio de estado. EL esquema de 
conexiones es el siguiente: 
 
El encoder tiene 5 pines de conexión: 
- Vcc (motor) 
- GND (motor) 
- Señal 1 
- Señal 2 
- Vcc (encoder) 
- GND(encoder) 
Como se observa la alimentación del motor es independiente del circuito del encoder, por tanto, 
podemos variar el voltaje para cambiar la velocidad de giro. 
Tenemos dos señales de salida, las cuales proporcionan salidas con un desfasamiento de 90° la una 
de la otra, si tomamos una sola de referencia entonces la otra estará adelantada o atrasada esos 
90° dependiendo del sentido en el que gire el motor. 
Preliminarmente tomaremos el circuito del encoder (aun sin involucrar arduino) y conectaremos la 
alimentación del motor y del encoder, y los cables se salida de señal del encoder los visualizaremos 
conectando directamente a un osciloscopio. 
*Empezar con un voltaje no muy alto para comprender el funcionamiento del encoder, después con 
un voltaje intermedio y un voltaje un poco más elevado 
Una vez hemos visto estos datos, entonces podemos incluir arduino con el fin de visualizar el 
funcionamiento, y contabilizar el número de cambios de estado que se producen por revolución. 
 
 
Resultados: 
Pruebas preliminares para ver el comportamiento del encoder: 
Señal a 5.1V (+) 
 
Señal a 7.2V (+) 
 
Señal a 9.2V (+) 
 
 
Señal a 5.1V (-) 
 
Señal a 7.6V (-) 
 
Señal a 9.2V (-) 
 
 
 
 
Tabla comparativa 
 Voltaje Frecuencia Desfasamiento 
Sentido Positivo Negativo Positivo Negativo Positivo Negativo 
Bajo 5.1V -5.1V 128 Hz 127 Hz +90° -90° 
Medio 7.6V -7.6V 158 Hz 158 Hz +90° -90° 
Alto 9.2V -9.2V 200 Hz 203 Hz +90° -90° 
 
Tal como se mencionó en la teoría la diferencia entre un sentido y otro se da en que se adelanta o 
se adelanta 90° en el caso de un giro que denominamos como positivo, y se atrasa 90° si se gira en 
sentido contrario. 
Sabiendo esto podemos utilizar este dato para conocer el sentido de giro del motor utilizando un 
programa de arduino. Teniendo siempre la misma referencia. 
Código 1: Por nivel 
Para poner enpráctica el funcionamiento del encoder se plantean 3 códigos que contabilizan los 
cambios de estados que tiene el encoder al girar el motor. 
 
Como podemos ver, declaramos dos pines para leer las señales que proporciona el encoder, se 
utilizan el pin 3 y el pin 4. 
Usaremos una variable para contabilizar los cambios de estado que ocurren por cada revolución. 
Además, declaramos una variable auxiliar que tomara el valor de estado del pin A del encoder para 
compararlo con el siguiente estado. 
Entonces En el Setup declaramos condiciones iniciales para trabajar con el programa al igual que la 
forma de operación de los pines utilizados. 
Ahora simplemente para el loop o lazo constantemente estaremos leyendo el estado digital del pin 
A que es el que tomaremos como principal referencia, el dato lo guardamos en una variable auxiliar 
“n”. Ahora preguntamos por dos condiciones que serán si el dato anterior es 0 o LOW y el estado 
actual es 1 o HIGH entonces haremos otra pregunta, si el estado actual de B es alto o bajo, en caso 
de que sea bajo sabemos que gira en sentido negativo y si B está en estado alto sabremos que gira 
en sentido positivo (según perciba el usuario el sentido). Una vez que se define si está girando a un 
lado o al otro se aumenta la posición en 1 o bien se resta la posición en -1. 
Después el valor anterior toma el valor actual convirtiéndose en el siguiente valor anterior y esto se 
repite constantemente. 
Y de esta manera se hace el conteo de forma que solamente se cuenten los cambios a estado alto 
lo que sería igual a la cantidad de perforaciones que tiene el disco suponiendo que sea por medios 
ópticos el cambio de estado. 
 
Ahora bien, está es la forma más sencilla de leer la posición del encoder, una simple regla de tres 
nos indica que por cada cambio de estado el motor a girado 4.33 grados, esto si bien funciona, 
carece de resolución y pierde exactitud a la hora de aplicarlo a un problema real, entonces al usar 
interrupciones podremos aumentar la resolución y por tanto estimar en mejor manera la posición 
actual del giro del motor. 
Código 2: Utilizando una Interrupción 
Este segundo código incrementara la resolución pues en lugar de solo detectar un cambio de estado 
como el anterior que solo detectaba cuando teníamos un flanco de subida, en este detectaremos 
cuando haya un flanco de bajada es decir que tendremos el doble de muestras por tanto en lugar 
de conocer la posición cada que el motor gira 4.33 grados, sabremos la posición cada vez que el 
motor gira 2.16 grados 
 
En esta parte del código volvemos a declarar nuestros pines de entrada (las salidas del encoder) y 
una variable que nos indique la posición del encoder inicializada en cero. 
En el setup al igual que en el caso anterior declaramos valores preliminares además de la forma de 
trabajar de los pines a utilizar 
Adicional a lo que se veía en el código anterior, tenemos que declarar la forma en la que trabajara 
la interrupción y hacia cuál de los pines está dirigida la interrupción, además de cual acción se 
tomara al detectar la interrupción 
Entonces, la interrupción se ejecuta cuando existe un cambio de estado ya sea de negativo a positivo 
o bien de positivo a negativo. 
 
En la fracción anterior de código observamos que función se ejecutara cuando ocurra la 
interrupción, por lo tanto, cada que ocurra un cambio de estado en A se preguntara si el pin A es 
igual al pin B, en caso de que sea cierto, el motor gira en un sentido positivo y en caso de que sean 
diferentes el giro en negativo 
Por tanto, ahora la cantidad de muestras se duplica como se expresó con anterioridad y lo podemos 
observar en el monitor serie. 
 
Entonces tenemos una mejor resolución, pero la cantidad de muestras se puede mejorar aún más 
si usamos una interrupción en ambas entradas A y B 
 
 
Código 3: Dos interrupciones 
Ahora bien, podemos aumentar el número de muestras si usamos el mismo principio del código 
anterior y aplicarlo a ambas señales y no solo a una señal A
 
En principio es muy similar al código anterior, añadiendo una segunda interrupción para el pin B 
 
Ahora el programa necesita comparar un par de datos más para saber en qué dirección gira además 
se puede hacer de igual manera que en el programa anterior donde si las dos entradas tenían el 
mismo valor giraba en dirección negativa y si lo hacía en sentido positivo estas eran diferentes o 
bien como se ve arriba es una propuesta un poco diferente pero que al final hace lo mismo. 
 
Para el código de la segunda interrupción se hace algo muy similar casi repetitivo 
Por tanto, el número de muestras que vamos a obtener será el doble del que se tenía cuando solo 
había una interrupción y sumado a esto, se puede decir que se multiplica por cuatro el número de 
muestras con respecto al primer programa que nos arrojaba el conteo solo de la cantidad de 
perforaciones del disco 
Y como sabemos las dos señales están desfasadas 90° la una de la otra entonces, también sabemos 
que los cambios de estado ocurren cada 180° por tanto, en la primera señal los cambios ocurren en 
0°/360° y en 180°, y la segunda señal si referimos a la primera señal, los cambios curren en 90° y 
270° por tanto tenemos un cambio de estado cada 90° y esto nos da una resolución de 344 muestras 
por revolución lo que es casi 1°mecanico por cada cambio de estado como lo observamos en el 
monitor serie: 
 
Adicional, si la variable de posición que usamos la declaramos como volatile int que es lo mismo que 
un entero con signo, tendremos números negativos en el caso de que el motor comience a girar en 
sentido negativo como podemos ver: 
 
Esto puede ayudar a completar el programa en forma que podemos determinar el número de 
vueltas que se han dado para un sentido, cambiar el sentido y conocer cuántas vueltas debe dar 
para volver al origen. 
Conclusión: 
El encoder rotativo que utilizamos en esta práctica y los que existen en general tienen un gran uso 
dentro de muchos procesos, puede ir desde lo domestico donde el motor de una cochera 
determine que tantas vueltas debe dar un engrane o polea para abrir una puerta o portón que 
deja entrar el auto, o en el mismo automóvil donde puede usar un encoder en el sistema de 
ignición de manera que conozca la posición del cigüeñal y mande la señal de la ignición a los 
pistones en turno (de dos en dos en un sistema de 4 cilindros), otro ejemplo simple sería un 
medidor de rueda, midiendo la distancia con el número de vueltas que da la rueda de diámetro 
conocido. Y dentro de la industria los encoders se encuentran en muchos procesos desde medir 
cantidades (en longitud) o bien al mover la maquinaria que actúa en el proceso, determinar la 
posición de alguna máquina o bien como tacómetro entre muchas cosas más. Aplicando esto en 
robótica podemos determinar la posición del robot o programarlo para hacer un recorrido 
especifico, los servomotores utilizan encoders para determinar la posición angular y estos son 
muy usados en muchos procesos como robots manipuladores o móviles que se basan en 
posiciones angulares para hacer los procesos, de todo esto podemos ver cuán útil es conocer la 
posición angular de un motor y como un encoder facilita esta operación.

Continuar navegando