control de motores paso a paso

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

moz-screenshot.png
 

Adjuntos

  • Grafico maquina1.jpg
    Grafico maquina1.jpg
    73.2 KB · Visitas: 116
  • Drivers motor paso a paso unipolar.jpg
    Drivers motor paso a paso unipolar.jpg
    77.3 KB · Visitas: 139
Última edición:
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:
PHP:
#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);
   }
 
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
 
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
 
Última edición:
Atrás
Arriba