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
delay | FREQ | rpm | Vref=1 a 2 v |
18,75 mseg | 53,3 Hz | 1 | 350mA |
1.875 mseg | 533 Hz | 10 | 340mA |
937microseg | 10666 Hz | 20 | 320mA |
187 microseg | 5.33 KHz | 100 | 180mA |
93.75 microseg | 10,66 khz | 200 | 100mA |
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);
}
}