CODIFICADOR DE CUADRATURA
Funcionamiento:
Básicamente consiste en un disco giratorio, el cual posee un
gran número de ranuras. Una fuente de luz estacionaria se
encuentra montada fija a un lado del disco, en el lado
opuesto directamente enfrente del emisor de luz se hallan
ubicadas dos fototransistores.
Dichos fototransistores se encuentran desalineadas respecto
a las ranuras del disco giratorio en en una distancia de 1/4
de la distancia existente entre dos ranuras, lo que permite
disponer de las señales Va y Vb desfasadas 90º entre sí.
Este desfasamiento nos permitirá discernir sobre el sentido
de giro del disco. Por lo tanto, al girar el disco las ranuras
interrumpen el paso de la luz hacia las fototransistores,
obteniéndose de éstas las tensiones Va y Vb con un
corrimiento de 1/4 de ciclo o sea con un desfasadas 90º
entre sí.
El numero de ranuras (N) que posee el disco dará la
resolución en pulsos por vuelta del codificador y se obtendrá
un pulso de tensión cada 360º/N grados de rotación del eje.
La señal que se obtiene de las fototransistor, debe ser acondicionada de
manera de hacerla compatible con los niveles de tensión TTL.
Cuando el disco gira en la dirección de las manecillas del reloj se observa que el
fototransistor 'A' recibe luz, mientras que el fototransistor 'B' está a oscuras,
pero luego de una rotación adicional de 1/4 de la distancia entre ranuras, la
celda 'B' tendrá luz incidente.
Cuando el disco gira en la dirección contraria de las manecillas del reloj se
observa que el fototransistor 'B' es la que recibe la luz, mientras que el
fototransistor 'A' está a oscuras, pero luego de una rotación adicional de 1/4 de
la distancia entre ranuras, la celda 'A' tendrá luz incidente.
Por lo tanto para un giro continuo del eje del encoder se obtendrá la siguiente
secuencia de valores binarios:
*Girando el eje en el sentido de las agujas del reloj, se obtendrá:
2 - 3 - 1 - 0 - 2 y así sucesivamente.
*Girando el eje en el sentido contrario de las agujas del reloj, se obtendrá:
1 - 3 - 2 - 0 - 1 y así sucesivamente.
A continuación ejemplo de código fuente en C:
La subrutina es llamada cada vez que se produce una interrupción por un
cambio en el estado lógico de los pines PB4-PB5(recordar que los
microcontroladores PIC poseen está característica).
Las variables utilizadas son:
AB_Bits_V -> indica el estado anterior de las líneas 'A' y 'B'.
AB_Bits_N -> indica el estado actual de las líneas 'A' y 'B'.
EncRotCont -> Contador de pulsos del encoder
Esta rutina determina si se ha producido algún error en la secuencia de los
pulsos, en caso de error se lo indica con el flag 'flgEncRotOK = LO'.
Haciendo uso de la función lógica or exclusivo entre el estado lógico anterior y
actual de las lineas 'A' y 'B' es posible determinar de manera muy sencilla el
sentido de giro del eje del encoder.
El sentido de giro del encoder es indicado a través del flag 'flgEncRotDir'
#include <pic.h>
#include "encoder.h"
#include "general.h"
unsigned char EncRotCont;
bit flgEncRotDir;
bit flgEncRotOK;
void Rot_Encoder(void)
{
static unsigned char AB_Bits_V;
unsigned char AB_Bits_N, Aux;
AB_Bits_N = ((ENCODER_PORT) & ENCODER_MASK)>>4; //
encoder y desplazo la cantidad
//
necesarios
//
alineación correcta
Aux = AB_Bits_N ^ AB_Bits_V;
//
flgEncRotOK = LO;
//
no se sabe si hubo algún error
if (Aux==0)
condiciones de error
goto RotEncNOcmb;
else if (Aux==3)
goto RotEncError;
if(((AB_Bits_V<<1) ^ AB_Bits_N)&0x02)
{
flgEncRotDir = ENC_GIRA_IZQUIERDA;
gira hacia la IZQUIERDA
EncRotCont--;
contador
}
else
{
flgEncRotDir = ENC_GIRA_DERECHA;
gira hacia la DERECHA
EncRotCont++;
contador
}
flgEncRotOK = HI;
rotó el encoder
RotEncNOcmb:
RotEncError:
AB_Bits_V = AB_Bits_N;
errores
}
Leo port del
de bits
para obtenar la
Or exclusivo
Indico todavía
// Determino
// Indico que se
// Decremento el
// Indico que se
// Incremento el
// Indico que se
// Para que o haya
Abajo se observan fotografías de un codificador rotativo que he realizado en mi
casa con partes de un viejo mouse, un eje de aluminio mecanizado y una
carcasa de un motor de CC
Vista del
conformador
de pulsos.
Vista del disco
Detalle del
disco
Vista del
codificador y su
contenedor
Vista del
disco
Codificador ensamblado.
Codificador
listo para
funcionar.
Tamaño
comparativo del
codificador de
cuadratura.