5. Motores Paso a Paso

5. Motores Paso a Paso
5 (99%) 20 votes

Paso a Paso

 

Los motores paso a paso son un tipo especial de motores que permiten el movimiento de su eje en ángulos muy precisos y por pasos, tanto a la izquierda como a la derecha. Aplicando a ellos una secuencia de pulsos.

Cada paso tiene un ángulo muy preciso, determinado por la construcción del motor lo que permite realizar movimientos exactos.

Son utilizados para generar movimientos precisos, por ejemplo en robots, en equipos con movimientos X-Y, entre otros. Ver mas información de motores paso a paso.

 Existen dos tipos de motores paso a paso:

Motores Unipolares: este tipo de motor tiene dos bobinas en cada uno de los estatores y cada par de bobinas tienen un punto común, es decir, tiene 5 ó 6 terminales.

Motores Bipolares: este tipo de motor tiene dos bobinas y no poseen puntos comunes, es decir tiene cuatro terminales. Para controlar este tipo de motor paso a paso bipolar es necesaria usar 8 transistores o circuitos integrados especiales.

Motores paso a paso

Control de Motor Paso a Paso Unipolar con PIC

Para controlar el motor paso a paso se debe conocer su secuencia y sus terminales, de tal manera que el circuito o el programa en microcontrolador generen la secuencia lógica de cuatro bits que energiza una bobina del motor en el orden correcto.

Si no sabes cuales son las bobinas, te dejo un video que te enseña a identificar cada bobina y de esta manera poder generar la secuencia que nos permita hacer girar el motor bien sea para la derecha o para la izquierda.

 

Como ya lo hemos venido explicando, queda claro que el motor Paso a Paso posee diferentes bobinas. Ahora, una vez conseguimos identificar cada bobina del motor, vamos a proceder a darle movimiento con nuestro microcontrolador.

Si te está sirviendo de algo la información de la pagina, podrías invitarme a un café y ayudarme a seguir manteniendo en pie el sitio WEB. Solo cuesta $2USD y me ayudarías enormemente a seguir con mi trabajo. Muchas Gracias por tu visita.




Pero nos encontramos con el primer inconveniente, y es, que el microcontrolador no maneja mucha corriente en sus terminales de salida, por eso, para poder proporcionarle movimiento a nuestro motor Paso a Paso, vamos a necesitar ayuda de algún circuito externo, que nos proporcione la potencia necesaria para mover el motor.

 

En el mercado existen drivers que permiten manejar este tipo de motores, en nuestro caso, vamos a realizar el movimiento de nuestro motor con el accionamiento de cuatro transistores los cuales nombraremos (Q1,Q2,Q3,Q4), y su conexión se muestra en el ejemplo.

 

Para proporcionar el giro en cualquiera de los dos sentidos, debemos respetar la siguiente secuencia de activación de los transistores.

Giros motor paso a paso unipolar

Las señales que habilita cada transistor pueden venir desde un circuito integrado o desde el microcontrolador, el transistor lleva el negativo a la bobina del motor, en el momento en que es habilitado.
La velocidad del motor depende de la frecuencia con que se envíen los pulsos a cada transistor.

Ejemplo 1.

Controlar un motor paso a paso conectado a los cuatro bits menos significativos del puerto B, de tal manera que si el suiche conectado a RC0 esta en uno gire a la derecha y si el suiche esta en cero, el motor gira a la izquierda. Este ejemplo puede implementarse por medio de transistores así como vemos en el siguiente circuito:

Ejemplo motor paso a paso unipolar

Ó también si lo deseamos, podemos usar un integrado puente H, como por ejemplo um L298, utilizando el siguiente circuito:

Motor paso a paso con pic y l298

Prepare el siguiente video donde te explico el código implementado de los motores paso a paso, con su respectiva explicación y como podemos simularlo por medio del proteus, para que posteriormente podamos llevarlo a la practica. No olvides suscribirte a mi canal de youtube dando click en el siguiente botón, para que puedas recibir toda la información que allí voy publicando.

 

Codigo De Implementacion en CCS C PICC:

A continuación se presenta el código para que lo copies y lo pegues en tu compilador y puedas reproducirlo. Recuerda que para ver el código debes compartir el contenido de este blog para que más personas se beneficien de esta información.

A continuación se muestra la implementación práctica del Motor Paso a Paso unipolar implementada en el PIC y CCS C:

En el ejemplo se uso la lógica a un solo paso:

 

 

Este mismo ejemplo, podemos aplicarlo a MOTORES PASO A PASO BIPOLARES, teniendo en consideración que este tipo de motores poseen dos bobinas y por lo tanto la dirección del giro del motor estará regido por la dirección de flujo de corriente que circule por cada bobina. En otras palabras, se puede usar el mismo ejemplo visto para el motor unipolar, solo que el circuito para el motor bipolar cambia.

Aquí tenemos dos opciones.

  1. Conectar el motor bipolar a dos puente H (Necesitaremos entonces de 8 transistores)
  2. Conectar el motor bipolar a un driver o circuito integrado que internamente tiene la configuración de un puente H. Como por ejemplo, el integrado L293D ó L298 de la implementación del ejemplo del unipolar.
L293D paso a paso
Conexión de un motor Paso a Paso BIPOLAR con un L293D

A continuación les mostraré como sería el circuito hecho en proteus, para utilizar EXACTAMENTE el mismo ejemplo, pero en un motor BIPOLAR.

Motor Bipolar

 

Si te sirvió de algo la información de la pagina, podrías invitarme a un café y ayudarme a seguir manteniendo en pie el sitio WEB. Solo cuesta $2USD y me ayudarías enormemente a seguir con mi trabajo. Muchas Gracias por tu visita.




Esta entrada tiene 46 comentarios

  1. hola sergio buenas tardes quisiera feilicitarte por tu labor explicas muy bn .
    tome su video como guia me toca hacer un trabajo con un motor paso a paso con transistores fet ,que mueste en la pantalla hacia que lado esta girando y en lenguaje pic c con un menu switch
    estare atento haber si me puedes ayudar o guiarme

    1. Hola John, gracias por el comentario. Basicamente tu proyecto se puede resolver con todo lo que hemos visto en la página. La instrucción switch es basicamente como si fueran varios IF, El giro del motor también es fácil saberlo ya que una vez conectas el PAP, el va a girar siempre en el sentido de como tu le inyectes los pulsos, que son las matrices horario y antihorario que vimos en esta entrada. Es decir tu ya sabes como será el giro del motor, solo basta colocarlo en el LCD. Éxitos en el proyecto.

      1. Gracias sergio estoy trabajando en eso aún tengo una duda porque me toca agregarle unos transistores fet

        1. Ok John, suerte!!. Eso no tiene tanto lio, puedes usar el mismo esquematico que está mostrado en este post, con el puente H de los transistores, Solo bastaria con reemplazar los transistores TIP122 por transistores MOSFET por ejemplo un IRFZ44N que son MOSFET bastante guerreros y que he usado en varios ejemplos aca en la página, el esquemático es el mismo, solo reemplaza los transistores. O si lo deseas busca en Google Puente H Mosfet, y listo. Saludos.

          1. Vale Sergio muchas gracias

  2. Escribir un programa que permita controlar un motor PAP, a traves de arduino [12P]

    a. Primero se debera setear el tiempo mediante los pulsadores [up] y [dw], luego
    presionar [enter], para confirmar

    b. Seguidamente se debe setear el sentido mediante [up] -> Horario o [dw] ->
    Antihorario

    c. Seguido a esto el motor deberá girar en el sentido elegido y la cantidad de
    tiempo, previamente seteados [Deberá visualizarse todo el proceso en la
    pantalla LCD ]

    1. Buena práctica donde puedes aplicar todo lo aprendido en la entrada. Éxitos.

  3. Esta forma sería una una vuelta completa en forma de reloj y antireloj en proton Ide
    PORTD=%1000: GoSub tim
    PORTD=%0100: GoSub tim
    PORTD=%0010: GoSub tim
    PORTD=%0001: GoSub tim
    delayms 500
    PORTD=%0010: GoSub tim
    PORTD=%0100: GoSub tim
    PORTD=%1000: GoSub tim
    PORTD=%0001: GoSub tim
    delayms 500

  4. hola… gracias a tu trabajo explicando todo el circuito he logrado comprender el funcionamiento básico de los motores PAP. he tomado como ejemplo tu SCRIPT pero le he hecho algunas modificaciones en base a lo que necesito… al simularlo en proteus no tengo ningún problema, sin embargo al grabar el PIC y hacer las conexiones del motor y el “driver” me resulta que el motor solo vibra…

    estoy usando:

    PIC 16F877A
    DRIVER L298N;
    Motor NEMA 17

    el motor posee 200 pasos para completar un giro completo, es un motor bifasico y “no se” cual sera la cantidad de “pasos por segundo” que logra aguantar (refiriéndome a la velocidad que puede alcanzar). se que esta clase de motor es usada en las impresoras 3d, también he logrado hacerlo mover un poco conectandolo a un arduino, utilizando el L298N (mencionado anteriormente), pero no se que ocurre con la conexion en el pic. uso un cristal de cuarzo de 4M y condensadores de 22 o 33 pf.

    1. Hola Salvador, primero debes asegurarte de estar alimentando el motor con el voltaje adecuado, ese motor creo tiene una franja entre 7v a 36v, debes asegurarte de alimentarlo con un voltaje dentro de esa franja por medio del driver L298N, el PIC siempre a +5v. Tambien podrias ver si has conectado los cables del motor incorrectamente al driver. Recuerda identificar las dos bobinas del motor.

      1. Gracias por la respuesta, el drama estaba en el conexionado de las entradas del motor, me fije que en la entrada del motor los cables se cruzan, por tanto, sus conexiones no están en orden, solo tuve que acomodar los cables para que el motor funcionara…

        Ahora tengo otro problema -.- …. El driver lo estoy alimentando con 12v ya que mi motor funciona a esas tensiones (según el data sheet, que ya no se si creerle por lo del conexionado ¬_¬), el punto es que: solo cuando aplico presión con mis dedos sobre los contactos del driver el motor funciona (el L298N esta implementado en una placa, puedes googlear una imagen para tener referencia), es decir, al conectar y energizar los elementos no funciona el motor, “pero”, si presiono los contactos del driver el motor funciona O_o … pensando que pueda ser un problema con el driver lo cambie… Mismo problema. será la alimentación ?? estoy usando un transformador regulable. salgo de un drama para entrar en otro .____.

        1. Es estraño que cuando colocas presión en la placa funciona.
          1- Resolda todos los puntos de estaño de tu placa, vaya ser que talvez haya un falso contacto.
          2- Cuando trabajas con motores y microcontroladores la fuente de alimentación es primordial, debes tener una buena fuente, con el mínimo de rizado posible. Si te es posible, alimenta el PIC con un fuente diferente a la que alimentas el motor, si no, entonces trata de usar un buena fuente.
          3- Coloca un condensador de Bypass, (0.1uF) entre los pines de alimentación (VCC y GND) del microcontrolador lo mas cerca posible del integrado, esto ayuda a reduzir ruidos de interferencia.
          4- Utiliza conexiones a tierra separadas, una para el microcontrolador (GND Digital) y otra para la etapa de potencia (GND Análoga).

          1. Sergio, gracias por las sugerencias. te cuento:

            estoy alimentando el PIC con un transformador de 5v, aparte estoy usando un transformador regulable de 12v para alimentar el driver, así que los circuitos los estoy alimentando por separado con sus respectivos GND. No quiero usar un voltaje mayor por temor a quemar el motor (en mi país están caros -.-).
            Lo unico que puedo hacer es verificar el tema de la fuente de poder para el driver e implementar los condensadores en función de Bypass en el PIC, respecto a los condensadores, son cerámicos o electrolíticos ?

          2. pueden ser electroliticos.

          3. Sergio, hola!!… te cuento:

            logré hacer funcionar el circuito como corresponde, al final el problema estaba en el uso del transformador de 5v con el que alimentaba al PIC, lo descubrí al implementar un regulador, el 7805, de ahí saque los 5v a las partes lógicas de mi circuito y santo remedio, me imagino que el drama con ello era por alguna diferencia de potencial entre las redes lógicas y las de potencia, quedé con la curiosidad de descubrir puntualmente el drama. El nuevo problema que me surge ahora: es la corriente y la disipación de temperatura entre el L298 y el 7805, como son 2 motores nema 17 y 1 motor DC de torque es evidente que me quedare corto con la corriente. simple, agregar mas corriente al circuito, el drama esta en la temperatura que alcanzaran estos elementos. No se si conoces algún rango de operación seguro entre la Corriente v/s Temperatura (es evidente que le pondré disipadores a estos elementos y quizás un ventilador) que me permita manejar los motores sin tener problemas de potencia. de antemano agradezco mucho tu ayuda n_n

  5. muy bueno tu proyecto amigo, como se puede controlar el posicionamiento de dos motores paso a paso con un teclado ????

    1. Joel, puedes juntar lo aprendido en esta práctica junto con la entrada del teclado telefonico (click aca). Así podrías por ejemplo ingresar el numero de pasos que quieres dar con tu motor y después de darle enter, que tu motor se mueva conforme tu lo programaste. Ánimo que es un buen proyecto.

  6. Tengo otra duda en el vídeo en la parte del proteus donde conectas el pic con el cristal y en donde pones el motor.. en la parte del motor pones los componentes que no se que son uno es el punto que no tiene color al final de cada cable.. es para pasar la señal del pic al motor pero como se llaman y el otro elemento es los Q pero si no tengo idea de que son .. Me podrías decir como se llaman esos componentes para poder investigar sobre ellos muchas gracias

    1. Puedes darle click a la imagen y ella se va a poner mucho mas grande. Los transistores Q, son transistores TIP122. Ahora lo del punto que hablas, es solo para simular, no es ningún componente. Como lo explico en el minuto 13:50 ese punto simplemente es para decirle al proteus que las señales del pic están conectados a las bases de los transistores. Solo se hace en la simulación para que mi esquema no se quede llena de cables y lineas. Saludos.

  7. Hola discúlpame si no quito el watchdog que pasa??

    1. No pasa nada, el watchdog solo es un reset en caso tal que ocurra un error de procesamiento dentro del microcontrolador

  8. amigo,una super duda, yo lo programe con el pic 18f4550 e hice el cambio de puertos como en una pregunta anterior,pero el motor a pasos no me gira completamente, si no que solo gira pero muy pequeños pasos, que podra estar sucediendo, alguna idea?

    1. Alex, no entendi. El motor está girando completamente los 360°?? De forma que da pasos muy pequeños

  9. ¿amigo el armado ya en protoboard cambia al diagrama en proteus?

    1. No, es el mismo, Puedes armarlo igual solo debes colocar la alimentación del PIC, pues en proteus no es necesario alimentarlo. Saludos.

  10. Sergio debe implementar un circuito que realice lo siguiente
    un módulo de control sencillo para levantar y bajar un toldo (o
    persiana) motorizado. Se dispondrá de dos sensores: uno de temperatura y otro
    de luminosidad (LDR) y de dos pulsadores manuales.
    Funcionamiento:
    – Si el sol incide en el sensor LDR (no ocultado por el toldo) y la temperatura
    exterior es elevada (>24ºC, por ejemplo), que el toldo se baje del todo.
    – Si incide el sol y la temperatura exterior no es elevada, entonces el toldo no se
    debe bajar (situación en invierno) para que el sol caliente el interior de la sala.
    – Si no incide el sol habrá que subir el toldo en cualquier caso para aprovechar la
    luz exterior.
    – Si se activa (interruptor) manualmente la subida, se ignora el control automático y
    se sube el toldo. Lo mismo ocurre con la bajada. El modo automático se consigue
    activando simultáneamente la subida y la bajada.
    Hardware disponible:
    – PIC18f4550
    – Sensor de temperatura LM75
    – Resistencia LDR (Resistencia variante con la luz)
    – Circuitería externa para los motores

    seun he leido el LM75 i2c pero no entiendo muy bien como realizar esto me podrias ayudar

    1. Consuelo, esa es una clase que tengo pendiente. Creo que será la próxima que voy a montar en la pagina apenas me desocupe un poco. Tienes necesariamente que usar ese sensor? Porque podrias utilizar un simple LM35 y utilizar la conversion analoga digital para leer la temperatura. Un saludo.

  11. Amigo cuáles son los cambios que hay que hacer para ejecutarlo en un PIC 16F628A,
    y que así funcione con tus programas

    1. Ese es un PIC mas pequeño, y solo tiene dos puertos. Es decir que tienes que limitarte unicamente al Puerto A y al puerto B. Para usar mis codigos, basta con colocar la libreria del PIC en el comienzo.
      #INCLUDE<16F628A.h>
      y debes borrar los portc y los portd. Unicamente podras trabajar con:
      #byte PORTB=6
      #byte PORTA=5
      y lo mismo en las configuraciones de entradas y salidas en el main()
      SET_TRIS_A(0B11111111); //Configura el puerto A
      SET_TRIS_B(0B00000000); //Configura el puerto B

      Tambien debes borrar en la instruccion #FUSES debes borrar el perro guardian (WRT) puedes colocar algo como:
      #fuses XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP

  12. saludos, gracias por el artículo, tengo una pregunta, para que el motor solo de medio giiro y se mantenga ahí hasta que se active el pulso y se devuelva el medio giro, cómo lo hago? activo sólo dos bobinas??

    1. Hola Argemiro, el motor lo puedes girar hasta el punto que quieras y devolverlo, etc. Podrias ver con cuantos pulsos tu motor llega hasta la mitad porque va a depender de cuantos pasos tenga tu motor. Prueba colocando retardos en las funciones, por ejemplo la de Horario asi:
      byte const HORARIO[4] = { 0b1100,
      delay_ms(1000);
      0b0110,
      delay_ms(1000);
      0b0011,
      delay_ms(1000);
      0b1001
      delay_ms(1000);};

      Y colocando una cinta en el rotor de tu motor puedes contar con cuantos pulsos llego a la mitad.

  13. ¿Cómo serián los códigos con el pic16f877A?

  14. Amigo y como hago para proyectarle un lcd y ud Ulm 2003 gracias

    1. Para utilizar un ULN2003, no debes modificar nada, es solo cuestión de cambiar el driver. Tomas las salidas del pic (PortB) y las colocas en (IN1,IN2,IN3,IN4) del ULN2003 y OUT1 y OUT2 lo colacas en la primera bobina del motor y OUT3 y OUT4 en la segunda bobina. En cuanto a lo del LCD podrias dar un vistazo a la entrada de LCD dando click aqui, para que aprendas como se programa el LCD. Saludos.

      1. que tal amigo sera que ud me podria colaborar es que soy novato y me esta quedando muy dificil le agradeceria amigo , es que tengo que hacer un motor paso a paso con el pic18f4550 con un ULM2003 y un LCD. le agradezco

        1. Hola Jorge, yo te puedo ayudar, pero ando un poco ocupado y no se para que fecha necesites eso. Intenta comenzando escribiendo algún código. Es prácticamente el código que vimos en esta entrada. Que es lo que quieres mostrar en el LCD? Saludos.

  15. amigo buenas noches, una duda que hay que cambiar en el codigo al colocar un puente h para el motor a pasos

    1. Hola, no tienes que cambiar nada, puedes usar el mismo ejemplo. Solo debes conectar bien el L293, asi como lo muestro en la figura del ejemplo 2. Saludos.

      1. muchas gracias amigo en serio me salvas

  16. Hola, es muy didáctico tu post, ya que actualmente estoy realizando un proyecto con este tipo de motor, mi duda es, como puedo determinar la frecuencia de trabajo de el motor pap a partir de la secuencia horario p.e. que muestras, ya que el delay_ms(100) sería para cada secuencia a enviar por los puertos, la puedo definir como Fmpap=1/100ms (Fmpap es Frecuencia motor pap), o me afecta cada envío, es decir, debería calcular la frecuencia como Fmpap=1/400ms, ya que son cuatro secuencias para dar un paso del motor? Aclaro que desconozco la cantidad de pasos de mi motor, bueno, técnicamente estoy empleando una válvula IAC, pero su funcionamiento es el mismo. Agradezco tu información y la posible ayuda que puedas ofrecerme.

    1. Se me paso otra duda, para el calculo de la frecuencia también afecta el tipo de secuencia que pueda usar, si es con bobinas alternadas, con ambas excitadas o medio paso? Si, aunque tu ejemplo es de un motor unipolar, podría ser aplicado igual a un bipolar o hay otras consideraciones. La válvula IAC funciona como un motor bipolar.

      1. Si colocas secuencias que hagan que los pasos del motor sean menores, a mi parecer podrías aumentar un poco más la frecuencia, ya que se necesitara que el pulso de las bobinas las energice por un periodo menor de tiempo. Puedes aplicar el mismo concepto en motores bipolares, solo debes tener en cuenta que como tendrás dos bobinas y la dirección del motor dependerá del flujo de corriente sobre las bobinas. Será necesario que implementes dos puente H, un puente H para cada bobina o simplemente utiliza un Driver. Un L293, que te permitirá controlar este tipo de motor fácilmente utilizando los 4 bits que utilizamos en este ejemplo. Saludos.

    2. Hola Sergio. Mira, la frecuencia de pulso seria F=1/100, exactamente como lo estabas definiendo. Si quieres aumentar la velocidad de tu motor, puedes aumentar la frecuencia paulatinamente. La frecuencia que elijas debe permitirle al motor alcanzar el pulso perfectamente. Si por acaso aumentas mucho la frecuencia, tu motor se detendrá o comenzará a vibrar. Ahí sabrás que has llegado al limite y debes bajarla un poco para permitir que el motor gire perfectamente.

      1. Mucha gracias por responder prontamente, haré las pruebas pertinentes para saber que frecuencia me permitirá usar más eficaz y eficiente la velocidad del motor. Tu blog está muy bueno, aprenderé bastante.

  17. Amigo Sergio cuáles son los cambios que hay que hacer para migrar de pic 16F887 para 18F4550 pic,
    y que así funiona con tus programas
    Por ejemplo para el motor paso a paso con el PIC 18F4550

    Le doy las gracias

    1. Hola Antonio como estas. La migración es simple, solo debes cambiar los encabezados del programa, colocando la libreria del 18F4550 y colocando las direcciones de memoria de los puertos. Estas direcciones de memoria las puedes encontar en el datasheet del tu microcontrolador en la pagina 68. Por ejemplo el PORTA tiene como dirección de memoria F80h, lo que quiere decir que es un numero hexadecimal, pues termina en h minuscula, y tu lo colocarias en el compilador como PORTA=0xF80. Para dejarte las cosas más claras, aqui te dejo el encabezado que debes usar, en este ejemplo de motores paso a paso con tu microcontrolador. Saludos, no olvides compartir para que más personas conozcan la pagina. Gracias.

Deja un comentario

Menú de cierre