Autor Tema: Motor paso a paso  (Leído 3272 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Motor paso a paso
« en: 24 de Agosto de 2006, 21:56:37 »
Hola:

Estoy tratando de mover un motor paso a paso de una disketera de 5 1/4.
Hice un codigo para utilizar tres botones B0 B1 y B2. B0 cambia el sentido de giro y los otros botones son para incrementar la velocidad.
Funciona bien hasta una determinada volocidad, mientras el paso es muy lento funciona pero cuando empiezo a subir la velocidad pasa de un paso rapido a un giro del doble de velocidad y si trato de acelerar mas se frena como si tuviese un limite.
Me podrian ver el codigo para ver si estoy haciendo bien las cosas o me estoy equivocando en algo.
Muchas gracias.

#include <16f84A.h>
#include <string.h>

#fuses XT, NOWDT

#use delay(clock=4000000)

int8 Pasos_1 = 2, x = 0;
int16 TIEMPO = 100;
char Giro = 'D';
int8 Boton;

#INT_RTCC
void Reloj() {
   if(x==0) {
      if(GIRO=='D') {
         if (Pasos_1 == 1) {
            output_high(PIN_A0);
            output_low(PIN_A1);
            output_low(PIN_A2);
            output_high(PIN_A3);
         } else if(Pasos_1 == 2) {
            output_low(PIN_A0);
            output_low(PIN_A1);
            output_high(PIN_A2);
            output_high(PIN_A3);
         } else if(Pasos_1 == 3) {
            output_low(PIN_A0);
            output_high(PIN_A1);
            output_high(PIN_A2);
            output_low(PIN_A3);
         } else if(Pasos_1 == 4) {
            output_high(PIN_A0);
            output_high(PIN_A1);
            output_low(PIN_A2);
            output_low(PIN_A3);
            Pasos_1 = 0;
         }
      } else {
         if (Pasos_1 == 1) {
            output_high(PIN_A0);
            output_high(PIN_A1);
            output_low(PIN_A2);
            output_low(PIN_A3);
         } else if(Pasos_1 == 2) {
            output_low(PIN_A0);
            output_high(PIN_A1);
            output_high(PIN_A2);
            output_low(PIN_A3);
         } else if(Pasos_1 == 3) {
            output_low(PIN_A0);
            output_low(PIN_A1);
            output_high(PIN_A2);
            output_high(PIN_A3);
         } else if(Pasos_1 == 4) {
            output_high(PIN_A0);
            output_low(PIN_A1);
            output_low(PIN_A2);
            output_high(PIN_A3);
            Pasos_1 = 0;
         }
      }
   }
   if(x++ == TIEMPO) {
      x = 0;
      Pasos_1++;
   }

}

void main(void) {
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_RTCC);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_8);

   SET_TRIS_A(0x00);

   while(true) {
      do {
         if(!input(PIN_B0)) {
            Boton = 1;
         }
         if(!input(PIN_B1)) {
            Boton = 2;
         }
         if(!input(PIN_B2)) {
            Boton = 3;
         }
         restart_wdt();      // Puesta a cero del temporizador watchdog
      }while(!input(PIN_B0)||!input(PIN_B1)||!input(PIN_B2));
      delay_ms(30);         // Antirebotes
     
      if(Boton == 1) {
            if(Giro == 'I')
               Giro = 'D';
            else
               Giro = 'I';
      }else if(Boton == 2) {
            Tiempo += 5;
      }else if(Boton == 3) {
            Tiempo -= 5;
      }

      do{
         restart_wdt();      // Puesta a cero del temporizador watchdog
      }while(input(PIN_B0)&&input(PIN_B1)&&input(PIN_B2));
      delay_ms(30);         // Antirebotes
   }
}

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Motor paso a paso
« Respuesta #1 en: 26 de Agosto de 2006, 09:23:28 »
NO se mucho del tema pero leí por ahí que cuando estos motores se pasan de vueltas hacen como un tembleque... no se a que velocidad llegas pero ten en cuenta que los motores de disquetera van a una velocidad irrisoria... puede que no de pa mas.


1 saludo

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Motor paso a paso
« Respuesta #2 en: 26 de Agosto de 2006, 12:01:42 »
Ya esta, puede hacer como maximo 4ms por paso. uno poco mas de un giro por segundo aunque gira a 300RPM osea 5 vueltas por segundo. para eso cada paso deberia ser de 0.25ms y en C no se como.
El delay trabaja con numeros enteros y yo deberia hacer un delay de 0.25. Sabes como se hace

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Motor paso a paso
« Respuesta #3 en: 26 de Agosto de 2006, 12:10:28 »
Hola pablo, si no tengo mal entendido una disquetera no posee un motor de pasos, si no que es un brushless, por lo tanto no son parecidos.

Para hacer un delay menor a los ms creo que se usa el delay_us que sería para microsegundos.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Motor paso a paso
« Respuesta #4 en: 26 de Agosto de 2006, 12:18:02 »
La verdad no tengo ni idea pero parece un motor paso a paso y lo estoy haciendo funcionar como si lo fuera, no se como es el otro motor que mencionas.
Ahora esta funiconando bien, puedo cambiar velocidad por medio de dos botones y cambiar sentido de giro por otro.
Prengunta tonta no me mates, 0.25 ms cuantos microsegundos son?

Gracias.

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Motor paso a paso
« Respuesta #5 en: 26 de Agosto de 2006, 12:23:02 »
Hola pablo, si el motor posee solo 3 cables de conexion seguro es un motor brushless, si posee 4 o más es uno de pasos.

Un milisegundo es 0.001 seg
Un microsegundo  0.000001 seg

Por lo tanto 1000 microsegundos es 1 milisegundo, y 1000 milisegundos es 1 segundo.

En definitiva, 1 micro segudo es la milesima parte de un milisegundo.

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado pablo

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 253
Re: Motor paso a paso
« Respuesta #6 en: 26 de Agosto de 2006, 12:26:54 »
 :shock: Son un capo, descansa un poco charly te hago un pregunta a la noche me contestas, te pregunto a la mañana y tambien.
Muchisimas gracias de nuevo.

Ah tiene 6 cables.

Un abrazo
Pablo

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: Motor paso a paso
« Respuesta #7 en: 26 de Agosto de 2006, 12:59:10 »
Hola pablo, entonces un PaP unipolar, y te aseguro que algo descanso,  :D  :D  :D

Un saludo.

Atte. CARLOS.
La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.


 

anything