Internette ihtiyacıma uygun bir örnek bulamadım. Deneyerek çalışan kodu paylaştım.
Not : Motoru yük altında denemedim.
Arduino IDE 1.8.19, BTS7960B, ElectroCraft DC Motor (E240-026-0888, max 60V besleme, 1,69 Nm,), ESP32 Wroom 32D
// ESP32 3.3V ile BTS ise 5V ile çalışıyor. level shifter kullandım.
#define RPWM 32 // 5v <-> 3.3V çevirici kullan.
#define LPWM 33 // 5v <-> 3.3V çevirici kullan.
#define R_EN 25 // 5v <-> 3.3V çevirici kullan. R_EN ve L_EN ortak pin
void setup() {
// DC Motor
pinMode(RPWM, OUTPUT); // 32
pinMode(LPWM, OUTPUT); // 33
pinMode(R_EN, OUTPUT); // 25
digitalWrite(RPWM, LOW); // Motor OFF
digitalWrite(LPWM, LOW); // Motor OFF
digitalWrite(R_EN, LOW); // Enable OFF, R_EN ve L_EN aynı pine bağlandı.
// CW dönüş için RPWM HIGH, LPWM LOW olduğu için sadece RPWM pwm tanımladım.
// Eğer CCW dönüş gerekiyor ise bir kanal daha tanımlayıp ilgili pin ile ilişkilendirilebilir.
// pwm kanalına fr ve çözünürlük ata
ledcSetup(pwmChannel_0, 1000, 10); // 1000 Hz, 10 bit = 1024
// digital pine pwm kanalını ata
ledcAttachPin(RPWM, pwmChannel_0);
} // Setup
void loop() {
MotorAcKapa(1);
delay(5000);
MotorAcKapa(0);
delay(5000);
} // Loop
void MotorAcKapa(int Durum) { // 0 : OFF, 1 : ON
switch (Durum) {
case 1 : // Çalış
// Motor Enable ON
digitalWrite(R_EN, HIGH); // CW
// Motor ON
digitalWrite(RPWM, HIGH); // CW Dikkat : İkisi de HIGH ise modül YANAR
digitalWrite(LPWM, LOW); // CW
// *** ESP32 dutycyle 10 bit 0..1024 --> Motor 12V 810 RPM Max. ***
ledcWrite(pwmChannel_0, 128); // 100 RPM için DC değeri
break;
case 0 : // Dur
// Motor Enable OFF
digitalWrite(R_EN, LOW); // STOP
// Motor OFF
digitalWrite(RPWM, LOW); // STOP
digitalWrite(LPWM, LOW); // STOP
break;
} // end case
} // DC MotorONOFF
https://mikrodunya.wordpress.com/2021/08/20/esp32-ile-fircasiz-dc-motor-bldc-kontrolu/ (https://mikrodunya.wordpress.com/2021/08/20/esp32-ile-fircasiz-dc-motor-bldc-kontrolu/)