viernes, 28 de junio de 2013

Encoder (otra vez)




Creo que este es el tercer artículo de este blog que lleva el título de Encoder, y es que como ya advertí en el primero, (Encoder) dedicado a un encoder digital que genera un código binario para identificar la baliza que se ha activado al paso de un tren, esta palabra se utiliza para varios elementos. También hace poco he hablado de los encoders mecánicos incrementales al referirme al Mousecab y de la extraña forma que tienen de comunicarse con el mundo.

Bueno, pues hay todavía otro elemento, parecido al anterior pero que se denomina "encoder mecánico absoluto" La diferencia es que mientras el encoder incremental, que tiene solamente tres patillas, va produciendo pulsos al mover el eje, en un sentido o en otro, el absoluto, que tiene mas patillas, lo que hace es presentar en esas salidas una codificación binaria de la posición del eje.

Por ejemplo el que vemos en el video es un encoder absoluto de 24 posiciones. Eso quiere decir que según cual sea la posición del eje, aparece en sus cinco salidas, la codificación binaria de un número de 0 a 23 que nos indica en qué posición está el eje. Como vemos en el video, al ir girando el eje, va cambiando la salida representada aquí con cinco leds.  Estos encoders son también de giro infinito en ambos sentidos, pero a diferencia de los incrementales podemos saber la posición del eje y no meramente que el eje se ha movido como en los incrementales.

Bien, pero el mundo de los encoders tiene sus caprichos, así que uno esperaría ver en el video, como, al ir girando el eje, se visualiza una secuencia de números binarios de cinco dígitos en orden creciente, o sea la secuencia 00000, 00001, 00010, 00011, 00100........ Y como se puede comprobar esa secuencia ordenada de números binarios no es lo que vemos.

En primer lugar hay un motivo evidente, y es que las patillas del encoder no están colocadas en orden, de manera que los dígitos que vemos, de arriba a abajo en el vídeo son: 4, 2, 1, 3 y 5, así  que esto ya despista totalmente.

Pero hay otra razón todavía más poderosa: La salida de este dispositivo no es un número entre 0 y 23 en código binario, sino en código gray.

Para mis lectores que no lo sepan aclaro lo que es el código gray. En primer lugar aclaro que hay que decir gray y no "gris" como dice mucha gente, porque esta palabra que viene, como no, del inglés, no hace referencia al color gris que se escribe grey en inglés, sino a su inventor Frank Gray, y por lo tanto no hay que traducirlo como gris.

El tema es el siguiente: antes he reproducido la serie de los cinco primero números expresados en código binario. En el dispositivo, tendría que ocurrir que al ir pasando de la posición 0 a la 1, luego a la 2, etc viésemos aparecer esos números binarios en forma de leds encendidos y apagados. Pero fijémonos lo que ocurre cuando pasamos de la posición 3  a la 4. Los leds tendrían que pasar de la posición 00011 a la posición 00100. Es decir varían tres dígitos para pasar de indicar 3 a 4. Si consideramos que este es un dispositivo mecánico es imposible que esos tres dígitos cambien exactamente al mismo tiempo, de manera que por ejemplo, al menos durante microsegundos, tendríamos valores como 00010  o 00101 hasta que se estabiliza en 00100. Un sistema que va a ser leído con un dispositivo electrónico podría entonces dar lugar a lecturas erróneas.

Entonces al señor Gray se le ocurrió hacer una codificación que representase los número por medio de una codificación binaria, pero de tal forma que nunca variase más un dígito para pasar de un valor al siguiente o al anterior.

Por  ejemplo los números del 0 al 5 en código gray son:

000  001  011  010  110  111

Obsérvese que en efecto nunca cambia más de un dígito de un número al siguiente. Y obsérvese también que es un destrozo aritmético porque al pasar de un número de dos dígitos como son los cuatro primeros al primero que ya necesita un tercer dígito (110) las dos cifras de la derecha no son iguales que las del primer numero (00) así que esta forma de codificar números no es aritmética y no pueden por tanto hacerse operaciones de sumas restas etc, con esta codificación, al contrario de la codificación binaria con la que si se puede operar.

Evidentemente ser puede programar un algoritmo para convertir el código gray a binario y viceversa, y tengo entendido que algunos lenguajes de programación lo implementan como funciones, pero no es algo elemental.

Y seguramente algún lector estará pensando: "pero ¿dónde quiere ir a parar Ignacio con este rollo?". Bueno, como ya dije antes hablé hace tiempo de los encoders y en aquél artículo  de Abril de 2012 decía:
Uno de los más conocidos son los "posicionadores" que devuelven un código digital en función de la posición de un eje que puede girar........como por ejemplo el eje de giro del puente de una rotonda....(en que estaré yo pensando?)

Efectivamente estaba, y estoy, pensando en modificar el sistema de mando del puente giratorio de la rotonda de mi maqueta. Ya expliqué en su día (Julio de 2010 : Rotondas digitales) que mi programa manejaba la rotonda de mi maqueta, y luego se han visto algunos videos en que se la ve funcionar. La verdad es que funciona bien, pero el sistema se basa en que el programa acciona el motor del giro durante un tiempo determinado que se calcula a partir de la posición inicial del puente, la posición a la que queremos llegar, y el tiempo que tarda el giro del puente en cubrir el arco entre dos salidas. Pero claro, esto se basa en que el puente está situado inicialmente en el punto donde se quedó la última vez que se movió, y en que el motor se mueve siempre a la misma velocidad. El problema es que si el programa se interrumpe por cualquier motivo, la posición del puente no se guarda para la siguiente vez, y por otro lado es posible que el motor si está frío y hace tiempo que no funciona, se mueva más lentamente que si se ha movido recientemente.

Naturalmente la forma buena de hacer esto es que el programa sepa en todo momento la posición real del puente, y para ello resulta ideal uno de estos dispositivos, Si soy capaz de acoplar ese encoder al eje de giro del puente, voy a tener una señal que me indica permanentemente la posición del puente. No es por casualidad que haya pedido precisamente ese encoder de 24 posiciones, porque precisamente la rotonda tiene 24 vías en el círculo.

Me da mucha pereza levantar la rotonda y empezar a trastear con ella, pero ahora que voy a meterme con la colocación de balizas en la parte baja de la maqueta y también con el accionamiento de los desenganchadores desde el Mousecab, es el momento de hacerlo.

No hay comentarios:

Publicar un comentario en la entrada

Gracias por expresar tus opiniones.

Los comentarios aparecerán en el blog normalmente en unos pocos segundos