Subir a Inicio

PaperStepperUnipolar: Driver de potencia para motor paso a paso unipolar


Descripción

PaperStepperUnipolar es un driver de potencia para motores paso a paso unipolares utilizando el chip ULN2003. 

Entradas de control: 2 TTL (D1 y D2) ¡NO STEP Y DIR!
Salidas de potencia 4 (L1,L2,L3 y L4) 
Tensión alimentación: 5v
Tensión máxima salida:  50V 
Corriente máxima salida: 500mA por salida (picos de 600mA)



Identificación del tipo de motor

El primer problema con el que nos encontramos al realizar proyectos con motores paso a paso, es identificar el tipo de motor que tenemos (sobre todo si utilizamos motores de desguace).

Para saber si un  motor es "paso a paso", realizaremos la comprobación siguiente:  Giraremos con la mano el eje del motor y deberemos notar que éste ejerce una resistencia al giro a golpes (o pasos).

Existen dos tipos de motores paso a paso: unipolares y bipolares. En los primeros la corriente circula siempre en el mismo sentido por cada bobina, y en el segundo se alterna cambia el sentido de la intensidad.
Un modo de identificarlos es contando el número de cables que tiene el motor:

4 cables (bipolar)



Necesariamente será bipolar. Este tipo de motores no puede ser controlado con este circuito.

6 cables (unipolar-bipolar)

Es probable que sea unipolar.
Para identificar los terminales, cojemos uno y con un tester medimos el resto de terminales, si es infinito, pertenece a la otra bobina, si con dos cables nos da R es terminal central (5 ó 6). Si con los dos cables restantes nos da R y 2R, puede ser el borne 1 o 2. Con las otras bobinas haremos lo mismo. De esta forma tendremos identificados los terminales centrales de cada bobina y sus extremos, pero no podemos distinguir los extremos. lo que haremos será utilizar el método de ensayo-error.

5 cables (unipolar-bipolar)



En este caso se han unido los terminales intermedios de las dos bobinas. El borne 5 es el único que mide R con el resto de los cables, el resto de cables (con los que mide 2R) deberemos intercambiarlos en la placa haste que el motor gire.
Para conectarlo deberemos unir los terminales 5 y 6 y si al conectarlo en la placa el motor no gira, deberemos alternar los terminales 3 y 4.

NOTA: Una página muy buena sobre motores paso a paso es la siguiente: Tutorial sobre motores paso a paso

Otra página muy interesante, con un simulación de funcionamiento de diferentes motores paso a paso y con diferentes tipos de paso (una forma muy fácil de entender los micropasos) y control nos la ofrece nanotec, una empresa alemana: http://en.nanotec.com/support/tutorials/stepper-motor-and-bldc-motors-animation/
Aunque la página está en alemán, puedes ver una traducción en la imagen inferior. Elige el tipo de motor, y elige una velocidad de demo.



Descripción
Para la realización de este proyecto nos basaremos en el circuito siguiente:



En este circuito vemos que con sólo 2 pines de control (D1 y D2) controlamos las 4 bobinas del motor paso a paso (L1,L2,L3 y L4). Esto lo podemos hacer ya que para mover un motor paso a paso debemos alimentar las bobinas en el orden siguiente:

En esta tabla vemos que los valores del devanado 2 es el invertido del 1 y que los del devanado 4 son los invertidos del 3, por lo que si invertimos la señal del L1 obtenemos la señal de control necesaria para L2 y de la misma manera si invertimos la señal de L3 obtendremos la señal de control de L4, con lo que la tabla para poder mover el motor quedaría de la forma siguiente:


Esta inversión de señal la realizamos en el circuito utilizando 2 entradas inversoras del ULN2003.

Como vemos en el circuito, la entrada 1 está conectada a 5v a través una resistencia pull-up, pero la señal invertida de la patilla 11 la deriva a masa. Esta salida invertida se activa mediante la resistencia R2 que lleva la señal de D1 a la entrada 6. De forma que cuando D1 esté activo L2 irá a masa y L1 a la tensión del motor. De la misma manera haremos una doble inversión con la entrada D2 que controlará las bobinas L3 y L4.

Si utilizas Arduino, no es necesario que envies manualmente los pulsos a cada bobina del motor, tienes la vida un poco más fácil, ya que dispone de la librería Stepper, que simplifica este proceso. (Tienes más información en la sección de enlaces).

NOTA: Ten en cuenta que este este circuito necesita dos señales D1 y D2, que deben activarse según la tabla anterior (o la librería Stepper en Arduino).
ESTE CIRCUITO NO FUNCIONA CON SEÑALES PASO y DIRECCIÓN.


Componentes

4 resistencias de 1K (~0,02x4=0,08€)
1 Zócalo de 16 patillas (0,3€)
1 CI ULN2003 (0,25€)
un trozo de placa de 10 filas por 11 agujeros. (0,5€)
Cables de colores (0,5€)
3 regletas CI de paso 2,54 (0,4x3=1,2€)
(En la entrada puedes soldar directamente los cables, y en la salida utilizar una regleta típica de electricista)

El coste total es de unos 3 € (precios 2011)


Realización
 
El método Paper consiste en ayudarnos en unas pegatinas para facilitarnos el proceso de montaje y soldadura.

Primero imprimiremos el documento PaperStepperUnipolar (disponible en la parte inferior de esta página en el apartado de descargas):




Una vez impreso el documento, comprobaremos que la impresión se ha realizado a la escala correcta con la ayuda de la regla impresa situada en el lateral izquierdo de la hoja. Al colocar a su lado un regla en centímetros deberán coincidir las marcas.



Si quieres puedes proteger la paperetiqueta con un plástico transparente autoadhesivo:



  
Después recortamos la Paperetiqueta:









Necesitaremos cortar un trozo de placa de stripboard de 10 filas por 11 agujeros, lo podemos hacer con un cutter.

Y con una lija conseguimos unos cantos lisos:
Con lo que obtenemos la placa para montar.

NOTA
en la foto ves que he cortado la paperetiqueta un poco más grande que lo indicado para poder ajustarla a la placa una vez encolada y  corregir el descentramiento de los agujeros de la placa.



Ahora aplicaremos adhesivo a la paperetiqueta (suelo utilizar cinta de doble cara)


deberemos colocar la etiqueta sobre la placa. Para que coincidan los agujeros dibujados en la etiqueta con los agujros de la placa, utilizo una aguja como guía.


Con una aguja gruesa taladramos todos los agujeros de la paperetiqueta



Podemos comprobar al transluz que hemos taladrado todos los agujeros.



Soldamos los pines, zócalos, puentes y resistencias.
Deberemos prestar atención a los puentes (sobre todo a los que están debajo del zócalo)
 

El único componente con polaridad es el circuito integrado  así que comprobaremos que el zócalo tiene la zona con marca cerca del borne de 5v.


NOTA
En la imagen puedes ver que en vez de utilizar un uln2003 estoy utilizando un uln2803 dejando las patillas 1 y 10 al aire. ¡ Funciona perfectamente ! .

Si no quieres utilizar bornas para soldar en circuito impreso, puedes utilizar una clema de electricista (más baratas y fáciles de conseguir). 


Una vez soldados todos los componentes, y fijándote en la imagen del documento impreso (lado pistas) puedes cortar con un taladrín y una fresa fina las pistas indicadas (yo hago este paso una vez soldados todos los elementos para poder tomar como referencia las patillas soldadas):





 Y el resultado es ...





Andrés Lopez nos provee el enlace a unos archivos pdf por si quereis realizar este circuito por fotograbado o con el método de la plancha (muchas gracias!!).
 



Funcionamiento

Si no has descargado y descomprimido el archivo PaperSteepperUnipolarXX.zip, ha llegado el momento de hacerlo. Lo tienes disponible en el enlace inferior.

Deberás compilar e instalar en el Arduino (o Paperduino) el programa de ejemplo realizado por Tom Igoe que tienes disponible en el archivo de descargas (/Sketsches/PaperStepper2w.pde).

Deberás realizar el siguiente montaje:


NOTA
En mi caso como el motor es de 12v, utilizo una vieja fuente de alimentación de un PC para el motor y el Arduino se alimenta a través de USB. 

Otra posibilidad es alimentar el Arduino y el motor paso a paso con la fuente de Alimentación.


El programa simplemente da un número de vueltas en un sentido, y en otro indefinidamente.
Debes modificar el valor de la linea:
#define motorSteps PASOSVUELTA, donde PASOSVUELTA indica el número de pasos que hay que suministrar al motor para que el eje de una vuelta completa.
En mi caso al utilizar un motor de paso 3,75grados : 360/3,75=96.

También puede ser necesario que reduzcas la velocidad del motor si éste tiene mucha inercia, reduciendo el valor de VELOCIDAD de la linea: myStepper.setSpeed(VELOCIDAD)

NOTA: Debido a un fallo de Blogger en la línea 19 después del #include no aparece "mayor que" Stepper.h "menor que". En el ejemplo del archivo de descargas este error no se produce.

/*
 Stepper Motor Controller
 language: Wiring/Arduino

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 and 9 of the Arduino.

 The motor moves 100 steps in one direction, then 100 in the other.

 Created 11 Mar. 2007
 Modified 7 Apr. 2007
 by Tom Igoe

 */

// define the pins that the motor is attached to. You can use
// any digital I/O pins.

#include

#define motorSteps 96     // (360/3,75)change this depending on the number of steps
                           // per revolution of your motor
#define motorPin1 8
#define motorPin2 9
#define ledPin 13

// initialize of the Stepper library:
Stepper myStepper(motorSteps, motorPin1,motorPin2);

void setup() {
  // set the motor speed at 60 RPMS:
  myStepper.setSpeed(50);

  // Initialize the Serial port:
  Serial.begin(9600);

  // set up the LED pin:
  pinMode(ledPin, OUTPUT);
  // blink the LED:
  blink(3);
}

void loop() {
  // Step forward 100 steps:
  Serial.println("Forward");
  myStepper.step(96);
  delay(500);

  // Step backward 100 steps:
  Serial.println("Backward");
  myStepper.step(-96);
  delay(500);

}

// Blink the reset LED:
void blink(int howManyTimes) {
  int i;
  for (i=0; i< howManyTimes; i++) {
    digitalWrite(ledPin, HIGH);
    delay(200);
    digitalWrite(ledPin, LOW);
    delay(200);
  }







NOTA
En el video, el motor da tres vueltas (96x3) a cada lado a una velocidad  150 , el programa disponible en descargas es diferente, da una vuelta a cada lado a una velocidad de 50.


Si quieres, dispones de más ejemplos que funcionan con este circuito, desde el propio entorno Arduino:



NOTA:
Estos ejemplos están pensados para utilizar 4 pines de Arduino, para poder usarlos, simplemente modifica la linea siguiente, utilizando sólo los pines 8 y 9.:

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8,9,10,11);

// initialize the stepper library on pins 8 and 9:
Stepper myStepper(stepsPerRevolution, 8,9);



Enlaces de Interés
 

Información legal

1. Propiedad intelectual
Todos los derechos de propiedad intelectual del contenido de Txapuzas eléctronicas, están bajo una licencia Creative Commons Share-Alike, cuyo contenido podéis revisar en este enlace.
Por tanto queda permitido copiar, distribuir, comunicar públicamente la obra y hacer obras derivadas de la misma, siempre que se respeten los términos de la licencia arriba reseñada.
3. Actualizaciones y modificaciones de Txapuzas electrónicas
El autor se reserva el derecho a actualizar, modificar o eliminar la información contenida en Txapuzas eléctrónicas, y la configuración o presentación del mismo, en cualquier momento, sin previo aviso, y sin asumir responsabilidad alguna por ello.
4. Indicaciones sobre aspectos técnicos
El autor no asume ninguna responsabilidad que se pueda derivar de problemas técnicos o fallos en los equipos informáticos, que se produzcan a causa de los circuitos e ideas expuestos en el blog de txapuzas electrónicas, así como de los daños que pudieran ocasionar.
El autor se exime de toda responsabilidad ante posibles daños o perjuicios que pueda sufrir el usuario a consecuencia de errores, defectos u omisiones en la información facilitada.


Descargas

El esquema, descripción e imágenes están disponibles en el siguiente enlace:

Si tienes problemas con el enlace anterior, aquí puedes descargar todos los archivos de txapuzas

Notas
Para la realización de este proyecto se han utilizado los programas: Arduino, Inkscape, Openoffice, Gimp, Picasa, Fritzing
Si encuentras algún fallo, se te ocurre alguna mejora, o simplemente quieres hacer algún comentario, te lo agradeceré: Gracias :-)

24 comentarios:

  1. Buenas amigo me parece muy interesante la forma de control con solo 2 hilos el PaP, lo voy a diseñar en eagle, si queres cuando termine lo podría compartir.
    También me gusto la forma de hacer la serigrafia osea pegando la hoja de papel pero me queda la duda de con que programa o como haces los dibujos así de coloridos

    ResponderEliminar
  2. Hola Andrés,
    Perfecto!! si quieres compartirlo puedo ponerlo a disposición de los demás en la página.
    Todos los dibujos los hago con un programa libre de dibujo gráfico llamado inkscape (tienes los documentos editables .svg en el archivo descargable), que puedes descargar en: http://inkscape.org/download/?lang=es.
    Saludos

    ResponderEliminar
  3. Hola.
    Primero quiero felicitarte por compartir estos circuitos y por la manera tan fácil y sencilla de hacerlo, facilitas muchísimo a los que sabemos muy poco de electrónica la tarea de hacer los circuitos.
    Después de descubrir Arduino (hace 2 semanas) y ver tu página me dicidi a probar con los motores paso a paso ya que hace tiempo que me gustaría hacer una fresadora CNC.
    He conseguido hacer funcionar el motor :), pero para dar una vuelta completa en cada sentido he tenido que poner los steps a 2048 y el motorStep a 2048, la velocidad la he tenido que bajar a 8.
    Si leo bien los datos del motor es de 64 pasos no de 2048. No se si hago algo mal. Te incluyo los datos del motor.
    Si me puedes orientar te lo agradecería.

    Mainly used in Air Conditioner Louver , Small Cooling/Heating Fan etc., Stable and all technic parameters are qualified for national electronic standard of SJ/T10689-95
    SPEC
    Rated voltage 12VDC
    Number of Pole 4
    Speed Variation Ratio 1/64
    Stride Angle 5.625° /64


    Un saludo

    ResponderEliminar
  4. Hola Xavi
    Según parece, tu motor tiene un sistema de engranajes (reductora) acoplados al eje del motor paso a paso con una relación 1/64, es decir necesita el motor dar 64 vueltas para que el eje final de la reductora de una vuelta completa.
    El ángulo de paso es de 5,62 => 360/5,63=64 pasos por vuelta. Si ahora aplicamos la reducción:
    64x64=4096 Es decir teóricamente deberemos dar 4096 pasos para dar una vuelta completa.

    Con respecto a la velocidad, cada motor es diferente. Lo mejor es ir aumentándola hasta que notes que dja de moverse regularmente.

    Saludos

    ResponderEliminar
  5. Hola

    Muchas gracias por la explicación. Ya he podido configurarlo correctamente.

    Saludos

    ResponderEliminar
  6. hola, hay un error en el programa de esta página, ya que el #include le falta el nombre del archivo.... para arreglarlos solo hay que poner #include

    ResponderEliminar
  7. Menor que Stepper.h mayor que

    ResponderEliminar
  8. Hola anónimo, como veo ya te has dado cuenta de que el error es de "blogger".

    Interpreta como comando HTML lo que está entre los símbolos "mayor que" y "menor que".

    No obstante, este ejemplo está correcto en el archivo de descargas.

    Ya voy a poner una nota informativa.

    Gracias

    ResponderEliminar
  9. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  10. Me gustaría saber si se puede fabricar un CNC utilizando UNL2003 (como los de esta página) y si se puede utilizar el programa TxapuCNC_TX para manejar los stepper.... (en otras palabras no utilizar un Easy driver.

    Si se pudiera, me gustaría que me ayudaran a construir uno. Gracias

    ResponderEliminar
  11. Hola Chris
    TxapuCNC_TX es compatible con todos los PaperStepper.

    ResponderEliminar
  12. Hola Iñigo,

    Gracias por tu respuesta tan pronta y oportuna.

    Disculpa, pero aun tengo una duda... (no he realizado la prueba, pero lo haré) si conecto 3 stepper, específicamente para x,y,z, el programa me debe funcionar sin problema o hay que modificar algo en él?
    Digo, si el G-code me reconoce el PaperStepper para el funcionamiento con el TxapuCNC, o ya hay un programa...

    Te cuento que ya realicé la parte del corte de la madera, solo necesito instalar los motores y el programa por supuesto.

    Disculpa tanta pregunta, de verdad me interesa mucho poder armar mi CNC para crear engranajes en madera utilizando un dremel...

    Muchas gracias por toda la información de tu página es super útil.

    saludos.

    ResponderEliminar
  13. Hola Chris
    Perdona pero no entiendo tu pregunta:

    "si conecto 3 stepper"
    ¿te refieres a tres motores paso a paso o a tres drivers "PaperStepper?

    "si el G-code me reconoce el PaperStepper para el funcionamiento con el TxapuCNC, o ya hay un programa..."

    ¿A que te refieres con G-Code? ¿Qué programa?

    ResponderEliminar
  14. Jejeje, si disculpa, no expliqué bien lo que deseaba preguntar... pues si era 3 motores stepper...

    el g-code, aquí explica que es:

    http://blog.bricogeek.com/noticias/arduino/contraptor-cnc-interprete-de-g-code-para-arduino/

    Y lo último, era si el programa TxapuCNC podría trabajar con el g-code (el código para programar el arduino)

    Si, tienes razón. y disculpa la molestia.

    He podido hacer que los motores unipolares se muevan, utilizando el PaperStepper, pero lo hacen de forma individual, lo que aun no he probado es el TxapuCNC con la programación del arduino... ahora sí, replanteo la pregunta...


    ¿cuál es el código o programa que necesita el arduino para que trabaje con el TxapuCNC, utilizando el PaperStepper (unipolar)?

    Muchas gracias por toda tu ayuda....

    ResponderEliminar
  15. Hola Chris

    Lo que comento a continuación está mexplicado con detalle en el post http://txapuzas.blogspot.com/2009/12/txapu-cnc-software.html.

    Se suele llamar "g-code" al lenguaje de programación utilizado en CNC.

    El sistema TxapuCNC se compone de 3 partes:
    Una fresadora controlada por Arduino y PaperSteppers.
    Un programa en El PC que envía los comandos G-code TxapuCNC_TX.gambas, escrito en gambas (linux).
    Un programa en el Arduino que recibe los comandos G-Code, los interpreta y mueve los motores según el comando recibido, llamado TxapuCNC_RX.pde.

    NOTA:TxapuCNC_RX es compatible con todos los Arduinos (de 5v) y con todos los PaperSteppers.

    ResponderEliminar
  16. OK, todo claro!!! muchísimas gracias

    ResponderEliminar
  17. Hola Iñigo,

    Construí el PaperStepperUnipolar, y los motores funcionan bien hasta cierto punto, y luego este empieza a girar uno o dos pasos en un sentido y luego en el sentido opuesto y no sale de ese ciclo,,, desconecto todo vuelvo a conectar y continua igual,,,

    Desconecto todo y lo dejo mucho tiempo y cuando vuelvo a conectar a veces arranca bien,, pero luego de unos momentos vuelve al comportanmiento anteriormente mencionado.

    Probe las señales del arduino y del paper y estan OK pero el motor no opera bien,,, he probado con varios motores ya,, no que que mas puedo hacer?

    Agradezco cualquier ayuda que me puedas brinda.

    Saludos.

    ResponderEliminar
  18. Hola:

    Hay un tipo de motores que tiene solo 3 cables, creo que es porque está conectado en triángulo. ¿Podrias comentar algo de estos?
    Ademas de utilizarse en aeromodelismo es el que utiliza el disco duro "Barracuda" de seagate, que además da 7200 rpm. (es una pasada) y me gustaria hacerlo girar adeamas a muchisima menos velocidad. Gracias!

    Twitter @itubal

    ResponderEliminar
  19. hola iñigo un saludo..mira he estad siguiendo este blog para hacerme mi propia cnc... hoy por la tarde me encontre un motor de pasos ke me vendieron... tiene 6 cables por lo ke imagino es unipolar pero .. desconosco totalmente ke voltaje utiliza y ke amperaje... por su tamaño parace tipo nema 17 o 14...dime hay alguna manera de saber ke voltaje y amperaje necesita....

    pd.. el motor tiene una pegatina con los siguientes datos...

    STP-42D,117
    1.8 DEG/STEP 15.4OHMS
    NO. 05X50G.

    ResponderEliminar
  20. very good article and very clearly, congratulations

    ResponderEliminar
  21. Felicitaciones Iñigo, por todo este material, yo me estoy haciendo una micro cnc que va a tener una area util de 15x10cm, ya tengo algo en la parte mecanica que no le veo mayor problema, y talvez me puedas aclarar unas dudas, las cuales son las siguientes:
    1.- Cual es la diferencia de uso entre los pines D1 y D2 contra los STEP y DIR?
    2._ Los Driver unipolares con el ULN2003 no poseen control de corriente. ¿Eso se debe a que son para motores pequeños de no mas de 1A?
    3.- Toda la electronica es para manejarse desde puerto usb y con linux?
    4.- Si el paperdrive unipolar funciona con D1 y D2 eso significa que no los puedo controlar con una interfaz de puerto paralelo como los de esteca55 (http://www.esteca55.com.ar/proye-interfazcnc12.html).
    Lo que me preocupa un poco es que por ejemplo el de esteca55 usa un PIC12f629 el cual tendria que programar al igual que el clon de arduino para el cual tengo que construir varios cables para programarlo aunque me parece mas facil que programar un pic (es que en esto de la programacion de pics y del arduino soy un cero a la izquierda). Entonces luego de esto, la otra pregunta serìa:
    5.- Existe algun circuito que no use pics ni chips que requieran programar para el interfaz .
    De antemano un saludo y agradecimientos especiales por toda la ayuda que nos brindas. Gracias
    Att.
    hector

    ResponderEliminar
  22. una pregunta como se pueden controlar varios motores a pasos con un arduino? y si se puede que arduino me recomiendas? y el driver seria el mismo?

    ResponderEliminar
  23. Como invierto la señal en un puente h creado con 4 lm386? Para tener d1 y d2 seria para un motor 4 hilos bipolar y crear mi cnc junto otros 2 uln2003

    ResponderEliminar
  24. Para la maquina CNC que tipos de drivers utilizas como se llama es el PaperStepperUnipolar??

    ResponderEliminar