Dom 16.03.2014 CRTL+D, para volver a visitarnos. Creado por: V. Garca. Tema: Buscar
PROLOGO. Esta documentacin, pretende ser una aproximacin prctica a las formas de control de motores paso a paso, tambin conocidos en la terminologa inglesa como, stepper's. En este sitio, puede encontrar un artculo que trata extensamente sobre los motores paso a paso, donde puede disipar cualquier duda sobre los mismos. En dicho documento, se hace un anlisis de los tipos de motores paso a paso, su constitucin, su lgica y adems se presentan algunos ejemplo de uso con el puerto paralelo del PC. La caracterstica principal de los motores paso a paso, es el hecho de poder moverlos un paso con cada impulso aplicado. Los pasos necesarios para dar un giro de 360, depende de la constitucin de cada motor, pueden variar desde 90 cada paso a 1'8 grados por pulso.
No basta con decir motor paso a paso o si me apuran motor stepper. Hay que distinguir entre dos tipos de motores paso a paso, motor bipolar y motor unipolar. En esta ocasin, vamos a abordar el tema desde la perspectiva prctica, en la que se propone, la puesta en servicio de un control para un motor paso a paso bipolar, en otro artculo abordaremos la descripcin de los motores del tipo unipolar. En adelante, especificar al tipo de motor en uso, como motor bipolar o en su caso motor unipolar. MOTOR BIPOLAR. Para hacer girar un motor paso a paso bipolar, se aplican impulsos en secuencia los devanados, la secuencia de estos impulsos, se aplican externamente con un controlador electrnico. Dichos controladores, se disean de manera que el motor se pueda mantener en una posicin fija y tambin para que se le pueda hacer girar en ambos sentidos. Los motores bipolares, se pueden hacer avanzar a frecuencias de audio, lo que les permite girar muy velozmente. Este es el motivo por que se suele decir que un motor "canta", debido a la frecuencia a la que se produce la conmutacin. Con un controlador apropiado, se les puede hacer arrancar y detenerse en cualquier instante y en una posicin determinada. Este es en teora, el esquema de un motor bipolar.
Estos motores, tienen varios bobinados que, para producir el avance de un paso, deben ser alimentados en una secuencia adecuada. Al invertir el orden de esta secuencia, se logra que el motor gire en sentido opuesto. El torque de detencin, hace que un motor paso a paso (esto vale para los bipolares y unipolares) se mantenga firmemente en su posicin, estando alimentado aun cuando no est girando. Hay tres caractersticas que, son comunes a los motores paso a paso: Voltaje. Los motores paso a paso tienen una tensin elctrica de trabajo. Este valor viene impreso en su carcasa o por lo menos se especifica en su hoja de datos. Resistencia elctrica. La resistencia de los bobinados, esta resistencia determinar la corriente que consumir el motor y su valor afecta la curva de torque del motor y su velocidad mxima de operacin. Grados por paso. Generalmente, este es el factor ms importante al elegir un motor paso a paso para un uso determinado. Este factor define la cantidad de grados que rotar el eje para cada paso completo. Una operacin de medio-paso o semi-paso (half step) del motor duplicar la cantidad de pasos por revolucin al reducir la cantidad de grados por paso. Si adquirimos un motor paso a paso, es bastante sencillo conocer las caractersticas del motor, sin embargo, lo ms comn es que nos encontremos ante un motor de desguace. Cmo distinguir ante qu tipo de motor nos encontramos, el procedimiento es bastante sencillo, el primer paso es mirar en el cuerpo del motor si permanece alguna leyenda que nos pueda servir de orientacin como, el fabricante, modelo, la tensin o alguna otra pista que nos indique las caractersticas ms inmediatas. Si no dispusiera de dichas indicaciones, nos centraremos en los cables de alimentacin (descartamos los de dos cables que, corresponden a motores de corriente continua), generalmente presentan cuatro, cinco o seis cables de salida. Nos referiremos a los de cuatro cables, estos, para controlarlos necesitan de ciertos trucos, debido a que requieren del cambio de direccin del flujo de corriente a travs de las bobinas en la secuencia apropiada para lograr avanzar un paso en su movimiento.
Estos motores, podemos obtenerlos al desguazar una vieja impresora, los podemos encontrar en la vieja unidad de disquete y son relativamente fciles de controlar, son de imn permanente. Existen dos tipos de motores paso a paso: unipolares y bipolares. En los unipolares la corriente circula siempre en el mismo sentido en cada bobina, en los bipolares, la corriente sigue una secuencia alterna que cambia el sentido de la intensidad. Los cuatro cables se corresponden a los cuatro terminales, dos de cada devanado, aunque internamente pueden contener varios pares de bobinas, como se aprecia en la imagen anterior. Los motores paso a paso, difieren de los motores de CC, en la relacin entre velocidad y torque o "par motor". Su mayor capacidad de torque se produce a baja velocidad. Los motores bipolares requieren circuitos de control y de potencia ms complejos que los unipolares. Estos circuitos de control, se suelen implementar con un circuito integrado que, soluciona dicha complejidad con un solo componente. Cuando se requieren mayores potencias, se deben agregar algunos componentes, como transistores y diodos para las contracorrientes, aunque esto no es del todo necesario en los pequeos motores. La configuracin de los motores bipolares requiere que las bobinas reciban corriente en ambos sentidos y no solamente un encendido-apagado como en los unipolares. Esto hace necesario el uso de un Puente H con una secuencia sobre cada uno de los devanados. P a s o s Bobinas 1a 1b 2a 2b 1 1 0 0 1 2 1 0 1 0 3 0 1 1 0 4 0 1 0 1 5 1 0 0 1 6 1 0 1 0 7 0 1 1 0 8 0 1 0 1 Al avanzar un paso de la secuencia al paso siguiente, hace mover el estator del motor un paso. Si vamos hacia adelante en la secuencia, el motor se mueve hacia adelante un paso y si lo hacemos al revs, el motor se mueve un paso atrs. El cdigo que sigue, muestra la secuencia de activacin de las bobinas 1a-1b y 2a-2b. Motor Bipolar CDIGO: SELECCIONAR TODO /* Motor paso a paso bipolar * --------------------------- * * (cleft) 2005 DojoDave for K3 * http://www.0j0.org | http://arduino.berlios.de * * @author: David Cuartielles * @date: 20 Oct. 2005 * * Es un motor paso a paso bipolar con cuatro cables: * - azul3 y naranja5 : bobina 1 * - rojo4 y amarillo6: bobina 2 * Sin usar la librera de Arduino. * * Adaptado a mis necesidades. * */
int motorPin1 = 3; // pines del Motor int motorPin2 = 5; int motorPin3 = 4; int motorPin4 = 6; int delayTime = 1; // Delay que determina la velocidad de giro
void setup() { pinMode(motorPin1, OUTPUT); // Configuracin de los PINes como salida digital pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT);
}
void loop() { digitalWrite(motorPin1, HIGH); // Los pines se activan en secuencia digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(delayTime); digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime); } RECONOCIENDO EL MOTOR. Los motores paso a paso, tambin tienen un nmero determinado de pasos, necesarios para girar una vuelta completa. Por ejemplo, el motor que estoy usando tiene 96 pasos por revolucin. En su etiqueta dice: STP-42H100 3'75 grados/paso, 4'6V y 0'55A. No obstante, si prueba a girar su motor y observa que se salta algn paso o se mueve con dificultad, deber probar de poner un mltiplo de 4, piense que tiene 360 grados y un mnimo de 4 polos (esto seran 90 por paso, claramente muy poco), si quiere un movimiento limpio de 3 aproximadamente, seran 360/3 = 120 pasos, ahora, guardamos los 120 pasos y ya usaremos este valor en la variable adecuada del programa. Aprovechando el Escudo que realic en otra prctica, ahora ms acabado, como puede verse en la imagen de abajo. Se pueden ver detallados los cuatro pines dispuestos para el uso de un motor bipolar, la entrada de tensin exterior con un jack adecuado junto al selector de tensin, dispuesto por un puente en amarillo y naturalmente dos conexiones independientes para aplicar a dos motores de corriente continua o en su caso a un motor bipolar con cables separados.
Uso de la librera Stepper.h El software Arduino viene con la biblioteca <Stepper.h> que hace que sea fcil de controlar un el motor paso a paso bipolar. Un problema con esta configuracin bsica es que requiere cuatro cables para su control. Un Arduino slo tiene doce pines digitales disponibles, as que, pronto nos quedaremos sin salidas. Sera agradable poder utilizar slo dos cables para manejar un motor. Ahora, se muestra un cdigo que utiliza dicha librera de Arduino. Con esta librera, se generaliza el uso de los motores bipolares. Motor Stepper DC con librera <Stepper.h> CDIGO: SELECCIONAR TODO /* * motor_dc_stepper.pde * */
#include <Stepper.h>
int pot[10]; // nada que ver con el potenciometro
// cambiar este numero por los pasos de su motor #define STEPS 196 // los pasos del motor
// crea una instancia de clase stepper, especificando // el numero de steps del motor y los pines usados Stepper stepper(STEPS, 3, 4, 5, 6); // poner pines entre (2-12)
// the previous reading from the analog input int previous = 0;
void setup() { // set the speed of the motor stepper.setSpeed(200); Serial.begin(9600); }
void loop() { // promedio de los ltimos valores para suprimir el desorden long sum = 0; for (int i= 0; i<9; i ++) { pot[i]= pot[i+1]; sum = sum + pot[i]; } // get the sensor value pot[9] = (long)analogRead(2)/4; // el potenciometro en pin 2 sum = sum+(pot[9]/.64); // long diff = sum/10+pot[9] ; // sum / 100;
long val = previous - diff;
stepper.step(val); // remember the previous value of the sensor previous = diff; } En este ejemplo, se puede apreciar que, las variables responsables de valores que dependen del PWM, se declaran como long, esto tiene sentido por el valor que puede alcanzar este parmetro. En Internet se pueden encontrar muchos cdigos para controlar los motores bipolares y es bueno conocer los distintos tipos de controlarlos, de modo que, en cada caso, el tcnico debe aplicar el cdigo que mejor se adapte a sus necesidades, modificando los parmetros que necesite. EL MTODO DE DOS CABLES. Sabemos que el comportamiento de un transistor en configuracin de colecto abierto se puede considerar como un inversor. Este tipo de circuito es muy til para manejar cosas, como luces o motores, en el que simplemente se convierte algo encendido a apagado, con la necesidad de proporcionar ms corriente que puede dar el micro controlador. Cuando est en "on", se conecta la salida a tierra y puede pasar una corriente relativamente grande a travs del transistor. Cuando se trata de "off ", la resistencia de puesta a alto (pullup) pone a alto la salida. He mencionado que el transistor NPN es tambin un inversor, lo que significa que la salida es la inversa a la entrada. Si usted le da un 1, le entregar un 0 y si le da un 0, se obtendr un 1, siempre la inversa. Pueden utilizarse transistores universales NPN como, por ejemplo BC549/C (BD139, TIP31, etc.). Volviendo a la secuencia, si nos fijamos en la secuencia de pasos, se puede notar algo interesante. Entre los pines 1a y 1b de la tabla anterior, nunca son iguales, siempre estn en contraposicin.
Siempre estn invertidos Lo mismo ocurre con el par 2a y 2b. Por lo tanto, si utilizamos a la salida del inversor un transistor, podemos eliminar los pasos innecesarios de una entrada a cada lado.
De modo que, si utilizamos las dos salidas de Arduino como entradas del L293 y los dos transistores inversores, con sus salidas, dispondremos de las cuatro entradas necesarias para el L293, podemos eliminar pasos innecesarios de la secuencia, una entrada a cada lado. El circuito que se muestra en el siguiente esquema, presenta la aplicacin de dos inversores que atacan las entradas del L293, reduciendo de esta forma las cuatro seales necesarios a slo dos salidas de Arduino.
El esquema puede parecer muy complejo, sin embargo, si se toma un momento y sigue cada conexin, pronto comprender que resulta lgico y sencillo. Los dos transistores NPN estn conectados como el circuito propuesto en el sitio web de Arduino. Adems, utiliza los pines activados. As que el circuito necesita cuatro pines, no hay manera de usar menos. Por lo tanto en un boceto de Arduino, la lnea para configurar de forma normal el motor bipolar se vera as:
Stepper stepper(STEPS, 3, 5, 4, 6); Pero con el sistema descrito de dos hilos, hay que cambiar la lnea de configuracin de la forma siguiente:
Stepper stepper(STEPS, 3, 5); Como se ve, el cdigo utiliza el comando de puerto directo para reducir el tiempo de procesador. Y crear una funcin que se llama en el bucle principal para cada uno los pasos. De esta manera el cdigo puede hacer otra cosa cuando el motor est en marcha. Y eso es todo lo que tiene que cambiar, el cdigo funciona de la misma forma. Sin embargo hemos ahorrado dos salidas del Arduino. Concretando, utilizaremos dos lnea PWM (2, 7), ms dos de control (3, 5), en lugar de cuatro ms dos de control, esto nos permitir disponer de ms pines E/S, esto es muy importante. El cdigo que sigue, se ha probado y adaptado a las prestaciones que se describen en este documento. Dicho cdigo, permite utilizar un menor nmero de pines del Arduino, as como, puede controlar dos motores de corriente continua, sin embargo, si no se dispone de los transistores que tienen el cometido de inversores, se deber utilizar otro cdigo, como el que se describe ms adelante. Motor bipolar con 2 hilos CDIGO: SELECCIONAR TODO /* bipolar2hilos.pde Stepper Motor Bipolar Controller con L293 by Kevin Filteau 2010-05-29
Este cdigo bsicamente es como el del caso anterior, la diferencia radica en que, utiliza dos salidas de Arduino y mediante dos transistores invertierte dichas seales a las entradas del L293, como se ha descrito. OTRO EJEMPLO En este caso, se presenta un cdigo, que no utiliza la librera Stepper.h. En este ejemplo, he incorporado un potencimetro mediante el cual se puede variar la velocidad, consigo una velocidad cntinua sin saltarme ninign paso, cosa frecuente hasta lograr las condiciones adecuadas. Bipolar Stepper CDIGO: SELECCIONAR TODO /*
bipolar4.pde
Control de motor bipolar, con cuatro salidas, dispone de un pulsador para cambiar la direccion de giro. Con un pot se vara la velocidad de giro. Un LED nos indica el cambio de direccin.
Autor: V. Garca 15.05.2011
compilado con Arduino v.13: 2992 bytes
*/
int motorPin1 = 3; //Digital pin 4 int motorPin2 = 5; //Digital pin 5 int motorPin3 = 4; //Digital pin 6 int motorPin4 = 6; //Digital pin 7 int pinE1 = 2; int pinE2 = 7; int switchPin = 12; // pin del switch int switchState = 0; // estado del switch int analogPin0=0; // pin del pot int val=0; int delayTime = 0;
int outPin = 13; // indicador estado. int estado = 0; // estado actual del pin de salida int previo = 0; // lectura anterior del pinX de entrada int reading; // lectura actual del pin de entrada
long time = 0; // la ultima vez que el pin de salida fue basculado long debounce = 500; // el tiempo de rebote, aumenta si la salida parpadea
pinMode(analogPin0, INPUT); // get input from variable Resister. pinMode(outPin, OUTPUT); pinMode(switchPin, INPUT); // set the switch pin to be an input digitalWrite(switchPin, HIGH); // activa RPA Serial.begin(9600); // activa comunicaciones serie, para depurar }
void loop() { int val=analogRead(analogPin0)/16; // El pot se conecta al pin0 analog. val=map(val,0,1023,0,500); // set delayTime value between 0-500 delayTime=val;
switchState = digitalRead(switchPin);
// si la entrada va de BAJO a ALTO y esperamos bastante tiempo ningn // ruido afectar al circuito, el pin de salida bascula y recuerda desde cuando if (switchState == HIGH && previo == LOW && millis()+100 - time > debounce) { if (estado == HIGH) { estado = LOW; time = millis(); } else { estado = HIGH; time = millis(); } } digitalWrite(outPin, estado); previo = switchState; if (estado == LOW) avanza(); else retrocede(); }
void retrocede(){ digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, HIGH); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, LOW); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, HIGH); delay(delayTime); digitalWrite(motorPin1, LOW); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, HIGH); digitalWrite(motorPin4, LOW); delay(delayTime); digitalWrite(motorPin1, HIGH); digitalWrite(motorPin2, HIGH); digitalWrite(motorPin3, LOW); digitalWrite(motorPin4, LOW); delay(delayTime); } Notese que dentro del bucle (loop), se lee el estado del potencimetro y se utiliza el mapa tipo, para modificar los PWM y suavizar el cambio de velocidad. As mismo, he intercalado la lectura del estado del pulsador que, nos permite cambiar la direccin de giro, incluso respetando la velocidad anterior sin necesidad de poner a cero, naturalmente esto tiene mucho que ver con la inercia del motor que se utilice. El cdigo empleado, recomendado por los fabricantes, es decir, paso completo que activa dos bobinas al tiempo, esto infiere un alto par motor o torque.
Esto es todo, por este simple tutorial. Si tiene inters en leer ms sobre Arduino, revele esta seccin. (Mostrar/Ocultar)