Motor paso a paso controlado por bluetooth en cnc shield

Saludos a todos
Tengo un proyecto que consiste en el control de velocidad de un motor paso a paso nema 17 mediante una aplicación vía bluetooth, ha estado funcionando muy bien hasta que cambié el motor por otro nema 17 aún más potente, ahora en la aplicación el motor varía todas las velocidades menos 50 rpm, coge velocidades más bajas y más altas pero solo con esa presenta problemas

Configuré la corriente para el nuevo motor (estoy usando un shield cnc con el driver a4988) el cálculo queda así: 1.8A/2=0.9v

El último motor fue 42HD4027-01 y el nuevo es 17hs8401b de un solo eje

si aumento el voltaje del 8825 llegará a 50 rpm pero el motor y el driver se calientan tanto que no quiero dañarlos.

#include <SoftwareSerial.h>
#include <AccelStepper.h>

// Definimos los pines utilizados
const int pinStep = 2;  // esta configurado en x 
const int pinDir = 5;
const int pinEnable = 8;
// Creamos un objeto de tipo AccelStepper
AccelStepper stepper = AccelStepper(1, pinStep, pinDir);
SoftwareSerial BTSerial(10, 11); // Creamos un objeto SoftwareSerial para la comunicación Bluetooth
float rpm = 0;
const int dir = -1; // 1 para CW, -1 para CCW
void setup() {
  // Configuramos los pines
  pinMode(pinEnable, OUTPUT);
  digitalWrite(pinEnable, LOW); // Habilitamos el driver
  
  // Configuramos el objeto AccelStepper
  stepper.setMaxSpeed(2000); // Velocidad máxima en RPM
  BTSerial.begin(38400); // Iniciamos la comunicación Bluetooth
}

void loop() {
char c;
  if(BTSerial.available()) {
    
    c = BTSerial.read();
    if (c == '1') {  
      rpm = 50;
    }
    if (c == '2') {  
      rpm = 100;
    }
    if (c == '3') {  
      rpm = 150;
    }
    if (c == '4') {  
      rpm = 200;
    }
    if (c == '5') {  
      rpm = 250;
    }
    if (c == '6') {  
      rpm = 300;
    }
    if (c == '7') {  
      rpm = 350;
    }
    if (c == '8') {  
      rpm = 0;
    }
    if (c == '9') {  
      rpm = 10;
    }
    if (c == 'A') {  
      rpm = 20;
    }
    if (c == 'B') {  
      rpm = 30;
    }
    if (c == 'C') {  
      rpm = 40;
    }
          
    stepper.setSpeed((dir * (float) rpm / 60.0) * 200.0);
  }
  stepper.runSpeed();
}

Es una situacion bastante extraña, que creen que deba hacer? Realmente es importante mantener los 50 RPM


image

Solo tiro una idea considerando lo que dices que el a4988 se calienta
Porque no usas un reemplazo mas moderno al A4988.
El TMC2209 es mejor driver.

Permite mas micropasos asi que podrias lograr comportamiento mas suave, tiene menor Rds
aca puedes compararlos
https://programarfacil.com/blog/arduino-blog/a4988-drv8825-tmc2209/

Veo que la corriente por fase esta en el limite de lo que te he sugerido. Revisa. Evidentemente ese es el problema. La corriente x fase.
1,7A
Datos de tu motor nuevo

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.