8/09/2014

MicroCode Studio & PBP: Control de motor paso a paso con PIC16F84A

Siguiendo con las prácticas en Pic Basic Pro y utilizando el MicroCode Studio para nuestros Microcontroladores PIC, en esta ocasión será el control de un motor a pasos unipolar. Además es una pequeña demostración de la gran cantidad de formas en las cuales podemos utilizar el ya conocido PIC16F84A.

El circuito es sencillo consta de un motor paso a paso dos pulsadores para hacerlo girar en ambas direcciones (izquierda o derecha) conectados al puerto A del PIC con sus debidas resistencias y también su oscilador a 4MHz con sus respectivos capacitores de 22pF, tiene su botón de Reset conectado al Master Clear, para acoplar se utiliza un integrado ULN2803 activado desde el puerto B del PIC. Recordar que los pines de alimentación del PIC son: 5 para GND y 14 para Vcc=5 Volts.

Como se controla un motor paso a paso unipolar

Estos motores suelen tener 6 o 5 cables, dependiendo de su conexión interna. Este tipo se caracteriza por ser más simple de controlar por esta razón será el que utilicemos. En la siguiente figura podemos apreciar un ejemplo para controlar un motor paso a paso unipolar mediante el uso de un ULN2803, el cual es un arreglo de 8 transistores tipo Darlington capaces de manejar cargas de hasta 500mA. Las entradas de activación se conectan directamente al un microcontrolador.

Dejo la lista de material para poder realizar este ejemplo y seguir aprendiendo de la programación.

MATERIAL:
  • 1 PIC16F84A
  • 1 ULN2803
  • 1 Motor a pasos unipolar (5 o 6 cables)
  • 3 Pulsadores
  • 3 Resistores de 330Ω a 1/2 W
  • 1 Cristal de cuarzo de 4MHz
  • 2 Capacitores de 22pF
Secuencias para manejar motores paso a paso unipolares

Existen tres secuencias posibles para activar este tipo de motores, las cuales se explican a continuación. Todas las secuencias comienzan nuevamente en el paso 1 una vez que alcanzan el último paso (4 u 8). Para hacer que el motor gire en sentido opuesto, simplemente basta con ejecutar las secuencias de manera inversa.

Secuencia Normal: Esta es la secuencia más usada y la que generalmente recomienda el fabricante. Con esta secuencia el motor avanza un paso por vez y debido a que siempre hay al menos dos bobinas activadas, se obtiene un alto torque de paso y de retención.
Secuencia del tipo wave drive: En esta secuencia se activa solo una bobina a la vez. En algunos motores esto brinda un funcionamiento más suave. Pero al estar solo una bobina activada, el torque de paso y retención es menor.
Secuencia del tipo medio paso: En esta secuencia se activan las bobinas para brindar un movimiento igual a la mitad del paso real. Para ello se activan primero 2 bobinas y luego solo 1 así sucesivamente. Se puede decir que es una combinación de las dos formas anteriores, en este caso para lograr una vuelta tiene que hacer 8 pasos y no 4 como los anteriores.

Realizando el firmware para controlar nuestro motor

Para este ejemplo utilizare la secuencia wave drive, el comando que se utilizara para mostrar el valor en el puerto B es LOOKUP. Los valores dentro de LOOKUP pueden ser en forma hexadecimal para ello el compilador requiere que se utilice el símbolo “$”, si se quisiera utilizar los números en binario se debe de agregar el “%” y para los decimales solo basta escribir el numero tal y como es, estas tres posibilidades deben de ir separadas por comas. Nosotros utilizaremos decimales.

El código en Basic para este circuito es el siguiente:

Se declara el puerto B como salida, se declara la variable DIGITO, se inicializa el puerto B en cero, etiqueta de INICIO que es la principal, donde estará todo el código que haga que el motor funcione.

La instrucción LOOKUP va mostrar una variable DIGITO en el puerto B y se tiene la siguiente sintaxis:

LOOKUP DIGITO, [1, 2, 4, 8], PORTB

Se utiliza la variable DIGITO para saber que dato es que se va a mostrar recordar que esta variable después de mostrarse se incrementa en uno, después de le coloca un retardo para dar tiempo entre paso y paso este tiempo se puede modificar para aumentar o disminuir la velocidad de giro.

La variable DIGITO cuanta de 0 a 4 por que la secuencia utilizada solo tiene 4 pasos, cuando de utiliza la secuencia de 8 paso se debe de incrementar a 8 y de debe de modificar los valores dentro de la instrucción LOOKUP.

Vídeo del circuito en acción.

Como identificar las terminales de los motores unipolares

Cuando se trabaja con motores paso a paso usados o bien nuevos, pero de los cuales no tenemos hojas de datos. Es posible determinar la distribución de los cables a los bobinados y el común siguiendo las instrucciones siguientes:

Identificando el común: Por lo regular los motores con 6 cables tienes dos cables para el común y generalmente son del mismo color (Negro), recomiendo unirlos para no confundirse en un futuro, para el caso de tener uno de 5 cables también aplica lo del color Negro.

Identificando los cables de las bobinas (A, B, C y D): Aplicar un voltaje al cable común se puede usar 5V y manteniendo uno de los otros cables a tierra (GND) mientras vamos poniendo a tierra cada uno de los demás cables de forma alternada y observando los resultados. La nomenclatura de los cables (A, B, C y D) es totalmente arbitraria.
  1. Seleccionar un cable y conectarlo a tierra. Ese será llamado cable A.
  2. Manteniendo el cable A conectado a masa, probar cuál de los tres cables restantes provoca un paso en sentido horario al ser conectado también a tierra. Ese será el cable B.
  3. Manteniendo el cable A conectado a tierra, probar cuál de los dos cables restantes provoca un paso en sentido antihorario al ser conectado a tierra. Ese será el cable D.
  4. El último cable debería ser el cable C. Para comprobarlo, basta con conectarlo a tierra, lo que no debería generar movimiento alguno debido a que es la bobina opuesta a la A.
Aquí el enlace para DESCARGAR los archivos disponibles desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare lo mas pronto posible responderlas...

8/07/2014

MicroCode Studio & PBP: Control de LCD

Las LCD están compuestos básicamente por una pantalla de cristal líquido y un circuito microcontrolador especializado el cual posee los circuitos y memorias de control necesarias para desplegar el conjunto de caracteres ASCII, un conjunto básico de caracteres japoneses, griegos y algunos símbolos matemáticos por medio de un circuito denominado generador de caracteres. La lógica de control se encarga de mantener la información en la pantalla hasta que ella sea sobrescrita o borrada en la memoria RAM de datos.


El compilador en BASIC permite definir los pines del microcontrolador que se conectan al LCD (pines tales como datos, enable, escritura, etc.) usando la función DEFINE. Los parámetros disponibles para el manejo de LCD alfanuméricos son los siguientes:
  • LCD_BITS: Define el número de bits de la interfaz de datos. Se pueden asignar valores de 4 u 8, siendo 4 el valor por defecto.
  • LCD_DREG: Define a que puerto del PIC tenemos conectado el port de datos del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.
  • LCD_DBIT: Define cual es el primer pin del puerto que usamos para enviar los datos al LCD cuando seleccionamos un bus de 4 bits. Solo puede ser el 0 (para los pines el 0, 1, 2 y 3) o 4 (para usar los pines 4, 5, 6 y 7). Por defecto se asume “4”, y esta instrucción se ignora para LCD_BITS = 8.
  • LCD_RSREG: Define a que puerto del PIC tenemos conectado el pin RS del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.
  • LCD_RSBIT: Define a que pin del puerto tenemos conectado el pin RS del LCD. Por defecto se asume “3”.
  • LCD_EREG: Define a que puerto del PIC tenemos conectado el pin E del LCD. Los valores permitidos son PORTA, PORTB, PORTC, etc. Por defecto se asume PORTB.
  • LCD_EBIT: Define a que pin del puerto tenemos conectado el pin E del LCD. Por defecto se asume “2”.
  • LCD_RWREG: Define a que puerto del PIC tenemos conectado el pin RW del LCD. Los valores permitidos son 0, PORTA, PORTB, PORTC, etc. Por defecto se asume “0”, que significa “no usamos el pin RW”.
  • LCD_RWBIT: Define a que pin del puerto tenemos conectado el pin RW del LCD. Por defecto se asume “0”, que significa “no usamos el pin RW”.
  • LCD_COMMANDUS: Define cuantos microsegundos demora la escritura de un comando en el display. Por defecto, este valor es de 5000. La mayoría de los LCD funcionan bien con un valor de 2000, lo que hace más rápidos nuestros programas.
  • LCD_DATAUS: Define cuantos microsegundos demora la escritura de un dato en el LCD. Por defecto, este valor es de 100.
  • LCD_INITMS: Define cuantos microsegundos demora la inicialización de la electrónica del LCD. Por defecto, este valor es de 100.
Una vez definidos los puertos y los pines del LCD, es necesario realizar una pausa de medio segundo antes de enviar los datos al LCD, esto para que tenga tiempo de inicializar la memoria RAM el dispositivo. Usamos la función PAUSE.

A continuación se muestra las sentencias para escritura del LCD, usando LCDOUT:


El pin RW va a tierra debido a que se solo escribirá datos en el LCD.

Para escribir un dato en el LCD se usan funciones como DEC, HEX, BIN, por ejemplo:

LCDOUT $FE, 1, DEC 38

LCDOUT $FE, $C0, BIN 38

Si se desea escribir en una posición inicial específica del LCD, se usa la siguiente tabla para determinar dicha posición:


Por ejemplo, para escribir desde la tercera celda de la segunda fila la palabra “ELECTRONICA” se usa:

LCDOUT $FE,$C2,”ELECTRONICA”

O bien se puede escribir la dirección de memoria en formato decimal: C2 está en hexadecimal y es 194 en decimal, por la tanto:

LCDOUT $FE,194,”TEXTO”

Físicamente, el LCD de 16×2 se debe conectar como lo indica la siguiente figura, para controlar el contraste de la pantalla:


Descripción y función de los pines de LCD.

8/05/2014

MSP-EXP430G2 LaunchPad & CCS: Introducción

Muchas son las placas que podemos encontrar en el mercado para iniciarse en el mundo de microcontroladores, una de estas es la Launchpad que es una herramienta de desarrollo y evaluación para los dispositivos MSP430 de Texas Instruments y está enfocada a su línea de dispositivos Value Line que son microcontroladores de 16 bits y además de bajo consumo.

Hace ya tiempo que tengo en mis manos una de estas tarjetas, pero por ciertas razones no la utilizo como yo quisiera, bueno creo que es hora de publicar algo y así ir aprendiendo a utilizarla, conforme vaya avanzando iré compartiendo información que a mí me ha sido de utilidad e incluso iré compartiendo las practicas o ejemplos que haya hecho. A continuación unas pequeñas fotos de mi tarjeta.