miércoles, 24 de febrero de 2016

Encoder + ATmega32


En este post desarrollaré un programa para leer las entradas de un tipo encoder incremental en cuadratura.

La señal en cuadratura se caracteriza por tener dos señales cuadradas que se encuentras desfasadas 90° una con respecto a la otra. Esto es mostrado en la figura “Señales del encoder”.
El movimiento rotacional puede ser medido contando los flancos que produce cada una de las señales. La relación de fase entre las dos señales determina la dirección de rotación. Cuando en giro es horario la señal QDPH0 (Comúnmente encontrada como A) adelanta a QDPH90 (B) en 90°. En el sentido antihorario ocurre exactamente lo contrario.

Fig. 1 Señales del encoder

Sin título

Para nuestro ejemplo conectaremos las salidas CLK(A) y DT(B) de un encoder, como el mostrado en Fig.2, a las entradas PD2(INT0) y PD3(INT1) de un ATmega32. El encoder y el uC son alimentado con 5Volt.

Fig. 2 Encoder
encoder-module-ky-040-1

El ejemplo es muy sencillo y puede funcionar con una lectura constante (en while) de las señales A y B, usando una interrupción para la señal A ó usando dos interrupciones para las señales A y B.

Primero, y luego de crear el proyecto, debemos declarar la velocidad del CPU (F_CPU es necesaria para las rutinas _delay…) y la del UART si fuera necesario. Aquí muestro una imagen de mi configuración.

image


Bueno, aquí el programa.

Includes:
image

Variables a usar:

image

14.- Se declara una variable global del tipo int32_t (cuenta) para que almacene las cuentas del encoder. Esta tiene que ser del tipo volatile para poder usarla sin problemas en las interrupciones.
15.- cambio las usaremos como un flag que nos indica que en valor de cuenta ha cambiado.
16.- str[30] almacenara un string que será enviado por el puesto serie.
18-26.- Se crea una nuevo tipo de dato(States_t) para almacenar el estado actual del encoder (S0) y el estado anterior (S1).
27.- Se crea la variable enc que es del tipo States_t.

domingo, 21 de febrero de 2016

Excel, SerialPort y AVR


En este pequeño post les presento un video donde realizo la lectura del dos sensores (fototransistor y termistor tipo ntc) mediante el ADC de un XMEGA. Los datos leidos por el ADC son enviados mediante el puerto serie y al ser recibidos son graficados en excel.





Tener en cuenta que las modificaciones para recibir cantidades diferentes de bytes deben ser hechas en esta parte del código.  Esto dependerá del número de bytes que se desean recibir (... > 4) .






Descarga excel y ocx