Hola Ferdy... el encoder rotativo que citas en el pdf, tiene la particularidad de poder tabajar en ambos modos... Osea, es sabido que tenemos varios tipos de encoder, de los cuales los mas destacables son los absolutos (los que te dicen el angulo donde esta con una mayor resolucion) y los incrementales (los que envian pulsos segun avance, pero si es de un solo canal, no tenemos manera de saber donde esta el eje... si tiene dos canales, solo de esta manera podriamos saber para que lado gira el encoder incremental, pero nunca sabriamos perfectamente donde esta: Ahi ya tendriamos que jugar con un par de lineas de mas para sumar y restar pulsos y mas o menos saber donde tendria que estar cituado el eje).
En el pdf, menciona que en funcion encoder absoluto, tenes una sañal de 2Bits (4-6-8-10-12 pulsos en 360º), y en modo encoder absoluto, tenes una señal de 4 bits (16 combinaciones en 360º)...
Supongamos dado tu ejemplo anterior que tenes en mano un encoder incremental de dos canales, la lectura para saber para que lado gira, es sencilla... observemos nuevamente el siguiente grafico:
Ver el archivo adjunto 89727
Despreciando el 3er canal llamado canal de indexacion, vamos a centrarnos en los pulsos del canal A y canal B...
Lo que vos tenes que hacer, es contar los pulsos de subida y bajada en ambos canales...osea, los cambios de uno a cero en ambos canales, y luego los comparas entre los dos.. Por ejemplo, si miramos la primer iamgen (count down), vemos que el canal A se encuentra con el flanco en bajada y el flanco del canal B, se encuentra en subida... Esto se interpretaria de la siguiente manera 0-1
En la segunda imagen, vemos que es al reves... el canal A se encuentra en flanco de subida y el canal B en flanco de bajada... esto se interpretaria de la siguiente manera 1-0 ... ahora... Parece sencillo, pero no lo es tanto saber cuanto se mueve el eje... jajajaja...como saber cuanto avanza el eje?
Sencillo... vamos a tratar de hacerlo un poco mas basico para que no sea engorroso...
Vamos a tomar el canal A para contar la cantidad de pulsos de cada transicion... Para esto, tenemos que usar una interrupcion por hardware, o bien, hacer una especie de interrupcion por software (bucle o salto a un subprograma) cada vez que detecte pulso.... teniendo las caracterisitcas del encoder (osea, cuantos pulsos son 360ª), mas o menos podemos saber cuanto se movio o cuanto avanza...
Para saber en que direccion se movio, vamos a leer el estado del pulso del canal B y reflotando las lineas anteriores, aca viene el dilema...
Por ejemplo...Si tenemos flanco subida en A:
-
y el flanco del canalB es =0 se esta desplazando un paso para la derecha (1-0)
-
y el flanco del canalB es=1 se esta desplazando un paso para la IZQUIERDA (1-1)
Si tenemos flanco bajada en A:
-
y el flanco del canalB=1 se esta desplazando un paso para la DERECHA (0-1)
-
y el flanco del canalB=0 se esta desplazando un paso para la IZQUIERDA (0-0)
Si tenemos flanco subida en B:
-y el flanco del canalA=1
se esta desplazando un paso para la DERECHA (1-1)
-y el flanco del canalA=0
se esta desplazando un paso para la IZQUIERDA (1-0)
Si tenemos flanco bajada en B:
-
y el flanco del canalA=0 se esta desplazando un paso para la DERECHA (0-0)
-
y el flanco del canalA=1 se esta desplazando un paso para la IZQUIERDA (0-1)
Fijate que con este ejemplo citado, tenemos el giro del encoder de un extremo al otro y luego, retorna a la posicion original....
Para hacerlo mas grafico, mira tu ejemplo citado de tus propias lecturas
Ahora... como podemos armar el programa de lectura?
Bueno, podemos encararlode varias maneras, pero hay que tener en cuenta que tiene que ser lo mas rapido posible, ya que podemos perder pulsos en el movimiento...
Suponiendo que tomamos la interrupcion por B.0, cada vez que salta a la interrupcion, tenemos que verificar con un while en que estado se encuentra el otro puerto para saber si sumar o sustraer al dato conteo...
Osea. si ponemos el canal A al puerto B0, y el canal B al puerto B1, si salta primero la interrupcion por un pulso detectado del canal A, hay qeu verificar el estado del otro puerto para saber cuanto avanza; Ahora, Si salta primero el puerto B1 por un pulso detectado del canal B, hay que ver el estado del canal A para saber cuanto avanza... osea... el que se dispare 1ero, nos indica para que lado va....Con esto mas o menos podriamos derterminar cuanto se mueve y para que lado...
Ojo que ese mismo While que usamos, ademas de servirnos para decirnos para que lado se mueve tambien, puede traernos problemas en el caso de que se corte la energia y arranque desde cualquier posicion, pero eso con un poco de maña, se puede mejorar...che, son las 3 de la mañana... te dejo un abrazo