lunes, 30 de octubre de 2023

Motor paso a paso PL15S-020

El motor paso a paso Motor MMB PL15S-020-YTE7 (TA2905F) es un motor bipolar de cuatro hilos con eje extendido. Se fabricó en Tailandia y el que tengo se instaló en un lector de CDs el 20 de septiembre de 2002. En la actualidad se puede encontrar el motor paso a paso con eje extendido PL15S-020-PNA9 a un precio de 2,90 euros. Tiene una resolución de 20 pasos por revolución (18 grados). Alimentado por 5,0 V, consume 500 mA por bobina. El par es de 0,25 kg*cm (0,02 Nm). Las dimensiones son 75 x 15 mm. 


La secuencia de activación en un motor PL15S-020 es la siguiente.

Para accionar el motor con Arduino y un driver de motores L298N he utilizado el siguiente programa de ArduinoBlocks. En el driver tanto la entrada de 5, como la de 12 voltios están conectadas a los 5 voltios de la placa de Arduino. En el driver los pines 1 y 2 de Arduino están conectados a IN1 e IN2 que controlan una de las bobinas y el 3 y 4 de Arduino a IN3 e IN4 que controlan la otra bobina del motor paso a paso.



Este es el código que proporciona ArduinoBlocks correspondiente a los bloques anteriores que cargado desde el IDE de Arduino funciona igualmente.

void fnc_dynamic_digitalWrite(int _pin, int _e){
  pinMode(_pin,OUTPUT);
  digitalWrite(_pin,_e);
}

void setup()
{


}


void loop()
{

    for (int count = 0; count < 40; count++) {
      fnc_dynamic_digitalWrite(1, LOW);
      fnc_dynamic_digitalWrite(2, HIGH);
      fnc_dynamic_digitalWrite(3, HIGH);
      fnc_dynamic_digitalWrite(4, LOW);
      delay(10);
      fnc_dynamic_digitalWrite(1, LOW);
      fnc_dynamic_digitalWrite(2, HIGH);
      fnc_dynamic_digitalWrite(3, LOW);
      fnc_dynamic_digitalWrite(4, HIGH);
      delay(10);
      fnc_dynamic_digitalWrite(1, HIGH);
      fnc_dynamic_digitalWrite(2, LOW);
      fnc_dynamic_digitalWrite(3, LOW);
      fnc_dynamic_digitalWrite(4, HIGH);
      delay(10);
      fnc_dynamic_digitalWrite(1, HIGH);
      fnc_dynamic_digitalWrite(2, LOW);
      fnc_dynamic_digitalWrite(3, HIGH);
      fnc_dynamic_digitalWrite(4, LOW);
      delay(10);
    }
    for (int count = 0; count < 40; count++) {
      fnc_dynamic_digitalWrite(1, HIGH);
      fnc_dynamic_digitalWrite(2, LOW);
      fnc_dynamic_digitalWrite(3, HIGH);
      fnc_dynamic_digitalWrite(4, LOW);
      delay(10);
      fnc_dynamic_digitalWrite(1, HIGH);
      fnc_dynamic_digitalWrite(2, LOW);
      fnc_dynamic_digitalWrite(3, LOW);
      fnc_dynamic_digitalWrite(4, HIGH);
      delay(10);
      fnc_dynamic_digitalWrite(1, LOW);
      fnc_dynamic_digitalWrite(2, HIGH);
      fnc_dynamic_digitalWrite(3, LOW);
      fnc_dynamic_digitalWrite(4, HIGH);
      delay(10);
      fnc_dynamic_digitalWrite(1, LOW);
      fnc_dynamic_digitalWrite(2, HIGH);
      fnc_dynamic_digitalWrite(3, HIGH);
      fnc_dynamic_digitalWrite(4, LOW);
      delay(10);
    }

}

De esta manera también funciona.

void setup()
{
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
}


void loop()
{

    for (int count = 0; count < 40; count++) {
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      delay(10);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      delay(10);
      digitalWrite(1, HIGH);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      delay(10);
      digitalWrite(1, HIGH);
      digitalWrite(2, LOW);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      delay(10);
    }
    for (int count = 0; count < 40; count++) {
      digitalWrite(1, HIGH);
      digitalWrite(2, LOW);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      delay(10);
      digitalWrite(1, HIGH);
      digitalWrite(2, LOW);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      delay(10);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, LOW);
      digitalWrite(4, HIGH);
      delay(10);
      digitalWrite(1, LOW);
      digitalWrite(2, HIGH);
      digitalWrite(3, HIGH);
      digitalWrite(4, LOW);
      delay(10);
    }

}

El montaje de este proyecto es el siguiente.




Programando con el IDE de Arduino se puede conseguir algo similar con este programa.

#include <Stepper.h>

const int PasosVuelta = 20;  // número de pasos por vuelta

Stepper myStepper(PasosVuelta, 1,2,3,4);  // crea un motor paso a paso llamado 'myStepper' en los pines 1 a 4

void setup()

{

myStepper.setSpeed(60); // establece la velocidad en 60rpm

}

void loop()

{

// gira 100 pasos

  myStepper.step(100);

  delay(500);

   // gira 100 pasos en sentido contrario

  myStepper.step(-100);

  delay(500); 

}

Utilizando ArduinoBlocs y el bloque específico para motores paso a paso quedaría algo así.


Es importante observar que en el programa anterior los pines 2 y 3 están intercambiados respecto al primer programa de bloques o al realizado en el IDE de Arduino. Si no se hace este cambio el motor se mueve ligeramente a detrás y adelante pero no se desplaza.

Aquí podemos encontrar más información de como accionar este motor  MMB PL15S-020-YTE7 (TA2905F) con Arduino, con el programa listado.



























No hay comentarios: