Descarga la aplicación para disfrutar aún más
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.
Compartir