Actividad 17

 

Control de un motor paso a paso

En esta actividad vamos a realizar el control de un motor paso a paso, concretamente el motor derecho conectado a los pines D2, D3, D4 y D5 para hacerlo avanzar 10 cm hacia delante y 10 cm hacia atrás utilizando la secuencia de control explicada anteriormente.

/*
  Ejemplo [UnMotorPasoAPaso.ino] para comprobar el funcionamiento de los
  Motores paso a paso en el Escornabot
*/

// Vamos a utilizar, por ejemplo, el motor derecho
// Pines de control del motor derecho
#define IN1_drcha 2
#define IN2_drcha 3
#define IN3_drcha 4
#define IN4_drcha 5

/*
  Debemos calcular los pasos que tiene que dar el motor para desplazarse
  10 cm. Hay que mencionar dos datos importantes:
      --> Para dar una vuelta son necesarios 512 pasos
      --> El perímetro de la rueda son 23.56 cm
  Por lo que para allar los pasos necesarios debemos hacer la siguiente
  conversión:

            1 vuelta     512 pasos
  10 cm x ---------- x ------------ = 217 pasos para recorrer 10 cm.
            23.56 cm      1 vuelta
*/

int numero_pasos_para_avance = round((10 * 512) / 23.56);

// Rutina de Setup
void setup() {

    // Inicializamos la comunicación Serial
    Serial.begin(9600);

    // Se indican los pines de los motores como salidas
    pinMode(IN1_drcha, OUTPUT);
    pinMode(IN2_drcha, OUTPUT);
    pinMode(IN3_drcha, OUTPUT);
    pinMode(IN4_drcha, OUTPUT);

}

void loop() {

    // Matriz con la secuencia de excitacion de las bobinas
    int paso[8][4] = {
        {1000},
        {1100},
        {0100},
        {0110},
        {0010},
        {0011},
        {0001},
        {1001}
    };

    // Hacemos que avance recorriendo la secuencia hacia delante
    for (int j = 0; j < numero_pasos_para_avance; j++) {
        for (int i = 0; i < 8; i++) {
            digitalWrite(IN1_drcha, paso[i][0]);
            digitalWrite(IN2_drcha, paso[i][1]);
            digitalWrite(IN3_drcha, paso[i][2]);
            digitalWrite(IN4_drcha, paso[i][3]);
            delay(1);
        }
    }

    // Hacemos que retroceda recorriendo la secuencia hacia atrás
    for (int j = 0; j < numero_pasos_para_avance; j++) {
        for (int i = 0; i < 8; i++) {
            digitalWrite(IN1_drcha, paso[i][3]);
            digitalWrite(IN2_drcha, paso[i][2]);
            digitalWrite(IN3_drcha, paso[i][1]);
            digitalWrite(IN4_drcha, paso[i][0]);
            delay(1);
        }
    }

    delay(1000);

}
Vistas
30 Número de vistas
30 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.