ENCODER ÓPTICO
Un codificador óptico (encoder óptico) incremental tiene dos canales (A y B) posicionado 90 ° fuera de fase. Estos canales ca nales se pueden utilizar juntos para indicar la posición posici ón angular y la dirección, así como calcular la velocidad angular.
•
•
•
•
•
Cualquier transductor que genera una lectura en clave de una medición puede ser denominado un encoder Los encoders de eje son transductores digitales que se utilizan para medir los desplazamientos angulares y velocidades. VENTAJAS RELATIVAS DE TRANSDUCTORES DIGITALES A TRAVÉS DE SUS CONTRAPARTES ANÁLOGAS: Alta resolución (dependiendo del tamaño de palabra de la salida del codificador y el número de pulsos por revolución del encoders) Alta precisión (sobre todo debido a la inmunidad al ruido de las la s señales digitales y la construcción superior) La relativa facilidad de la l a adaptación en los sistemas de control digital (porque salida del transductor es digital) con la reducción asociada en el coste del sistema y la mejora de la fiabilidad del sistema Encoders de eje se pueden clasificar en dos categorías categ orías en función de la naturaleza y el método de interpretación de la salida: Codificadores incrementales i ncrementales y absoluta ENCODERS INCREMENTALES La salida es una señal de impulso que se genera cuando el disco transductor gira como un resultado del movimiento que se está midiendo.
Contando los pulsos o midiendo el tiempo de la anchura de pulso utilizando una señal de reloj, tanto el desplazamiento angular y la velocidad angular se puede determinar. El desplazamiento se puede conseguir con respecto a algún punto de referencia en el disco, como se indica mediante un impulso de referencia (índice de pulso) generado en esa ubicación en el disco. El número de impulsos de índice determina el número de revoluciones completas. El desplazamiento también se puede conseguir por el sistema de toma de referencia para definir la posición cero en un punto determinado en la máquina real o mecanismo. ENCODERS ABSOLUTOS Un encoder absoluto tiene muchas pistas del pulso en su disco transductor. Cuando el disco de un codificador absoluto rota, varios trenes de pulsos iguales en número a las pistas del disco - se generan de forma simultánea. En un instante dado, la magnitud de cada señal de impulso tendrá uno de dos niveles de señal (es decir, un estado binario) tal como se determina por un detector de nivel. Este nivel de la señal corresponde a un dígito binario (0 o 1). Por lo tanto, el conjunto de trenes de impulsos da un número binario codificado en cualquier instante. Las ventanas de pulsos sobre las pistas pueden ser organizados en un cierto patrón (código) de manera que cada uno de estos números binarios corresponde a la posición angular del disco del codificador en el momento en que el número binario particular se detecta. Voltaje de pulso se puede hacer compatible con algún tipo de lógica digital (por ejemplo, TTL) Lectura digital directa de una posición angular es posible. Codificadores absolutos son comúnmente utilizados para medir las fracciones de una revolución. Codificadores absolutos pueden tener también una pista adicional que genera un impulso de índice por cada revolución, como en el caso de un codificador incremental. Este pulso de índice puede ser utilizado en el procedimiento de toma de referencia que define una posición de referencia para el motor, así como otra manera de medir revoluciones completas del motor.
•
En código binario, el cambio de bits no puede tener lugar simultáneamente. Diagrama esquemático de un patrón de disco codificador absoluto (a) Código Binario (b) Código Gray
La ambigüedad de conmutación de bit se puede evitar mediante el uso de código de gray. Sin embargo, la lógica adicional que se necesita para convertir el número gray una codifica para un correspondiente número binario. Codificador absoluto debe ser alimentado y controlado sólo cuando se toma una l ectura. Además, si una lectura es olvidada, que no afectará a la siguiente lectura.
•
ELEMENTOS DEL ENCODER ÓPTICO El encoder óptico utiliza un disco opaco (disco de código) que tiene una o más pistas circulares, con un arreglo de ventanas transparentes idénticas (ranuras) en cada pista. Un haz paralelo de luz (por ejemplo, a partir de un conjunto de diodos emisores de luz) se proyecta a todas las pistas de un lado del disco. La luz transmitida es recogida usando un banco de foto sensores en el otro lado del disco que tiene típicamente un sensor para cada pista.
El sensor de luz puede ser un fotodiodo de silicio, un fototransistor, o una célula fotovoltaica. Puesto que la luz de la fuente es interrumpido por las áreas opacas de la pista, la señal de salida de la sonda es una serie de pulsos de voltaje. Esta señal puede ser interpretada para obtener la posición angular y la velocidad angular del disco. Tenga en cuenta que un disco codificador incremental requiere sólo una pista principal que tiene ventana a intervalos iguales e idénticos (pick-off) áreas. El área de la ventana es igual al área de la brecha entre la ventana. Normalmente, una pista de referencia que tiene una sola ventana también está presente con el fin de generar un pulso (conocido como el impulso de índice) para iniciar contaje de impulsos para la medición de la posición angular y para detectar revoluciones completas. En contraste, los discos codificadores absolutos tienen varias filas de pistas, en número igual al tamaño de bits de la palabra de datos de salida. Además, las ventanas de la pista no están igualmente espaciados, pero están dispuestos en un patrón específico en cada pista de manera que se obtenga un código binario o de un código Gray para los datos de salida del transductor. De ello se deduce que los codificadores absolutos necesita al menos tan muchos señal de transducción sensores como hay pistas, mientras que los codificadores incrementales necesita una pick-off sensor para detectar la magnitud de rotación y un sensor adicional en una separación de cuartos de tono (pitch = center-a-centro distancia entre las ventanas adyacentes) para identificar la dirección de rotación, es decir, la configuración del sensor de desplazamiento. Algunos diseños de codificadores incrementales tener dos pistas idénticas, una cuarta-desplazamiento del tono de la otra, y las dos escoger de los sensores se colocan radialmente sin ningún desplazamiento circunferencial, es decir, la configuración de la pista de desplazamiento. Un sensor pick-off para un pulso de referencia también se utiliza.
DECODIFICACIÓN CON ARDUINO
•
•
•
El Arduino es una plataforma de código abierto con fácil de usar hardware y software. El board utilizado en este proyecto es el Duemilanove Arduino basado en el micro controlador ATmega328. El objetivo es medir la posición angular y la velocidad angular de un codificador incremental óptico con cable directamente a la placa Arduino.
•
Los siguientes dos métodos seleccionables de decodificación para medir la posición angular se llevan a cabo: Decodificación de X2 para dos encoders incrementales Este código se puede medir la posición angular de dos encoders incrementales en el modo de X2. Esto significa que los flancos de subida y bajada de canal A de cada codificador se miran a través de las interrupciones del Arduino. Por lo tanto, un 500 PPR (impulsos por revolución) encoder, por ejemplo, produce 1,000 conteos por revolución, que es el doble de la PPR del encoder.
DECODIFICACIÓN X2
CABLEADO PARA X2 DECODIFICACIÓN DE DOS ENCODER
X4 decodificación para un encoder incremental Este código se puede medir la posición angular de un encoder incremental en el modo de X4. Esto significa que los flancos de subida y bajada de los canales A y B del encoder son vistos a través de las interrupciones del Arduino. Así, un codificador de PPR 500, por ejemplo, da 2000 pulsos por revolución, que es cuatro veces la PPR del encoder. Ambos enfoques medir la velocidad angular en cuentas por segundo. Posición angular y la velocidad angular se representa entonces como salidas PWM. Un filtro de paso bajo analógico se utiliza para convertir la señal PWM de las salidas analógicas en una señal analógica (0 a 5V).
Decodificación X4
CABLEADO PARA X4 DECODIFICACIÓN PARA UN SOLO ENCODER
•
El algoritmo de decodificación de X4 es el siguiente: Cuando se produce una transición en: Si A y B ≠, hacia adelante, luego incrementar la posición Pos = Pos + 1 Además Invertir dirección, y luego disminuir Posición Pos = Pos – 1 Cuando se produce la transición en B: Si A = B, en dirección hacia delante, y luego incrementar la posición Pos = Pos + 1 Además Invertir dirección, y luego disminuir posición Pos = Pos – 1 Cálculo de la velocidad angular La velocidad angular se calcula como la derivada de la posición de la siguiente manera:
•
pi-1 es la posición en tiempo ti-1 y pi es la posición en tiempo ti. Algoritmo / / Guardar los valores actuales de posición y tiempo NewPositon = Po, NewTime = ClockTime / / Calcular la velocidad en pasos de encoder por segundo Vel = (NewPositon - antPosicion) / (NewTime - Oldtime) / / Guardar los valores actuales de posición y el tiempo para el cálculo de la velocidad del próximo AntPosicion = NewPositon Oldtime = NewTime / / Tiempo de retraso para poner cálculo de la velocidad de nuevo Retraso (1 ms)
•
•
•
La velocidad calculada en el recuento del codificador por segundo se puede escalar y se envía a la salida PWM del Arduino. Las salidas de PWM del Arduino son 8 bits, con lo que l a salida varía de 0 a 255 (28 = 256).
•
•
•
•
•
•
Con el fin de medir las velocidades positivas y negativas, el intermedio de la salida (127) se hace equivalente a la velocidad cero. Por lo tanto: 255 velocidad máxima positiva 127 velocidad cero 0 máxima velocidad negativa La salida PWM del Arduino se calcula entonces como sigue:
Vel puede ser positivo o negativo y varían de velocidad de motor máxima positiva a la velocidad máxima del motor negativo. El MotorMaxVel en recuentos del codificador por segundo se calcula como sigue: Motor Max Vel RPS es la velocidad máxima del motor en revoluciones por segundo obtenidas a partir de hoja de datos del motor. Encoder PPR es el de impulsos por revolución del encoder. El 4 constante representa la decodificación de cuadratura.
Cableado para X4 decodificación para un encoder simple con medidas de posición y velocidad
•
Alarmas en el Arduino La frecuencia de los canales del encoder A y B en el Arduino puede ser del orden de kHz. Las entradas digitales del Arduino no son lo suficientemente rápidos para leer estas señales en esta frecuencia. Por lo tanto, las interrupciones se deben usar. Arduino tiene dos interrupciones (0 y 1) que puede ser puede ser configurado para disparar en un valor bajo, un flanco ascendente o descendente, o un cambio en el valor. Las interrupciones de 0 y 1 son accesibles en los pins siguientes: Interrupción 0 se encuentra en la entrada digital 2 Interrupción 1 es la Entrada Digital 3
Por lo tanto, para la codificación X4 con un solo codificador, los canales A y B están conectados a las patillas 2 y 3 y las interrupciones de reloj para las transiciones en los dos pins para contar posición hacia arriba o hacia abajo. Para la codificación X2 con dos codificadores, el canal A de un codificador conectado al pin 2 y el canal A del segundo codificador está conectado a la clavija 3. En el modo X2 solo canal A se observó durante las transiciones. Cuando se produce una transición en el canal A o bien del codificador, el estado del canal B (conectado a una entrada digital común) del codificador respectivo se comprueba para identificar correctamente la dirección del movimiento y contar la posición hacia arriba o hacia abajo. digitalReadFast (pin) El digitalReadFast (pin) de comandos mejora significativamente el rendimiento (por un factor de hasta 50) para leer el estado de los canales A y B cuando ocurre una interrupción. Este comando no es parte de la biblioteca por defecto de Arduino. Para utilizar este comando con el Arduino de código abierto, los siguientes pasos son necesarios: Descargue el archivo zip de dwf.zip http://code.google.com/p/digitalwritefast/downloads/list Ponga la carpeta digitalWriteFast en la biblioteca junto con las carpetas EEPROM, Ethernet, Firmata, etc. En el código fuente añade: # include Inicie el entorno de Arduino. El digitalWriteFast estará dentro de la Sketch> Import Library menú. El código objeto no sólo será más rápido, pero en realidad más pequeño también.
•
Descarga de código C para Arduino
•
Abra el software de Arduino Seleccione Archivo> Abrir ...> seleccione el archivo a descargar pde> haga clic en Abrir
•
Seleccione la tarjeta correcta en Herramientas (Tools)> Junta(Board)
•
•
•
Compruebe los puertos disponibles antes de conectar la placa Arduino al puerto USB de su ordenador en Tools> Serial Por
Conecte la tarjeta Arduino al puerto USB de la computadora y seleccione el puerto nuevo que aparece en Tools> Serial Port
•
Haga clic para subir archivos.
•
Observa la barra de mensajes.
•
Cuando se muestra el mensaje "Done uploading" el Arduino está listo para ser utilizado.