BTS7960, ESP32, DC Motor, Arduino IDE DC Motor Hız Kontrolü

Başlatan vkoglu, 13 Nisan 2022, 13:37:20

vkoglu

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