# Encoder incremental. cruce por la posición cero



## Denshi (Oct 9, 2008)

Estoy manejando un encoder incremental Agilent de 500 cpr, al registrar las señales el canal A y B presentan correctamente un desfase de 90º, pero el canal I que corresponde al cruce por cero presenta cambios de forma aleatoria. Esta prueba también se realizó con otro encoder y presentó el mismo resultado.

Mi pregunta es, si ¿es posible obtener este dato a partir de la información de los canales A y B?.


----------



## Ardogan (Oct 10, 2008)

Las señales A y B son incrementales, es decir, no distinguen posición sino variación de posición (posición relativa podríamos decir).
El canal Z está para dar una referencia fija, y a partir de ella sumando/restando las cuentas obtenidas de A y B obtener la posición absoluta.
Podrías lograr el mismo efecto si ponés un fin de carrera, o un detector con una barrera LED (depende que mueva el eje del que medías velocidad, que precisión necesites, etc). Pero a partir de A y de B, no se me ocurre.
Saludos


----------



## Denshi (Oct 13, 2008)

Hola gracias por el comentario.

Es cierto que con el canal Z se puede ubicar el inicio del giro en la posición de referencia deseada, sin embargo al ubicar la plataforma las señales A y B cambian en desfase a 90º, sin embargo, la señal del canal z no presenta ningún cambio al pasar por la referencia. ¿Cual podría ser la causa?, el encoder no presenta ningún desperfecto físico visible.

Saludos


----------



## Eduardo (Oct 13, 2008)

Denshi dijo:
			
		

> ... sin embargo, la señal del canal z no presenta ningún cambio al pasar por la referencia. ¿Cual podría ser la causa?, el encoder no presenta ningún desperfecto físico visible.


Que modelo es? Con que estas midiendo?


----------



## Denshi (Oct 13, 2008)

es un encoder de la marca Agilent de 500 cpr (heds5540) y lo estoy midiendo con un osciloscopio


----------



## Eduardo (Oct 13, 2008)

Tiene las resistencias de pull-up ?


----------



## Denshi (Oct 13, 2008)

hola 

si lo conecte tal y como esta en la hoja de especificaciones


----------



## Eduardo (Oct 13, 2008)

Es raro... salvo que el problema este en la visualizacion. Como es un pulso corto, girando no vas a ver gran cosa, tendrias que tener buen pulso para ubicarlo justo en la posicion.

Proba poniendo el trigger del osciloscopio en "normal" y disparo por flanco. Aunque no veas nada, al pasar por la posicion tiene encenderse el led del trigger (tene en cuenta que en muchos osciloscopios el trigger es cada dos flancos)


----------



## Denshi (Oct 13, 2008)

perdón este si ya lo intente y aun no muestra nada,  tambien con labview probe registrar la señal del canal Z y sigue sin mostrar respuesta al cruce por la posición de referencia, el encoder esta montado en un eje que gira lentamente a voluntad para poder checar  los cambios el canal A y B que son los que determinan el sentido de giro y la velocidad lo cual hace correctamente. 

saludos y gracias por su atensión


----------



## javielchispas (Oct 14, 2008)

Aprovecho el tema para incluir un documento que me parece interesante.


----------



## Denshi (Oct 16, 2008)

hola 

 ¿existe una manera de checar físicamente si no esta bien colocado el eje en el encoder  o el disco  y por eso no funciona el canal z?
es importante para el trabajo que estoy haciendo ya que sin ese canal no tendre referencia.

saludos


----------



## El nombre (Oct 18, 2008)

Denshi dijo:
			
		

> hola
> 
> ¿existe una manera de checar físicamente si no esta bien colocado el eje en el encoder  o el disco  y por eso no funciona el canal z?
> es importante para el trabajo que estoy haciendo ya que sin ese canal no tendre referencia.
> ...


Es aconsejable en el uso de encoders o controladores el uso de un marcador. En industria se usa un inductivo. Al detectar el marcador el controlador identifica la posición que debería tener el encoder y proceder dependiendo del resultado.
Es una forma de garantizar que el encorer no ha fallado (o el mecanismo que lo maneja)


----------



## Eduardo (Oct 18, 2008)

El nombre dijo:
			
		

> Es aconsejable en el uso de encoders o controladores el uso de un marcador. En industria se usa un inductivo. Al detectar el marcador el controlador identifica la posición que debería tener el encoder y proceder dependiendo del resultado.
> Es una forma de garantizar que el encorer no ha fallado (o el mecanismo que lo maneja)


Es *mas* que aconsejable, es una necesidad.  Sin un punto de referencia no hay manera de inicializar la cuenta con encoders incrementales.


----------



## javielchispas (Oct 19, 2008)

_Eduardo_ dijo:
			
		

> El nombre dijo:
> 
> 
> 
> ...



¿Y un simple final de carrera para una determinada posición del eje, no puede hacer las veces del canal z?


----------



## Ardogan (Oct 19, 2008)

Las ventajas de usar un sensor inductivo son la mayor resistencia a ambientes agresivos, están libres de rebotes, desgaste mecánico, el fin de carrera tiene una cantidad limitada de conmutaciones, al inductivo no lo afecta el polvo/suciedad/vibraciones, tiene una repetibilidad superior al fin de carrera (mayor precisión en la medición de posición con el encoder).
Tienen un led de operación que indica si está funcionando o no, en cambio los fines de carrera pueden funcionar a veces sí a veces no... nunca se está del todo seguro. 
Hay sensores inductivos estancos (podés lavar la máquina con agua y no hay problema).

Desventaja: sensa metales únicamente.


----------



## Eduardo (Oct 19, 2008)

javielchispas dijo:
			
		

> ¿Y un simple final de carrera para una determinada posición del eje, no puede hacer las veces del canal z?


Siempre se pone un fin de carrera (encoders incrementales).  La necesidad o no de la señal Z depende de la precision requerida.

Si el error tolerado en el posicionamiento es mayor de 1mm lo podes hacer con finales de carrera comunes.
Si es un pantografo, el error debe ser ~ 0.1mm  --> ya no vas a tener confiabilidad con un FC comun.
Si es una torno/fresadora, el error de posicionamiento es de ~0.01mm --> ya es imposible.

En un torno por ejemplo tenes en los ejes encoders de 2500ppv o 5000ppv (ppv: pulsos por vuelta) y tornillo de paso 5mm (depende del torno, claro). Para inicializar la posicion se esta secuencia:
- Se avanza hacia el fin de carrera (FC comun)
- Cuando se pisa el FC se disminuye la velocidad
- Se sigue avanzando hasta que se activa la señal Z
- Ahi se para y se inicializa el contador de posicion.

Esto se hace cuando se arranca la maquina. Se pulsa un boton y se hace la secuencia automaticamente.


----------



## Denshi (Nov 11, 2008)

Hola

Volviendo a desarmar el encoder note que el orificio para el sensado del cruce por cero esta situado a mayor altura por lo que una mala ubicación del eje y debido al peso que sostiene provocaba que este se saliera del rango del sensor y solo en ciertas posiciones lo detectara. 
Por ello se ha cambiado de posición el punto de referencia para evitar esto.

Gracias por sus comentarios y adjunto este pdf que me parece muy útil para el manejo de las señales A, B y Z

Saludos


----------



## Ardogan (Nov 11, 2008)

Gracias por el pdf, a mi colección (la cantidad de cosas que tengo bajadas.... no creo que llegue a vieji sin siquiera leer la mitad).

Por eso que decís del peso, los encoders traen especificado (algunos) cuanta carga mecánica se les puede poner en el eje (axial y radial).

Lo voy a tener en cuenta si me encuentro con un encoder problemático.

Saludos


----------



## BBMNet (Ene 8, 2009)

Sugiero que consideren la señal más que como un pulso como un cambio de nivel BAJO-ALTO-BAJO.

De las especificaciones este encoder es además analógico por lo cual si se hace girar rápidamente en el osciloscopi debieran observarse la senoide y la cosenoide para las señales A y B. La señal Z pasa demasiado rápidamente.

Este es uno de los casos donde tratamos de matar moscas a cañonazos. Un humilde led puede proporcionar más información.

Sugiero más que con un osciloscopio probarlos con un jig implementado con amplificador operacionales conectados como seguidores y 3 leds. La intensidad de los leds variará pulsando en cada vuelta mientras que en el caso de la señal Z se deberá observar que sólo en cierta posición de toda la vuelta el led correspondiente enciende. Jugando con el encoder a mano se podrá localizar el punto de máxima intensidad para la señal Z.

Espero que esto te sirva.

Suerte.


----------



## BBMNet (Ene 8, 2009)

Olvidaba sugerir el LM358 que puede alimentarse con solo una fuente de 5 volts y no bipolarmente como otros OPAMPS.


----------



## D'aleman (Abr 25, 2009)

Hola como estan, tengo un problema con un encoder que estoy utilizando y me gustaria saber si alguno de ustedes me puede ayudar.
Estoy utilizando un ecoder de 1024pulsos, tengo el canal a conectado A una interrupcion externa en el micro, y el canal B lo leo cada vez que sucede la interrupción asi puedo determinar la direccion, y aumento o decremento el contador, por lo tanto hasta ahi esta bien, el problema es que cuando el encoder regresa a su posicion de equilibrio, debido a que este tiene un movimiento pendular, por lo general no regresa el contador hasta cero, o si llega a cero con tan solo darle un golpe suabe a la mesa donde lo tengo el encoder me genera una cuenta, pero B no ocurre entonces el contador incementa o decrementa segun alla sido el ultimo estado de B y se queda ahi.
el problema creo que esta en que el encoder es muy sensible al movimiento y cualquier golpe genera que la señal A marque pero no alcansa a marcar B por el desface, intente solucionarlo agregando un contador de tiempo algo asi como un filtrado digital, para frecuencias bajas entre cada interrupcion, y si se mejoro pero no a sido suficiente.
espero me puedan entender, y alguno de ustedes me pueda ayudar un poco con este problema


----------



## Eduardo (Abr 25, 2009)

El problema es que el metodo de conteo que estas usando.
Siempre que el encoder este detenido o moviendose muy despacio vas a tener ese problema, que haya cambios en un canal mientras el otro este quieto.

Eso se soluciona haciendo un conteo x2.  En lo que vos tenes se consigue generando la interrupcion * cuando A cambia*.
Si fue un flanco ascendente --> Si B==0 suma  else resta
Si fue un flanco descendente--> Si B==0 resta else suma

De esa manera, si tenes oscilacion en A la cuenta va a quedar loca entre N y N+1 pero no tenes deriva. Y de paso duplicas la resolucion del encoder.

AGREGO:
Ojo con la demora en el servicio de la interrupcion. Si es alta vas a tener que agregar algo de hardware porque si antes de terminar la interrupcion te llega otro pulso se pudre igual.


----------



## D'aleman (Abr 27, 2009)

Eduardo, muchas gracias por su respuesta, hoy lo estuve ensayando y funciono muy bien, no hay inconveniente con el tiempo de la interrupción porq el movimiento es generalmente más lento, le agradezco mucho su atención, fue de mucha ayuda para mí.

Agrego como quedo implementado el servicio de interrupción por si alguna otra persona lo puede necesitar.


```
ISR(INT0_vect){
	encoder[0].direccion = (PIND & 0x08)>>3;	//leo la señal de cuadratura B
	if(PIND & 0x01 == 1){				        //pregunto en qué valor esta A	
		if(encoder[0].direccion==1){
			encoder[0].posicion--;
			}
		else{
			encoder[0].posicion++;
			}
		}
	else{
		if(encoder[0].direccion==1){
			encoder[0].posicion++;
			}
		else{
			encoder[0].posicion--;
			}

		}
	}
```


----------



## LaloMon (Feb 24, 2010)

que onda un saludo a todos los de este foro... 

empiezo a trabajar con encoders y tengo una duda... como puedo saber cual es la configuracion de un encoder, ya que este tiene cuatro cables, me imagino que dos son de alimentacion y los otros dos son del canal a y b respectivamente.... pero para no dañarlo... quiero saber como puedo saber  como saber su congifuracion de canales y alimentacion ...


----------



## algp (Mar 1, 2010)

Encontraste el encoder en algun circuito? Si es asi mide las tensiones con el encoder montado en el circuito. El encoder lleva marca, codigo ?.... busca en internet. 
Si el encoder no lleva marca ni codigo ni nada.... y esta "suelto"... mas complicado.


----------

