Mostrando entradas con la etiqueta digital. Mostrar todas las entradas
Mostrando entradas con la etiqueta digital. Mostrar todas las entradas

miércoles, 4 de septiembre de 2013

Motores Paso a paso (steppers)

¿Qué son los motores paso a paso?

Complementando nuestro proyecto Wirelearn Robot Shield (WRS) explicamos en detalle el funcionamiento de los motores paso a paso, y qué circuitería es necesaria para ponerlos en marcha. Esperamos que os ayude!


Los motores paso a paso (E.A. steppers) son motores de corriente contínua (DC) que requieren de cierto grado de lógica digital para funcionar, debido a que son accionados por varias bobinas. De este hecho se derivan dos consecuencias:
  • Los steppers son considerablemente más complejos de utilizar que un motor contínuo común y generalmente son capaces de girar a menos revoluciones por minuto. Además, son mucho más caros debido a los costes de construcción, y a la electrónica externa necesaria.
  • Pueden moverse en fracciones de revolución, lo cual los hace muy precisos y a su vez abre la posibilidad de controlar de forma muy exacta la velocidad a la que giran. Además, es posible forzar una posición magnética, de forma que el motor quede "frenado".
Como podemos observar, los steppers tienen argumentos a su favor, y en su contra. Basándonos en lo visto hasta ahora, no debería ser muy difícil discernir en qué aplicaciones debemos utilizar cada tipo de motor.

Accionamiento

Para ésta explicación utilizaremos nuestro motor unipolar UHD23N01RAZ25 que consta de seis cables. Los cables verdes son comunes. Es decir, que pueden estar conectados a +5 o GND dependiendo del circuito que los acciona. Los demás cables activan cada una de las "4 bobinas" del motor respectivamente. Resumiendo, si conectamos los cables verdes a +V, conectando cada uno de los restantes a masa estaremos cerrando el circuito de su respectiva bobina y con ello orientando el eje del motor en consecuencia. Lo único que hay que hacer para hacerlo girar es activar las bobinas sucesivamente en el orden correcto.

Llegados a este punto, debemos saber que existen diferentes modos de hacer girar un motor paso a paso, dependiendo de la secuencia de activación de las bobinas. Llamemos a los cables por la inicial de su color para simplificar (R)ojo,(N)egro,(A)marillo,(V)ioleta:

  • Modo "Wave Drive": (R, A, N, V) El motor gira en cada paso los grados marcados por el datasheet,  7,5º por paso para el motor citado. Por otra parte, al tener una sola bobina activa en cada momento, el par motor (la fuerza que hace) es más débil de lo que debería. Yo solo lo uso para probar circuitos porque es el más simple.
  • Modo "Full Step": (RA, AN, NV, VA) El par motor es máximo, aproximadamente el doble que en modo el modo anterior. La resolución o angulo de giro sigue siendo la misma.
  • Modo "Half Step" (R, RA, A, AN, N, NV, V, VR) El par motor es aproximadamente el 70% del máximo, pero se multiplica por dos la resolución de giro. Ésto equivale a unos 3,75º por paso.
Evidentemente, nuestro motor rodará en modo half step. He aquí unas imágenes explicativas de ésta secuencia:

Paso 1: R activado, el eje se orienta frente a R

Paso 2: RA activados, el eje se orienta en el punto medio entre las bobinas R y A

Paso 3: A activado, el eje se orienta frente a A
Y así sucesivamente hasta completar la secuencia. :)

Nota: A pesar de que en éste post hablamos de "cuatro bobinas", ésto es solo una simplificación del motor real, que en realidad tiene muchas más. De hecho, nuestro UHD tiene 48. (360º / 7,5º). Lo que sucede es que cuando activamos una de las líneas del motor, en realidad estamos alimentando 12 bobinas distribuidas uniformemente alrededor del eje, pero solo una de ellas está lo suficientemente cerca como para orientarlo. Ésto es una simple aclaración, que no afecta en absoluto la explicación previa ni posterior.

Circuito

Según la hoja de datos, cada bobina presenta una resistencia 30 Ohm. En principio vamos a alimentarlo con 5V, por lo que haciendo un cálculo rápido por la ley de ohm, cada rama del motor llevará una intensidad de 170 mA. Éste cálculo NO es preciso, porque es un motor y no una resistencia. Lo correcto aquí es hablar de impedancia inductiva. Así que podríamos decir que lo calculado se trata de una "media" de la intensidad real.

Como deberíamos saber, Arduino UNO solo puede suministrar 40 mA, con lo cual, estamos ante el problema más común de la electrónica digital aplicada: ¿Cómo puedo mover intensidades grandes, con circuitos que soportan intensidades pequeñas?

Si estás pensando en un relé, no vas mal encaminado, pero te falta mucho camino por andar. Lo correcto aquí es utilizar un transistor. Y la principal ventaja del transistor en éste campo es la velocidad de conmutación. La naturaleza mecánica del relé lo hace miles, o incluso cientos de miles de veces mas lento que un transistor de uso común. Y en nuestro circuito, deberemos alcanzar velocidades de conmutación en torno a los 20 ms.

Como podemos observar en la imagen, de él salen 6 cables. Dos son iguales (verdes), lo cual nos suscita que serán el común, al que aplicaremos GND o +V dependiendo del circuito.

Para evitar combustiones espontáneas pensando cómo accionar 4 líneas de corriente con un sólo transistor y nada más, os adelanto que no es posible. Pero ésto no quiere decir que tengamos que comprarnos 4 transistores y montar 4 circuitos. La solución óptima es hacerse con un array darlington TD62064AP como éste:


Olvidémonos de momento de la circuitería que suele rodear a los transistores, y de bases, colectores y emisores, ya que toda la teoría daría para varias entradas en el blog. De momento nos sirve con saber que éste componente viene en un encapsulado DIP16. En su interior alberga 4 transistores de conmutación, capaces de soportar corrientes de salida de 1,5A y tensiones de hasta 50V. Las patas 4,5,12 y 13 están conectadas entre sí internamente como muestra la imagen anterior, deben conectarse a masa. Por otra parte hay 4 terminales de entrada (I1,I2,I3,I4) y 4 de salida (O1,O2,O3,O4). Olvidémonos de las patas COM.

El funcionamiento es tan simple como, un nivel alto (5V) en I1, conecta O1 con masa. De aquí se deduce, que éste integrado es un sumidero de corriente, lo que quiere decir, que por cada salida del integrado, entrará una corriente que será derivada a masa, cuando la entrada asociada reciba un nivel alto.

Con lo cual, ya sabemos que el común de nuestros motores (recordemos cables verdes) deberán estar conectados al polo positivo de la fuente de tal manera que la corriente salga de dicho polo, atraviese la bobina del motor, entre en nuestro integrado y ahí "se vaya por el sumidero" a masa. Para que ésto sea posible debemos conectar los cables de cada bobina del motor a cada una de las salidas del integrado.

Respecto a los pines de entrada, requieren una I máxima de 20 mA, suficientemente pequeña para poder conectarlos a cuatro pines digitales de nuestro Arduino sin riesgo, y ponernos a mandar secuencias a lo loco.

El circuito completo es éste:

Programa de prueba

Una vez tengas preparado el circuito anterior, puedes flashear éste sketch en tu Arduino UNO:
/* WIRELEARN 2013 - STEPPER TEST4

  This sketch is designed to be flashed to an Arduino UNO board,
  Digital pins 4,5,6 and 7 of arduino board should be connected
  to I1, I2, I3 and I4 pins of TD62064AP DIP16 IC respectively.
  
  See the whole stepper tutorial > wirelearn.blogspot.com
 
  Bugs and suggestions > adm.wirelearn@gmail.com 
  
  #MRGZ#
*/

// DIGITAL PINS
int coil_A = 4;
int coil_B = 5;
int coil_C = 6;
int coil_D = 7;

// MASK FOR EACH PIN
int mask_A = B1000;
int mask_B = B0100;
int mask_C = B0010;
int mask_D = B0001;

// SEQUENCE, TRANSFORM IT TO BINARY NUMBERS MAY MAKE IT EASIER TO UNDESTAND
int sequence[8] = { 8, 12, 4, 6, 2, 3, 1, 9};

int pos;

void setup(){
    pinMode(coil_A, OUTPUT);
    pinMode(coil_B, OUTPUT);
    pinMode(coil_C, OUTPUT);
    pinMode(coil_D, OUTPUT);

    pos = 0;
}

void loop(){
  /*We need 4 bits, one bit per TD62064 input
   first word in sequence is 8, which equates 1000B
   coil_A = 1000 && 1000 >> 3 = 1
   coil_B = 1000 && 0100 >> 2 = 0
   coil_C = 1000 && 0010 >> 2 = 0
   coil_B = 1000 && 0001 = 0
   We just split a four bit number, into single parallel bits :)
   */

  // Finally, let's output our bits
  digitalWrite(coil_A, sequence[pos] && mask_A >> 3);
  digitalWrite(coil_B, sequence[pos] && mask_B >> 2);
  digitalWrite(coil_C, sequence[pos] && mask_C >> 1);
  digitalWrite(coil_D, sequence[pos] && mask_D);
  pos = pos > 7 ? 0 : pos+1;
  delay(100);
  
}
El circuito debería ser similar para cualquier tipo de Stepper unipolar. Muchos de ellos llevan un cableado diferente, con solo dos bobinas y dos cables aparte de los comunes. Ésto solo influiría en la secuencia de activación de los devanados. Pero el principio de funcionamiento y el circuito con array de transistores debería funcionar exactamente igual.

Por último, cada motor es diferente, por lo que algunos permitirán velocidades muy altas, y otros no tanto. Deberéis jugar con el "delay" al final del código para conocer los límites de vuestro motor.

Pronto veremos cómo utilizar un registro de desplazamiento para multiplexar las salidas digitales de Arduino y controlar dos steppers con sólo tres IO Pins. :)

Saludos!

#MRGZ#

domingo, 30 de octubre de 2011

Introducción a los Microcontroladores PIC


Es el momento de dedicar una entrada a todos aquellos usuarios amantes de la electrónica. He de confesar, que mis conocimientos en éste campo son realmente escasos. Pero no por ello nulos. Con lo cual voy a contaros un par de cosas acerca de Microchip, y unos componentes muy interesantes y de coste reducido que están dando que hablar los últimos años. Los microcontroladoes PIC.

¿Qué demonios es un PIC?

Según este fragmento sacado de la wikipedia española:
Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip Technology Inc. y derivados del PIC1650, originalmente desarrollado por la división de microelectrónica de General Instrument.
El nombre actual no es un acrónimo. En realidad, el nombre completo es PICmicro, aunque generalmente se utiliza como Peripheral InterfaceController (controlador de interfaz periférico).
Para los seres humanos, en apariencia un PIC es un circuito integrado (objeto rectangular negro, con letras blanquecinas ilegibles y bastantes patas). Hay muchos componentes que responden a esta descripción y no necesariamente tienen que ser ni PIC's ni microcontroladoes. Asique no vayamos a meter la pata cuando veamos cualquier cosa que se le parezca.

Los PIC como se cita ahi arriba, son un producto de la multinacional Microchip. Hay otras casas que fabrican microcontroladores, como Motorola, Atmel, Dallas Semiconductor, Intel, Philips, Siemens, Temic, etc. Sin embargo no tengo ninguna experiencia con otras marcas.

¿Para que sirve un microcontrolador?

La respuesta es sencilla. Sirve para "todo". Un microcontrolador es muy parecido al procesador de tu ordenador. Parte de la arquitectura Harvard. Tiene una unidad de control, una ALU, memoria de código y de datos separadas, un sistema bastante interesante de E/S, etc. Es decir, puede recibir señales de sensores u otros periféricos, y actuar en consecuencia.

Un ejemplo práctico de todo ésto que se hace en prácticas de Tecnología de Computadores se me ocurre ahora mismo es un termostato. Tenemos repartidos por casa unos sensores de temperatura y una caldera calefactora. La idea es que al pasar por debajo de 15ºC, la calefacción comience a calentar la casa. Pero para evitar escenas como la del final del señor de los anillos, también nos interesa que al llegar a 21ºC el sistema se detenga. Ésto es precisamente lo que hizo famosos a los microcontroladores. Con unos conocimientos no muy amplios de electrónica digital y un escaso presupuesto, podemos hacer desde unas luces de navidad, hasta una nevera que nos dispare una cerveza directa al sofá. Bueno, no os voy a engañar. Todos los comienzos son duros, y hay que tener una buena base de electrónica y ensamblador para hacer algo decente.

Como siempre me gusta hacer, os voy a poner un ejemplo de la relacción conocimientos-resultados. Con 16 años, la ley de ohm, y un datasheet del PIC 16F84, (y la siempre incuantificable ayuda de mi padre) me hice un juego de luces al estilo kit, el coche fantástico. No parece gran cosa, pero Albert Einstein tuvo que aprender a sumar antes de ponerse a hablar de la relatividad.

Ahora voy a explicaros un poco (muy poco) como se afronta un proyecto con microcontroladores PIC.

  • Lo primero es pensar bien, qué quieres hacer y qué necesitas. Y hacerte con todo ello. Cables, herramienta para pelar cables, fuente de alimentación estabilizada de mínimo 5 voltios, un PC, un programador compatible con el PIC, un PIC, y recomiendo MUY encarecidamente, una placa como ésta, y los sensores, motores, etc.
  • Lo segundo es obtener un IDE (Integrated Developement Enviroment) como MPLAB. Con éste sowftware escribiréis y suimularéis el programa que va a ejecutar vuestro PIC. Necesitaréis conocimientos de lenguaje ensamblador, y tener el datasheet a mano. En él, además de toda la información electrónica y física del aparato, viene el juego de instrucciones que maneja. En microchip.com podéis descargaros cualquier datasheet de sus productos gratuitamente y sin registro.

Consideraciones:

El programador
Recomiendo PicKit 2 en ebay. Cualquier versión china sirve. Pero tendrá lo bueno y lo malo de ser chino.
Será una copia del original que fabrica microchip, pero mucho más barato. Si dispones de amplio margen presupuestario, cómprate el original. Viene con garantía. Pero no nos precipitemos. Antes de comprar nada, hay muchos términos que debéis conocer. Como por ejemplo, lo que es "debug en circuito". Es algo que explicaré en el futuro.

El proyecto
Comenzad con un proyecto sencillo. Hacer parpadear un led, hacer un juego de luces con varios led, etc.


El PIC
Una vez que tenemos claro lo que queremos hacer, hay que elegir el pic. Para empezar yo utilizaría el PIC 16F84A. Es el que os comente antes. Y para cosas sencillas teneis para una temporada. No lo mencioné porque no quiero alargar mucho el post. Pero veremos que los PIC tienen una memoria Flash que permite reprogramarlos muchas veces con distintos programas. Y el programa es un fichero hexadecimal que podemos guardar en nuestro PC. De manera que el trabajo que hayamos hecho, nos puede servir en el futuro.

La información
La información más técnica y concreta sacadla de microchip.com si vuestro nivel de inglés lo permite. No suelen equivocarse. Sino recurrid a la comunidad en vuestro motor de búsqueda preferido. Hay mucha información y tutoriales.

Para terminar, os comento que hace tiempo que alguien se dió cuenta de lo tedioso que es programar en ensamblador y lo difícil que resulta hacer código reutilizable. Por eso, existe la opción de programar los PIC en lenguaje C. Es una adaptación del C tracidional. Pero los que tengáis conocimientos de C, no encontraréis problema alguno. Lo malo es que el compilador CCS es de pago, y muy caro.

Creo que para introducirnos en el mundo, por hoy es suficiente.

Un saludo.

MarcosR.