# control de motores paso a paso



## johan16 (May 21, 2010)

El proyecto en el que estoy trabajando es una maquina cortadora de cinta para marquillas como las de plastico o tela que ven en las camisetas, el principio de la maquina debe ser así; un motor1 jala la cinta ya impresa a una medida puede ser unos 35mm por ejemplo; en ese momento revisa un sensor que ya he estado revisando y puede ser como el de robot seguirdor de linea que censa una línea guia y da la orden de cortar lo cual lo hace otro motor2 que siempre tiene que dar una vuelta completa para bajar la cuchilla y vuelve a repetirse el ciclo.
El motor1 que jala la cinta tiene que ser variable, tanto la medida de arrastre como  la velocidad. 
No sé si conectarla al computador para poder modificar el largo de la cinta o por botones uno que aumente de a milímetro y el otro que reduzca la medida, en una pequeña consola se pudiera como en un displey.

Ya tengo el driver de los motores paso a paso, los moteres pero aun no me e decidido que micro utilizar o si me aconsejan conectarla al compuador que interface.
No sé si me hago entender específicamente.
les agradezco en lo que me puedan ayudar.


----------



## tecnogirl (May 21, 2010)

Puedes enviar la referencia y detalles tecnicos del driver y los PaP o fotos ?
Sobre el motor1, qué rango de velocidad necesitas y que mecanismo de arrastre tiene asociado para halar la cinta ?

Si este es un proyecto experimental puedes empezar apoyandote en la PC y luego migras el control a un microcontrolador.

Saludos


----------



## johan16 (May 21, 2010)

Gracias por tu pronta ayuda.

Mira el driver para el motor es el L297 y L298 y el motor es el mitsumi m42sp-6nka lf bipolar de una impresora que recicle y la velocida que nesecito es que cada movimiento que de sea de unos 40 milisegundos en el motor1 y la vuelta que da el motor2 sea lo mas rapidoposible para que no giren al mismo tiempo.de todas formas voy a subir unas imagenes de como va el mecanismo de arrastre, los circuitos de los drivers y una idea mas clara sobre la maquina.

Gracias.

Hola tecnogirl

Mira adjunto envio este diagrama de la maquina haber si me puedo explicar mejor y el circuito del driver para que lo puedas ver.

Gracias


----------



## tecnogirl (May 21, 2010)

Ok. Aqui en FE se ha consultado varias veces sobre ese driver de PaP: https://www.forosdeelectronica.com/search.php?cx=partner-pub-2315955773772045%3Ajebhos-oqik&cof=FORID%3A10&ie=ISO-8859-1&q=L297&sa=Buscar&siteurl=www.forosdeelectronica.com%2Ff26%2Fcontrol-motores-paso-paso-37083%2F#812

Saludos


----------



## johan16 (May 21, 2010)

ok eso ya le tengo resuelto y tu me recomiendas que lo haga inicialmente por el pc y eso es lo que no se como se hace me podrias ayudar con eso.


----------



## tecnogirl (May 24, 2010)

Con el puerto paralelo, revisa los siguientes temas:
https://www.forosdeelectronica.com/search.php?cx=partner-pub-2315955773772045%3Ajebhos-oqik&cof=FORID%3A10&ie=ISO-8859-1&q=motor+paso+puerto+paralelo&siteurl=www.forosdeelectronica.com%2Ff26%2Fcontrol-motores-paso-paso-37083%2F#876

Con el puerto paralelo se logra un "driver PaP" mas sencillo y de paso permite integrar la señal optica detectora de la marca en la banda de etiquetas.
Saludos

Saludos


----------



## exp8 (Sep 16, 2017)

Buenas. Quisiera saber si alguien sabe como poner en una posición de referencia dos motores paso a paso que son controlado por un PIC-16F877A. Los motores giran en sentido horario (numero uno en puerto c) y en sentido antihorario (numero dos en puerto c), pero al momento en que se ponga en numero cero o cualquier otro numero(default) en el puerto c (que tiene conectados unos interruptores en sus pines) los motores deben volver a una posición de referencia. Los motores son de 100 pasos y el programa que llevo hasta ahora es el siguiente:

```
#include "16F877A.h"
#fuses XT,PUT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOCPD,NOWRT,NODEBUG
#use delay(clock=4000000)
   void a();
   void b();
void main()
   {
   unsigned int8 z=0;
   while(1)
   {
   z=input_C();
   switch(z)
   {
   case 0: output_B(0x00);break;
   case 1:   a();break; //ambos motores en sentido reloj//
   case 2:   b();break; //ambos motores en sentido antireloj//
   default: output_D(0x00);
   }
   }
   }

   void a()//1 ambos motores en sentido reloj//
   {
   output_B(0x88);
   delay_ms(200);
   output_B(0x44);
   delay_ms(200);
   output_B(0x22);
   delay_ms(200);
   output_B(0x11);
   delay_ms(200);
   }

   void b()//10 ambos motores en sentido antireloj//
   {
   output_B(0b00010001);
   delay_ms(200);
   output_B(0b00100010);
   delay_ms(200);
   output_B(0b01000100);
   delay_ms(200);
   output_B(0b10001000);
   delay_ms(200);
   }
```


----------



## Saint_ (Sep 16, 2017)

La idea es que tengas un contador de pasos del motor así sabrás siempre cuantos pasos deberás retroceder   cuando quieras ir a la posición 0


----------



## TRILO-BYTE (Sep 17, 2017)

no me gusta nada el programa mucho delay y poco control.
yo lo que haria seria meter todo en un array y manejarlo como barrido de caracteres algo mas o menos asi:
pondre valores como los que pusiste

char valor[4]={0x88,0x44,0x22,0x11};

ya una vez cargado el array podemos hacer un barrido a la izquierda o a la derecha lo que nos permitiria mover el motor a la izquierda o a la derecha 

ejemplo:

int i;

for(i=0;i>=4;i++) 

{
output_B(*valor[i]*); 
   delay_ms(200); 
}

con eso moveriamos el motor a un lado ahora para moverlo un determinado numero de pasos

seria agregando otro for anidando el for anterior ahora contando los pasos

int pasos;
for( pasos=0; pasos <=100; pasos++)
{
int i;

for(i=0; i<=4;i++) 

{
   output_B(*valor[i]*); 
   delay_ms(200); 
}
}


para mover el motor al lado contrario es algo tan simple como esto:

int i;

for(i=3 ; i==0 ; i--) 

{
output_B(*valor[i]*); 
   delay_ms(200); 
}

recuerda que la condicion queda en 3 por que la maquina cuenta 0 1 2 3 que son los 4 elementos del array
anterior mente puse i<=4 por que cuenta 0 1 2 3 cuando llega a 4 para y no cuenta el elemento vacio 4


----------

