Control Motores paso a paso con ESP32

Después de la experiencia adquirida con GRBL y el estudio con arduino y los drivers TMC2208/09,nos encontramos con las virtudes del Esp32 y sus caracteristicas PWM, gracias a las cuales podremos controlar fácilmente hasta tres motores paso a paso simultáneamente con velocidades diferentes.

1 – DISEÑO MODULO PARA PRUEBA

En estas imagenes se puede ver un pequeño modulo que usa hasta tres drivers y seis salidas para motor s (2 motores paralelo x3).

H1B//H1C- H2B//H2C- H3B//H3C

Tres entradas (step-dir-enable)

H1A – H1B – H1C

Dos entradas de alimentación en paralelo (GND -VDD-VM)

H1 – H2

Tambien lleva tres leds Green-Red-Yellow conectados en paralelo con la señal ENA .Cuando los motores estan deshabilitados encenderan con el nivel HIGH de su entrada y se apagaran cuando los motores se activen con su señal ENA=LOW.

Ademas estos indicadores sirven para diferenciar los motores en el codigo.

Las entradas de nivel y la alimentacion VDD funcionan tanto a 3.3 o 5V, asi que podremos utiliar arduínos o dispositivos como ESP32.

VM es la limentación que podremos utilizar entre 5 y 12V(hasta15) para dar mas potencia a los motores.


TEST1:

COMPROBAR LAS CARACTERISTICAS DE CONTROL DE FRECUENCIA DEL ESP32 Y SUS PWM.

NEMA 17 (17HS13-0404S), 12V,,0.4A

delayFREQrpmVref=1 a 2 v
18,75 mseg53,3 Hz1350mA
1.875 mseg533 Hz10340mA
937microseg10666 Hz20320mA
187 microseg5.33 KHz100180mA
93.75 microseg10,66 khz200100mA

En este codigo ,probado con el montaje expuesto, compruebo ,conectando una Nema 17HS13·-0404S como va a ir aumentando las revoluciones del motor de forma suave o como definamos con la función “for” de 53 HZ(1 rpm) hasta 10 KHZ (algo menos de 200 rpm y posteriormente desacelerando tambien con suavidad.

Recordemos que para obtener la frecuencia que hará que gire con una velocidad de 1rpm hay que dividir el numero de micropasos (3200) entre 60. 53,3 hz será la referencia para obtener la velocidad en rpm.Asi,con una Freq aplicada de 5330 Hz, V=5330/53,3=100 rpm

Comprobar según el cuadro,la relacion entre la frq y las revoluciones,asi como el consumo que generará una curva ascendente-descendente entre 60mA a 350mA , siempre que alimentemos VM con 12V.

const int ledPin = 2;//entrada STEP
int dutyCycle = 127;// no influye para nuestro proposito
// setting PWM properties
int freq = 50;// se declara una variable entera de valor inicial de 50 Hz
const int ledChannel = 0;// eleccion canal 0
const int resolution = 8;// Con esta resolución tendrán respuesta buena tanto bajas como altas frecuencias

void setup() {
  // configure LED PWM functionalitites
  ledcSetup(ledChannel, freq, resolution);
  pinMode(4, OUTPUT);//entrada ENA
  pinMode(0, OUTPUT);//entrada DIR
  digitalWrite(4, HIGH);
  digitalWrite(0, HIGH);

  // attach the channel to the GPIO to be controlled
  ledcAttachPin(ledPin, ledChannel);
}

void loop() {
//PROCESO DE ACELERACIÓN
  digitalWrite(4, LOW);//entrada Enable se activa con LOW
  //digitalWrite(0, LOW);// se podrá cambiar la direccion de giro
  for (freq = 53; freq <= 10000; freq = freq + 100) {//INCREMENTO DE 100 EN 100 hZ)
    ledcSetup(ledChannel, freq, resolution);
    ledcWrite(ledChannel, dutyCycle);
    delay(50);


  }
  //PROCESO DE DESACELERACIÓN
  
   digitalWrite(4, LOW);
  for (freq = 10000; freq >= 53; freq = freq - 100) {
    ledcSetup(ledChannel, freq, resolution);
    ledcWrite(ledChannel, dutyCycle);
    delay(50);
  }

}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Translate »