Arduino ile Sensörsüz BLDC Motor Sürücü (DIY ESC) Yapımı

👤 Yazar: ozcan 📅 Tarih: 31.07.2026 12:25 👁️ Görüntüleme: 10

Arduino ile Sensörsüz BLDC Motor Sürücü (DIY ESC) Yapımı

Bu projede, harici bir hazır ESC kullanmak yerine Arduino Uno ile kendi 3 Fazlı Sensörsüz (Sensorless) BLDC Motor Sürücümüzü inşa ediyoruz. Devre; 6 adet N-Kanal MOSFET'ten oluşan 3 fazlı bir köprü (Inverter), 3 adet IR2104S MOSFET sürücü entegresi ve rotor pozisyonunu algılamak için BEMF (Back Electromotive Force / Zıt EMK) voltaj bölücü direnç ağından oluşur. Motor hızı iki adet buton (Speed Up / Speed Down) ile dijital olarak kontrol edilmektedir.

Arduino Sensörsüz BLDC Sürücü DIY ESC Şeması

Gerekli Bileşenler:
  • 1 x Arduino Uno R3
  • 1 x Sensörsüz BLDC Motor
  • 3 x IR2104S Half-Bridge Sürücü Entegresi
  • 6 x N-Kanal Güç MOSFET'i (Örn: 06N03LA / IRFZ44N)
  • 3 x 1N4148 Diyot (Bootstrap diyotları)
  • Kapasitörler: 10uF (VCC filtre) ve 2.2uF (Bootstrap)
  • Dirençler: 6 x 100 Ohm (Gate dirençleri), 3 x 33k Ohm ve 3 x 10k Ohm (BEMF Voltaj Bölücüler)
  • 2 x Push Buton (Hız Artırma / Azaltma)

Çalışma Prensibi ve Devre Mimarisi

Sensörsüz BLDC motorlarda rotor pozisyonunu belirleyen Hall sensörleri bulunmaz. Bunun yerine motor döndükçe boşta kalan faz bacağında indüklenen Zıt EMK (BEMF) voltajı okunur.

  • 3 Fazlı Köprü Yapısı: Faz A, Faz B ve Faz C hatlarının her birinde bir Üst (High-Side) ve bir Alt (Low-Side) MOSFET bulunur. Toplam 6 komutasyon adımı sırayla tetiklenerek dönen bir manyetik alan elde edilir.
  • IR2104S Sürücüler: High-Side N-MOSFET'leri tamamen iletime sokabilmek için kaynak (Source) voltajının üzerinde bir Gate voltajı gerekir. IR2104S, üzerindeki 1N4148 diyot ve 2.2uF bootstrap kapasitörü ile şarj pompası (charge pump) oluşturarak High-Side MOSFET'i anahtarlar. IN pini sinyali, SD (Shutdown) pini ise çıkışları aktif/pasif yapmayı sağlar.
  • BEMF Algılama (33k / 10k Gerilim Bölücü): Motor fazlarındaki yüksek voltaj (+12V), 33k ve 10k dirençler ile Arduino'nun güvenli analog okuma aralığına (<5V) düşürülür. Arduino'nun A0, A1, A2 pinleri, aktif olmayan 3. fazdaki sıfır geçiş noktasını (Zero-Crossing Point) yakalar.

Pin Bağlantı Listesi

Arduino Pini Bağlandığı Yer Görevi
Pin 2, 3, 4 IR2104S (Faz A, B, C) - SD Pinleri Faz Çıkışlarını Açma/Kapatma (Enable)
Pin 9, 10, 11 IR2104S (Faz A, B, C) - IN Pinleri (PWM) PWM ve Komutasyon Sinyalleri
A0, A1, A2 Faz A, B, C Voltaj Bölücü Çıkışları BEMF Sıfır Geçiş Tespiti (Zero-Crossing)
A4 / A5 Speed Up / Speed Down Butonları Hız Kontrol Girişleri (Internal Pull-up)

Örnek Arduino IDE Kodu

Aşağıdaki kod; motoru durur vaziyetten kaldırmak için açık döngü (Open-Loop Start) başlatma dizisi uygular, ardından BEMF okuması ile kapalı döngüye geçer ve butonlarla hızı ayarlar:

// Arduino Sensörsüz BLDC Sürücü (DIY ESC)

// Sürücü SD ve IN pin tanımlamaları
const int SD_A = 2, IN_A = 9;
const int SD_B = 3, IN_B = 10;
const int SD_C = 4, IN_C = 11;

// Buton pinleri
const int BTN_UP = A4;
const int BTN_DOWN = A5;

int step = 0;
int motorSpeed = 2000; // Mikrosaniye cinsinden adım gecikmesi (Küçüldükçe hız artar)
int pwmDuty = 80;      // Başlangıç PWM gücü (0-255)

// 6 Adım Komutasyon Tablosu
void setStep(int stepNum) {
  switch(stepNum) {
    // Adım 1: Faz A High, Faz B Low, Faz C Boşta (BEMF A2'de)
    case 0:
      digitalWrite(SD_C, LOW);
      digitalWrite(SD_A, HIGH); analogWrite(IN_A, pwmDuty);
      digitalWrite(SD_B, HIGH); analogWrite(IN_B, 0);
      break;

    // Adım 2: Faz A High, Faz C Low, Faz B Boşta (BEMF A1'de)
    case 1:
      digitalWrite(SD_B, LOW);
      digitalWrite(SD_A, HIGH); analogWrite(IN_A, pwmDuty);
      digitalWrite(SD_C, HIGH); analogWrite(IN_C, 0);
      break;

    // Adım 3: Faz B High, Faz C Low, Faz A Boşta (BEMF A0'da)
    case 2:
      digitalWrite(SD_A, LOW);
      digitalWrite(SD_B, HIGH); analogWrite(IN_B, pwmDuty);
      digitalWrite(SD_C, HIGH); analogWrite(IN_C, 0);
      break;

    // Adım 4: Faz B High, Faz A Low, Faz C Boşta
    case 3:
      digitalWrite(SD_C, LOW);
      digitalWrite(SD_B, HIGH); analogWrite(IN_B, pwmDuty);
      digitalWrite(SD_A, HIGH); analogWrite(IN_A, 0);
      break;

    // Adım 5: Faz C High, Faz A Low, Faz B Boşta
    case 4:
      digitalWrite(SD_B, LOW);
      digitalWrite(SD_C, HIGH); analogWrite(IN_C, pwmDuty);
      digitalWrite(SD_A, HIGH); analogWrite(IN_A, 0);
      break;

    // Adım 6: Faz C High, Faz B Low, Faz A Boşta
    case 5:
      digitalWrite(SD_A, LOW);
      digitalWrite(SD_C, HIGH); analogWrite(IN_C, pwmDuty);
      digitalWrite(SD_B, HIGH); analogWrite(IN_B, 0);
      break;
  }
}

void setup() {
  pinMode(SD_A, OUTPUT); pinMode(IN_A, OUTPUT);
  pinMode(SD_B, OUTPUT); pinMode(IN_B, OUTPUT);
  pinMode(SD_C, OUTPUT); pinMode(IN_C, OUTPUT);

  pinMode(BTN_UP, INPUT_PULLUP);
  pinMode(BTN_DOWN, INPUT_PULLUP);

  // Tüm sürücüleri başlangıçta kapat
  digitalWrite(SD_A, LOW);
  digitalWrite(SD_B, LOW);
  digitalWrite(SD_C, LOW);

  Serial.begin(115200);
  Serial.println("DIY BLDC ESC Başlatılıyor...");

  // Open-Loop (Açık Döngü) Başlangıç Rampası
  for (int i = 5000; i > motorSpeed; i -= 100) {
    setStep(step % 6);
    step++;
    delayMicroseconds(i);
  }
}

void loop() {
  // Buton Kontrolleri
  if (digitalRead(BTN_UP) == LOW) {
    if (motorSpeed > 800) motorSpeed -= 50; // Hızlan
    delay(100);
  }
  if (digitalRead(BTN_DOWN) == LOW) {
    if (motorSpeed < 4000) motorSpeed += 50; // Yavaşla
    delay(100);
  }

  // Komutasyon Adımını İlerlet
  setStep(step % 6);
  step++;
  
  delayMicroseconds(motorSpeed);
}

Önemli Tasarım ve Uygulama Notları

  • Açık Döngüden Kapalı Döngüye Geçiş: Duran sensörsüz motorlarda BEMF voltajı 0V'tur. Motor ilk kalkışta belirli bir hıza ulaşana kadar açık döngü (Open-Loop) zamanlama ile döndürülür. Yeterli BEMF gerilimi oluştuğunda analog karşılaştırıcı veya ADC okumalarına (Closed-Loop) geçilir.
  • MOSFET Seçimi ve Isınma: Yüksek akım çeken motorlarda Low-Rds(on) değerine sahip MOSFET'ler tercih edilmeli ve gerekirse soğutucu blok (heatsink) kullanılmalıdır.
  • Ortak Toprak ve Gürültü Filtresi: Motorun oluşturduğu elektriksel parazitlerin Arduino'yu kitlemesini önlemek için +12V ana güç hattına büyük değerli bir elektrolitik kapasitör (örn. 470uF - 1000uF) eklenmelidir.

💬 Yorumlar

Henüz yorum yapılmamış. İlk yorumu siz yapın!

Bir Yorum Bırakın

Güvenlik Kontrolü:

Yenidir.com
↑ Sayfa Başı
📞 İletişim ✉ E-Posta Gönder 🟥 YouTube
© 2026 Yenidir.com
Yenidir CMS V0.1