Usando Quadrature Encoder

6
 Usando los Codificadores Cuadráticos Introducción El presente trabajo es una introducción a los denominados codificadores cuadráticos, sus diferentes tipos y aplicaciones. Se hará uso de estos dispositivos en conjunto con microcontrolado res PIC a fin de interpretar la información que nos suministran. Codificador Cuadrático Un codificador Cuadrático, es un sensor de movimiento rotacional que traslada la información de movimiento (ángulo, velocidad y dirección del eje) en señales eléctricas que pueden ser interpretadas por un computador. El Codificador cuadrático es un tipo particular de codificador incremental el cual emite pulsos que determinan cuánto se ha rotado (si el codificador es rotatorio) o movido (si el codificador es linear), pero no se sabe don de se comenzó ni donde se finalizó. La figura 1. muestra un disco codificado usado en codificadores cuadráticos del tipo ópticos. Las zonas oscuras impiden el paso de luz mientras que las zonas blancas lo permiten. Existen dos zonas concéntricas lo que implica un codificador de dos canales. Fig. 1 Disco Codificado La aplicación más típica para codificadores cuadráticos es la medición de la velocidad de un eje y su sentido de giro. Un codificador cuadrático utiliza dos canales denominados A y B, desfasados en ¼ de ciclo el uno con respecto al otro. De esta manera se logra un dispo sitivo de cuatro estados, representados como: 00 01 10 11, en donde, el bit más significativo de cada estado, correspon de al canal A y el otro al canal B, tal como muestra la figu ra 2. Carlos A. Narváez V 2005  Autor: Ing. Carlos Narváez Universidad de Oriente email: [email protected]

Transcript of Usando Quadrature Encoder

Page 1: Usando Quadrature Encoder

5/10/2018 Usando Quadrature Encoder - slidepdf.com

http://slidepdf.com/reader/full/usando-quadrature-encoder 1/6

 

Usando los Codificadores Cuadráticos

Introducción

El presente trabajo es una introducción a los denominados codificadores cuadráticos, susdiferentes tipos y aplicaciones. Se hará uso de estos dispositivos en conjunto conmicrocontroladores PIC a fin de interpretar la información que nos suministran.

Codificador Cuadrático

Un codificador Cuadrático, es un sensor de movimiento rotacional que traslada la informaciónde movimiento (ángulo, velocidad y dirección del eje) en señales eléctricas que pueden ser interpretadas por un computador. El Codificador cuadrático es un tipo particular de codificador incremental el cual emite pulsos que determinan cuánto se ha rotado (si el codificador esrotatorio) o movido (si el codificador es linear), pero no se sabe donde se comenzó ni donde sefinalizó.La figura 1. muestra un disco codificado usado en codificadores cuadráticos del tipo ópticos.Las zonas oscuras impiden el paso de luz mientras que las zonas blancas lo permiten. Existendos zonas concéntricas lo que implica un codificador de dos canales.

Fig. 1 Disco Codificado

La aplicación más típica para codificadores cuadráticos es la medición de la velocidad de uneje y su sentido de giro. Un codificador cuadrático utiliza dos canales denominados A y B,desfasados en ¼ de ciclo el uno con respecto al otro. De esta manera se logra un dispositivode cuatro estados, representados como: 00 01 10 11, en donde, el bit más significativo de cadaestado, corresponde al canal A y el otro al canal B, tal como muestra la figura 2.

Carlos A. Narváez V 2005

Autor: Ing. Carlos NarváezUniversidad de Orienteemail: [email protected]

Page 2: Usando Quadrature Encoder

5/10/2018 Usando Quadrature Encoder - slidepdf.com

http://slidepdf.com/reader/full/usando-quadrature-encoder 2/6

 

 

Fig. 2 Codificador Cuadrático.

Cuando el eje gira en sentido de las agujas del reloj, se obtiene una secuencia de números(01,00,10,11) diferente que cuando gira en sentido contrario a las agujas del reloj(01,11,10,00), Esta secuencia puede reconocerse como un código Gray, por el hecho de quesólo un bit cambia en cada transición.

La resolución del dispositivo se mide en ciclos por revolución (CPR), correspondiendo a cadaciclo la ocurrencia de los cuatro estados ya mencionados. Nótese que en cada ciclo existe unestado donde ambos canales se encuentran a nivel lógico 1, oportunidad esta que seaprovecha para incrementar un contador, el cual nos permite el cálculo de la velocidad del eje.En efecto, si por ejemplo tenemos un codificador de 24 CPR y el valor del contador es 2000luego de transcurrido un segundo, las revoluciones por minutos del eje están dadas por:

4998*60 == CPRcontador  RPM   

Para la determinación de la dirección de giro, se utiliza una interesante propiedad de lasecuencia de código Gray de 2 bits. Si tomamos dos estados cualquiera consecutivos de la

secuencia de giro en sentido agujas de reloj y realizamos OR exclusivo (XOR) del bit menossignificativo del primer número, con el bit más significativo del segundo número, obtenemoscomo resultado 1. De la misma manera, el resultado es siempre cero, si se toman dos estadoscualquiera consecutivos de la secuencia de giro contraria a las agujas del reloj. Por ejemplotome 10, 11 de la secuencia de giro en sentido de las agujas del reloj, entonces 0 XOR 1 = 1.Ahora invierta la secuencia es decir tome 11, 10, entonces, 1 XOR 1 = 0.

Carlos A. Narváez V 2005

Page 3: Usando Quadrature Encoder

5/10/2018 Usando Quadrature Encoder - slidepdf.com

http://slidepdf.com/reader/full/usando-quadrature-encoder 3/6

 

 

Ahora es necesario acoplar el codificador a un dispositivo que pueda leer sus canales einterpretar lo que esta pasando. Una manera es haciendo uso de las interrupciones de un

microcontrolador tal que se pueda observar los cambios en los canales del codificador. En losPIC esto resulta fácil, pues estos incluyen la interrupción por cambio en el PORTB. Otraalternativa es usar los módulos CCP y una última, pero algo riesgosa, es muestrear los pinesdonde esté conectado el codificador cada n microsegundo y observar si sus estados hancambiado. Para efectos de este trabajo se ha tomado la primera opción.La figura 3. muestra, la manera de conectar un codificador en cuadratura de tipo mecánico o decontactos al microcontrolador. Observe las resistencias Pull-Up necesarias para la polarizaciónpositiva de este tipo de dispositivo.

Fig. 3 Conexión Codificador Mecánico

Tipos de Codificadores Cuadráticos

Los codificadores cuadráticos pueden ser clasificados en dos grandes categorías: Losmecánicos y los ópticos. Los primeros son generalmente utilizados en velocidades bajas, yaplicaciones de baja utilización. Los codificadores ópticos están diseñados para frecuenciamás altas (RPM) y aplicaciones de uso continuo donde la confiabilidad es importante. Tambiénexisten codificadores de tipo magnético basados en el Efecto Hall.Los codificadores incrementales en General pueden ser de rotación o lineales. La principalespecificación son los Ciclos por revolución (CPR), así podemos encontrar codificadores conCPR de 256, 512, 1024 y hasta 100.000 CPR, además de valores más bajos.

Aplicaciones 

Los codificadores ópticos, normalmente sirven de dispositivo de realimentación en aplicacionesde control de posición, velocidad o flujo. Otra aplicación, en donde se les usa, es en paneles decontrol, en donde pueden sustituir dispositivos tradicionales como potenciómetros, switches derotación o switches pulsadores. Pero la aplicación más común es en dispositivos apuntadorescomo el Mouse. En ellos se utilizan dos codificadores, uno que sigue el movimiento en el eje Xy otro que sigue el del eje Y.

Carlos A. Narváez V 2005

Page 4: Usando Quadrature Encoder

5/10/2018 Usando Quadrature Encoder - slidepdf.com

http://slidepdf.com/reader/full/usando-quadrature-encoder 4/6

 

 

Hardware

La figura 4, muestra el diagrama esquemático utilizado, el cual esta basado en un PIC16F873

trabajando a 4 Mhz. Se utilizaron los pines RB4 y RB5 para los canales B y A respectivamentey un display LED de 7 segmentos manejado por el integrado 4511 que es un codificador deBCD a 7 Segmentos.

100

15pf 

U2

PIC16F873

1

234567

9

10

111213141516

1718

20

2122232425262728

MCLR/VPP/THV

RA0/AN0RA1/AN1RA2/AN2/VREF-RA3/AN3/VREF+RA4/T0CKIRA5/SS/AN4

OSC1/CLKIN

OSC2/CLKOUT

RC0/T1OSO/T1CKIRC1/T1OSI/CCP2

RC2/CCP1RC3/SCK/SCLRC4/SDI/SDA

RC5/SDORC6/TX/CKRC7/RX/DT

VDD

RB0/INTRB1RB2RB3/PGMRB4RB5RB6/PGCRB7/PGD

15pf 

RESET

10K

B

DISPLAY

1234

                  5 6 7

         8

1N4148

A

VCC

47K 47K

A20,21B20,21C20,21D20,21E20,21F20,21G20,21

G21

BIN/7-SEG(T1)1

&

V20

CT=0

1248

U3

4511

1415910111213

26

17

4

53

S1

ENCODER

123

VCC

4Mhz

VCC

100

 

Fig. 4 Diagrama Esquemático

Carlos A. Narváez V 2005

Page 5: Usando Quadrature Encoder

5/10/2018 Usando Quadrature Encoder - slidepdf.com

http://slidepdf.com/reader/full/usando-quadrature-encoder 5/6

 

 

Software

El programa fue compilado usando el compilador C de CCS. Se utiliza la interrupción por cambio en RB. El programa incrementa o decrementa un contador por cada ciclo del encoder según sea el sentido de giro, agujas del reloj o contrario a las agujas del reloj. Por razones deldisplay utilizado el conteo esta en el rango de 0 a 9.

/**************************************************************************************//* *//* encoder.c *//* Quadrature Encoder *//* PIC16F873 *//* *//* *//* Autor: Carlos Narvaez 19/08/2005 */

/* *//**************************************************************************************//* *//* Interfaces: *//* *//* Encoder Canal A = Port B bit 5 *//* Encoder Canal B = Port B bit 4 *//* *//* *//**************************************************************************************/#include <16f873.h>#fuses XT,NOWDT,PUT, NOPROTECT, NOBROWNOUT,NOLVP,WRT,NOCPD#use delay (clock=4000000)#use fast_io(A)#use fast_io(B)#use fast_io(C)

/**************************************************************************************//* Prototipos *//**************************************************************************************/void delay_s(int);/**************************************************************************************//* Definiciones Generales*//**************************************************************************************/signed int encoder;/**************************************************************************************//* Definiciones para la interfaz PIC-LCD *//**************************************************************************************/#byte PORTA = 5#byte PORTB = 6#byte PORTC = 7

Carlos A. Narváez V 2005

Page 6: Usando Quadrature Encoder

5/10/2018 Usando Quadrature Encoder - slidepdf.com

http://slidepdf.com/reader/full/usando-quadrature-encoder 6/6

 

 

/**************************************************************************************//* Interrupción por cambio en RB4-RB7 *//**************************************************************************************/

#int_rbvoid detect_rb_change() {

int current;static int last=0;current=PORTB;

// Canal A = PORTB.5// Canal B = PORTB.4

if ((bit_test(current, 4)) && (bit_test(current,5))){if ((bit_test(last,4)) ^ (bit_test(current,5))){

encoder++; //sentido agujas del relojif(encoder > 9)

encoder = 0;}else {

encoder--; //sentido contrario agujas del relojif(encoder < 0)

encoder = 0;}}

last=current;}

/**************************************************************************************//* Programa Principal *//**************************************************************************************/void main(void){

disable_interrupts(GLOBAL);encoder = 0;set_tris_b(0x30);port_b_pullups(FALSE);enable_interrupts(INT_RB);enable_interrupts(GLOBAL);

while(1) {delay_s(1);portb=encoder;

}}

/**************************************************************************************//* Retardo segundos *//**************************************************************************************/void delay_s(int n){for (;n!=0; n--)delay_ms(1000);

}

Carlos A. Narváez V 2005