miércoles, 27 de noviembre de 2019

Cómo Probar Motores Paso a Paso con Arduino y sin Ariduino (con 555)


Código Fuente:

const int dirPin = 8;
const int stepPin = 9;
 
unsigned long pasosvuelta;
float grados;
unsigned long rpms;
unsigned long pasos;
unsigned long retardo;
String mensaje = "";  

//-----------------SETUP------------------------------ 
void setup() {
   pinMode(dirPin, OUTPUT);   //coloco el Pin de Dirección como salida
   pinMode(stepPin, OUTPUT);  //coloco el Pin de Step como salida
   Serial.begin(115200);      //inicio la comunicación serial a 115200 baud
   pasosporvuelta();          //llamo a la función para definir los pasos por vuelta.
}

//-----------------LOOP------------------------------ 
void loop() {
  sentido();    //llamo a la función para definir el sentido de giro.
  giro();       //llamo a la función para definir los grados que debe girar el motor.
  velocidad();  //llamo a la función para definir la velocidad de giro en RPM.
   
  pasos = (grados/360)*pasosvuelta;       //calculo la cantidad de pasos que tengo que enviar. 
  Serial.print(pasos);
  Serial.print(" pasos a ");
  retardo = 30000000/(rpms*pasosvuelta);  //calculo el retardo según las RPM indicadas.
  Serial.print(retardo);
  Serial.print(" uSeg\n");
  Serial.println("---------------------------------------");
   
  for (int x = 0; x < pasos; x++) {      //envio los pasos calculados con el retardo calculado
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(retardo);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(retardo);
  }
}

//-----------------FUNCIONES-------------------------- 
void pasosporvuelta() {          
  Serial.print("¿Pasos por vuelta? (pasos del motor * micropasos) ");
  while (Serial.available() == 0 ) {} //queda esperando hasta recibir un mensaje
  mensaje = Serial.readString();
  pasosvuelta = mensaje.toInt();      //convierte en mensaje recibido en un entero
  if (pasosvuelta == 0) {             //si no es un número envía ERROR y vuelve a llamar a la función
    Serial.print("ERROR\n");
    pasosporvuelta();
  }
  else {                              //si es un número nos envia un mensaje de OK
    Serial.print(pasosvuelta);
    Serial.print(" OK\n");
  }
}

void sentido() {
  Serial.print("¿Sentido de giro? (0 horario / 1 antihorario) ");
  while (Serial.available() == 0 ) {}
  mensaje = Serial.readString();
  if (mensaje == "0\n") {
    Serial.print("horario OK\n");
    digitalWrite(dirPin, HIGH);
  }
  else if (mensaje == "1\n") {
    Serial.print("antihorario OK\n");
    digitalWrite(dirPin, LOW);       
  }
  else {
    Serial.print("ERROR\n");
    sentido();     
  }
}

void giro() {
  Serial.print("¿Grados? ");
  while (Serial.available() == 0 ) {}
  mensaje = Serial.readString();
  grados = mensaje.toFloat();
  if (pasosvuelta == 0) {
    Serial.print("ERROR\n");
    giro();
  }
  else {
    Serial.print(grados);
    Serial.print(" OK\n");
  }
}

void velocidad() {
  Serial.print("¿Velocidad de giro? (RPM) ");
  while (Serial.available() == 0 ) {}
  mensaje = Serial.readString();
  rpms = mensaje.toInt();
  if (rpms == 0) {
    Serial.print("ERROR\n");
    velocidad();
  }
  else {
    Serial.print(rpms);
    Serial.print(" OK\n");
  }
}




2 comentarios:

  1. Hola, estoy siguiendo tu tutorial, tengo un motor de 23 volts y estoy tratando de hacer funcionar mi primer motor ya que nunca use uno, tengo varios nema sacados de fotocopiadoras pero el problema es que al no ser de 12 volts tengo que alimentarlos distinto, por eso te envio el archivo de fritzing a ver is esta bien hecho antes de quemar todo aqui esta compartido el archivo http://fritzing.org/projects/stepper-motor-24volts-and-driver-drv8825 gracias ojalá puedas ayudarme

    ResponderEliminar