Saltar al contenido
Control Automático Educación

Motor Paso a Paso con PIC

El motor paso a paso son un tipo especial de motor que permiten el movimiento de su eje en ángulos muy precisos denominados pasos, tanto a la izquierda como a la derecha. Este movimiento se logra a través de una secuencia de pulsos provenientes de un sistema de control. En esta entrada vas a aprender como programar un motor paso a paso por PIC utilizando el lenguaje C y el PIC C Compiler.

Motor Paso a Paso
Motor Paso a Paso

Antes de comenzar, puedes suscribirte al canal de YouTube, si deseas seguir aprendiendo sobre programación de sistemas microcontrolados, como por ejemplo el microcontrolador PIC de Microchip.

  1. ⚠️ Primero puedes darle un vistazo a nuestro CURSO DE PIC GRATIS
  2. ⚠️ Mira como implementar un Motor Paso a Paso con ARDUINO

Motor paso a paso – Funciones y Tipos

Los motores paso a paso 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 motor 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
Motores paso a paso

A continuación te dejo algunos motores paso a paso para que hagas tus proyectos. Estos los puedes adquirir de una forma MUY económica por medio del portal chino aliexpress.

También es posible comprar motores directamente en Amazon, bien sea que estemos ubicados en latinoamerica o en españa, estos son los motores más vendidos de esta tienda a un excelente precio:

Control de Motor Paso a Paso PIC C Compiler

Para controlar el motor paso a paso unipolar o bipolar se debe conocer su secuencia y sus terminales, de tal manera que el circuito o el microcontrolador generen la secuencia lógica de cuatro bits que energizan las bobinas del motor en el orden correcto.

Si no sabes cuales son las bobinas del motor paso a paso unipolar, 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. La misma secuencia puede ser usada para identificar el motor paso a paso bipolar.

Una vez conseguimos identificar cada bobina del motor, vamos a proceder a darle movimiento con nuestro microcontrolador. Para eso vamos a ver como programar un motor paso a paso en lenguaje c usando el microcontrolador PIC.

Movimiento del Motor Paso a Paso PIC (o cualquier microcontrolador)

Nos encontramos con el primer inconveniente, y es, que el microcontrolador que vayamos a utilizar (en este caso usaremos un PIC) 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 paso a paso, en nuestro caso, vamos a realizar el movimiento de nuestro motor paso a paso (PaP) 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 una secuencia de activación de los transistores.

Las secuencias más populares son la secuencia a un paso, a dos pasos y a medio paso. A continuación se describen las tres secuencias de la cual puedes seleccionar la que desees:

Secuencia a un paso

Se envían 4 pasos, en cada paso se activa solo una bobina.

PasoIn1In2In3In4
1ONOFFOFFOFF
2OFFONOFFOFF
3OFFOFFONOFF
4OFFOFFOFFON
Secuencia a 1 paso
byte const HORARIO[4] = {  0b1000,
                           0b0100,
                           0b0001,
                           0b1000};
                           
byte const ANTIH[4] ={     0b1000,
                           0b0001,
                           0b0010,
                           0b0100};

Secuencia a dos pasos

Se envían 4 pasos, en cada paso se activa dos bobinas.

PasoIn1In2In3In4
1ON ON OFFOFF
2OFFONON OFF
3OFFOFFONON
4 ON OFFOFFON
Secuencia a 2 pasos
byte const HORARIO[4] = {  0b1100,
                           0b0110,
                           0b0011,
                           0b1001};
                           
byte const ANTIH[4] ={     0b1001,
                           0b0011,
                           0b0110,
                           0b1100};

Secuencia a medio paso

Se envían 8 pasos, en cada paso se va alternando la activación de una bobina o dos bobinas.

PasoIn1In2In3In4
1ONOFFOFFOFF
2ONONOFFOFF
3OFFONOFFOFF
4 OFFONONOFF
5 OFF OFF ONOFF
6OFFOFFONON
7OFFOFFOFFON
8ONOFFOFFON
Secuencia a medio paso
byte const HORARIO[8] = { 0b1000,
                          0b1100,
                          0b0100,
                          0b0110,
                          0b0010,
                          0b0011,
                          0b0001,
                          0b1001};
                           
byte const ANTIH[8] ={     0b1001,
                           0b0001,
                           0b0011,
                           0b0010,
                           0b0110,
                           0b0100,
                           0b1100,
                           0b1000};

Como controlar motor paso a paso con PIC

Las señales de los pasos que habilita cada transistor pueden venir desde un circuito integrado o desde el microcontrolador PIC. Un vez el transistor se activa, este hará con que la bobina del motor vaya hacia negativo, permitiendo la circulación de corriente por dicha bobina.

La velocidad del motor paso a paso va depender de la frecuencia con que se envíen los pulsos a cada transistor. Es decir que entre menos tiempo esperamos entre pulso y pulso más rápido será el movimiento del motor. Sin embargo es importante destacar que el motor debe tener la capacidad de girar sin presentar muchas vibraciones, caso esto no suceda, se debe disminuir la velocidad del motor paso a paso.

Por últomo, la secuencia de pasos que hemos visto aquí puede ser programada de una segunda forma usando las instrucciones de rotación que vimos en la entrada de secuencia rítmica de leds. Si no has visto esa entrada, es una excelente oportunidad para que aprendas una instrucción básica pero muy poderosa: Ver 👉  Secuencia de Leds con PIC

Motor Paso a Paso Unipolar por PIC

Se pide 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 está activo, entonces el motor PaP va a girar a la derecha y si el suiche esta en inactivo, el motor gira a la izquierda.

Realizaremos la simulación del motor paso a paso en proteus y posteriormente realizaremos la implementación práctica.

Este ejemplo puede implementarse por medio de transistores así como vemos en el siguiente circuito:

Ejemplo motor paso a paso Proteus
Motor Paso a Paso Proteus

O 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 - Unipolar

Para la simulación del motor a pasos en proteus se deben buscar los siguientes componentes: MOTOR-STEPPER (motor unipolar paso a paso), Resistencia de 1k, SWITCH, L298, PIC16F887.

En el siguiente video el circuito implementado:

Codigo de Implementacion en PIC C Compiler:

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

#INCLUDE <16f887.h>
#fuses XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
#use delay(clock=4000000,crystal)//Crystal Externo 4MHz
#byte PORTB=6
#byte PORTC=7
#define SW PORTC,0

INT CONT;
byte const HORARIO[4] = {  0b1100,
                           0b0110,
                           0b0011,
                           0b1001};
                           
byte const ANTIH[4] ={     0b1001,
                           0b0011,
                           0b0110,
                           0b1100};
                           
void main()
{
   SET_TRIS_C(0B11111111);                //Configura el puerto C
   SET_TRIS_B(0B00000000);                //Configura el puerto B
   WHILE(TRUE)
   {
      IF(BIT_TEST(SW))                    // Pregunta si SW esta encendido
      {
         CONT=0;                          //Se pone Cont en cero
         WHILE((CONT&lt;4)&amp;&amp;(BIT_TEST(SW)))  //Mientras que cont sea menor a 4 
                                          //y SW=1(encendido)
         {
            PORTB=(HORARIO[CONT]);        //Envíe al puerto B la información //de
                                          //la tabla de horario
            DELAY_MS(100);                //Retardo de 100 milisegundos
            CONT++;                       //Incremente la variable cont
         }
      }
      ELSE                                //de lo contrario
      {
         CONT=0;                          // la variable cont =0
         WHILE((CONT&lt;4)&amp;&amp;(!BIT_TEST(SW))) //Mientras que cont sea menor a 4 
                                          //y SW=0(apagado)
         {
            PORTB=(ANTIH[CONT]);          //Envíe al puerto B la información de
                                          //la tabla de antihorario
            DELAY_MS(100);                //Retardo de 100 milisegundos
            CONT++;                       //Incremente la variable cont
         }
      }
   }
}

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

byte const HORARIO[4] = {  0b1000,
                           0b0100,
                           0b0010,
                           0b0001};
                           
byte const ANTIH[4] ={     0b0001,
                           0b0010,
                           0b0100,
                           0b1000};

Motor Paso a Paso Bipolar por PIC

Este mismo ejemplo, podemos aplicarlo a un MOTOR PASO A PASO BIPOLAR, 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.

Es decir que no se puede energizar una a una cada bobina como lo haciamos en el Unipolar.

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 los dos puente H internamente. Como por ejemplo, el integrado L293D ó L298 de la implementación del ejemplo del unipolar.
  • Nota 1: Puedes usar una tarjeta controladora de Motor Paso a Paso para controlar la potencia de tus motores
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 paso a paso BIPOLAR. Considerando que la simulación de este circuito te la dejé para que la descargues arriba donde está el código de implementación.

El componente del motor paso a paso bipolar en proteus se encuentra como MOTOR-BISTEPPER:

Motor Paso a Paso Bipolar con PIC

Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (70)

Hola a todos, resulta que tenía funcionado un pic 18F4550 y un motor paso paso y se me ha estropeado el pic y como perdí una partición del d. duro no tengo los archivos respectivos para proteus y el pic , y en la página no los encuentro si alguien me los podía facilitar gracias

Responder

Saludos Sergio, excelentes artículos que publicas, éste de los motores PAP está muy bueno, pero, sería interesante abordar el tema de las aceleraciones y desaceleraciones en este tipo de motores (perfiles de velocidad), pues la documentación en español es muy poca y la que se consigue en inglés es muy técnica y la mayoría hacen referencia al trabajo de David Austin sin una implementación en C para microcontroladores (https://www.avrfreaks.net/comment/931537#comment-931537), este enlace tiene algo de información util, que de seguro sabrás explicarnos. Gracias.

Responder

Hola Sergio!
Gracias por tu gran aporte, tengo una consulta. Deseo conectar mi motor con el driver TB6600 con mi pic 18f4550, podrías ayudarme con las conexiones del driver? sé como van conectadas las salidas al motor, pero no las entradas del pic hacia el driver

Te lo agradezco mucho

Responder

Buenas tarde Sergio, gracias por su explicación, muy bien explicado. Solo tengo una duda con el motor unipolar. En físico no me funciona, tengo los mismos materiales empleados en el video con el motor a pasos 288YJ-48 que se alimenta a 5 v dc y su respectivo driver Uln2003. Espero pueda ayudarme gracias.

Responder

Muy buen trabajo, gracias por el excelente aporte.

Responder

Muy buena explicación! Me encantó y aprendí a la perfección felicitaciones, tan solo tengo una duda, como se podría modificar el programa para poder ajustar la velocidad con un potenciómetro?

Responder

Hola Humberto, eso lo haces disminuyendo el retardo (delay_ms) eso está explicado en el último video, el de la implementación, dale un vistazo que allí modificamos la velocidad. Saludos!

Responder

Buenas noches! Sí eso me funciona a la perfección, tan solo que de una manera automática, o sea, sin tener que modificar el código del programa en cada ocasión, o sea debo tener un potenciómetro, y en base a este debe ir disminuyendo o aumentando la velocidad del motor, no se si me explique. Mucho cuidado y espero esté de buena salud!

Responder

Hola Humberto, puedes hacerlo de forma automática con un potenciometro sin problemas, que te varie los retardos de los delays. Para eso debes aplicar lo aprendido en la conversión ADC y con el valor leído del potenciometro puedes colocarlo dentro de los delays para variar la velocidad del motor. Recuerda validar esos datos para que te entreguen los valores mínimos y máximos necesarios para que el motor gire sin mucha vibración.

Responder

Ohhh muy bien cierto, no había caído en cuenta del ADC jajaja es muy buena opción, así lo haré muchas gracias!! Que pases buen día

Un cordial saludo Sergio desde Colombia, excelente su pagina y vídeos, muchísimas gracias por tu aporte. no puedo ver los códigos pero ya estoy suscrito en tu canal, agradezco mucho tu colaboración.

Responder

Hola Deybert, que tipo de error te está saliendo que no puedes ver los códigos? Compartiste en twitter o facebook?

Responder

que tal Sergio, agradezco de corazon que subas esta valiosa informacion para los que estudiamos, pero me podrias ayudar con como le diste el valor a CONT para que tuviera el valor de la matriz ? y para que se pudiera hacer la condicion de (CONT<4) y que sepa que tenia que contar la matriz ? gracias por tu ayuda !!!

Responder

CONT se inicializa en 0, y luego se va incrementando de uno en uno con CONT++, Como esta en un ciclo while el va a hacer lo de dentro del ciclo hasta que CONT<4 luego se sale y cuando sale, lo coloco en CONT=0 nuevamente. Este cont es solo un numero que varia de 0 a 3 y establece la posición dentro de los vectores HORARIO o ANTIHORARIO

Responder

Que tal Sergio, excelente página, en todo su contenido y no me refiero solo a la sección de PICS, a todo en general, realmente lo agradezco demasiado y mas que me esta sirviendo mucho para mi carrera.
Tengo una duda, los PICS, microcontroladores, tienen un cristal (oscilador) interno con el cual se puede trabajar sin conectar un externo? Si es que lo tienen, hay alguna diferencia en su trabajo, en el modo de operación si se usa el interno en lugar del externo?

Responder

Hola Fernando, gracias por el comentário. La verdad no hay diferencia, puedes usar el interno si así lo deseas. Solo que con el cristal interno no vas a conseguir altas frecuencias, lo máximo que llegarías son a los 8MHz. De igual forma, puedes darle un vistazo a la entrada de Servomotores donde hicimos el ejemplo con el cristal interno. Saludos.

Responder

Hola Sergio con el driver L293 cuanta corriente maxima puedo manejar por cada bobina ? te consulto porque tengo que usar un motor paso a paso muy grande, gracias

Responder

Amigo Sergio ya programe mi motor tal cual como esta en el vídeo pero gira para un solo lado.
No se que pasa ayúdame por favor.

Responder

Le has colocado el switche? Para que gire hacia el otro lado? Estas usando los transistores o un driver de potencia? Tienes que darme más información para poder ayudarte. Saludos.

Responder

Un solo switche para los dos lados, y estoy usando los transistores.

Responder

Habria que revisar el circuito, si llegan los 5v al switche cuando esta activo y si pasa a cero voltios cuando está desactivo. Tambien los transistores, pero si te gira para un lado, creo yo es más en el switche o en la programación. Éxitos.

Responder

Gracias amigo Sergio.

como se podria poner un codigo para dos motores a pasos con 4 ldr

Responder

Hola Raul, pues sería aplicar lo visto en esta entrada y programar 2 motores. Para el LDR debes hacer una lectura analogo digital (Puede ver la entrada dando click aqui). Saludos.

Responder

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

Responder

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.

Responder

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

Responder

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.

Responder

Vale Sergio muchas gracias

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 ]

Responder

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

Responder

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

Responder

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.

Responder

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.

Responder

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 .____.

Responder

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).

Responder

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 ?

pueden ser electroliticos.

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

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

Responder

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.

Responder

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

Responder

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.

Responder

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

Responder

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

Responder

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?

Responder

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

Responder

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

Responder

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

Responder

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

Responder

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.

Responder

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

Responder

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

Responder

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??

Responder

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.

Responder

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

Responder

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

Responder

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.

Responder

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

Responder

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.

Responder

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

Responder

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.

Responder

muchas gracias amigo en serio me salvas

Responder

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.

Responder

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.

Responder

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.

Responder

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.

Responder

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.

Responder

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

Responder

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.

#INCLUDE <18f4550.h>
#fuses XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP,WRT
#use delay(clock=4000000)
#byte PORTA=0xF80
#byte PORTB=0xF81
#byte PORTC=0xF82
#byte PORTD=0xF83
#byte PORTE=0xF84
#define SW PORTC,0
Responder