Dokümanlar · ← Blog yazıları

Robotik

DC motor nasıl çalışır? Yön ve hız kontrolü (H köprüsü, PWM, L298N)

Probot Studio

Bu yazıda ne yapacağız?

  1. DC motorun içine bakıp neden döndüğünü göreceğiz.
  2. H köprüsüyle motoru ileri ve geri çevirip frenleyeceğiz.
  3. PWM ile hızı ayarlayacağız ve deneme alanında kendimiz deneyeceğiz.
  4. L298N motor sürücüyü Arduino'ya bağlayıp yön ve hız kodunu yazacağız.

Neden işe yarar? Robot tekerleri, pervaneler ve konveyörler çoğunlukla DC motorla döner. Yönü ve hızı kodla yönetebilen biri, robotu yürütmenin yarısını öğrenmiş olur.

DC motorun içi: kırmızı N ve mavi S mıknatıs arasında dönen bobin; sağda milin ucundaki iki parçalı kollektör halkası, ona sürtünen iki fırça ve pil

DC motor nedir?

DC motor, pil ya da adaptörden gelen doğru akımı dönme hareketine çeviren motordur. İki ucuna gerilim verince döner, uçları ters bağlayınca ters yöne döner.

DC motor nasıl çalışır?

Mıknatısın arasındaki telden akım geçince tele bir kuvvet etki eder. Bobinin bir yanı yukarı, öbür yanı aşağı itilir ve rotor döner.

Yarım tur sonra bu itme rotoru geri çevirirdi. Kollektör tam o anda akımın yönünü değiştirir, kuvvet hep aynı yöne döndürür (animasyonda simgelerin yer değiştirdiği an).

Motor ve jeneratör aynı makinedir: dönen motor gerilim de üretir. Fren bundan yararlanır.

DC motor yön değiştirme: H köprüsü

Yönü değiştirmek için motorun uçlarındaki gerilimi ters çevirmek gerekir. Bunu dört anahtarlı H köprüsü yapar.

İki H köprüsü: solda S1 ve S4 kapalı, akım motordan soldan sağa geçiyor ve motor ileri dönüyor; sağda S3 ve S2 kapalı, akım ters yönde geçiyor ve motor geri dönüyor

Gerçek sürücülerde anahtarların yerinde transistörler vardır.

DC motor hız kontrolü: PWM

Hızı ayarlamanın en kolay yolu PWM: gerilimi çok hızlı açıp kapatmak. Açık kalma oranı (görev oranı) arttıkça motorun gördüğü ortalama gerilim ve hız artar.

Üç PWM sinyali: yüzde 25 görev oranında ortalama 3 V, yüzde 50'de 6 V, yüzde 75'te 9 V; yanlarındaki pervaneler giderek hızlanıyor

ortalama gerilim ≈ görev oranı × besleme gerilimi
analogWrite değeri = görev oranı × 255

Arduino Uno'da analogWrite() yalnızca 3, 5, 6, 9, 10 ve 11 numaralı pinlerde çalışır. Frekansı 490 Hz'dir, 5 ve 6 numaralı pinlerde 980 Hz.

Kendiniz deneyin

Anahtarlara dokunun, akımın yolunu izleyin, sonra hızı kaydırıcıyla değiştirin.

Burada H köprüsünün dört anahtarını açıp kapatabileceğiniz ve PWM kaydırıcısıyla motor hızını ayarlayabileceğiniz bir deneme alanı var; JavaScript ile çalışır. Açılmadıysa yukarıdaki H köprüsü ve PWM görselleri aynı şeyi gösteriyor.

Deneyin: S1 ile S2'yi birlikte kapatın ve uyarıyı okuyun. Sonra görev oranını %10'a indirin. Gerçek motorlar da düşük görev oranında sürtünmeyi yenemez, hiç dönmeyebilir.

Motor sürücü ne işe yarar?

Motor sürücü, Arduino'nun zayıf sinyalleriyle pilin büyük akımını motora anahtarlar. Arduino pini motoru doğrudan süremez:

L298N'nin içinde iki H köprüsü vardır: iki motoru ayrı ayrı sürer.

L298N motor sürücü nasıl bağlanır?

Bağlantı şeması: Arduino pin 9 ENA'ya, pin 8 IN1'e, pin 7 IN2'ye, GND GND'ye; motor OUT1 ve OUT2'ye; motor pilinin artısı 12V girişine, eksisi GND'ye

L298N Bağlanacak yer
ENA Arduino 9 (PWM). Önce ENA üzerindeki jumper'ı çıkarın
IN1, IN2 Arduino 8 ve 7
OUT1, OUT2 Motorun iki ucu
12V Motor pilinin artısı
GND Pilin eksisi ve Arduino GND

Pinlere ne yazınca ne olur (L298 datasheet'indeki tablo):

IN1 IN2 ENA Motor
HIGH LOW HIGH ya da PWM İleri
LOW HIGH HIGH ya da PWM Geri
aynı aynı HIGH Fren (hızlı durma)
fark etmez fark etmez LOW Serbest, boşa düşer

İki önemli ayrıntı:

Arduino ile yön ve hız kodu

// L298N ile DC motor: yön ve hız (Arduino Uno)
// ENA -> 9 (PWM), IN1 -> 8, IN2 -> 7, GND'ler ortak
const int ENA = 9;
const int IN1 = 8;
const int IN2 = 7;

void ileri(int hiz) {   // hiz: 0-255
  digitalWrite(IN1, HIGH);
  digitalWrite(IN2, LOW);
  analogWrite(ENA, hiz);
}

void geri(int hiz) {
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, HIGH);
  analogWrite(ENA, hiz);
}

void fren() {           // iki uç birbirine bağlanır, çabuk durur
  digitalWrite(IN1, LOW);
  digitalWrite(IN2, LOW);
  digitalWrite(ENA, HIGH);
}

void serbest() {        // sürücü kapanır, motor boşa düşer
  digitalWrite(ENA, LOW);
}

void setup() {
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
}

void loop() {
  for (int h = 80; h <= 255; h += 5) {  // yavaş yavaş hızlan
    ileri(h);
    delay(40);
  }
  delay(1000);
  fren();               // yön değiştirmeden önce durdur
  delay(500);
  geri(150);            // yaklaşık %60 hızla geri
  delay(1500);
  serbest();
  delay(1500);
}

Hızı elle ayarlamak isterseniz bir potansiyometre bağlayın:

// Potansiyometreyle hız: orta ucu A0'a, yan uçları 5V ve GND'ye
const int ENA = 9, IN1 = 8, IN2 = 7;

void setup() {
  pinMode(ENA, OUTPUT);
  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  digitalWrite(IN1, HIGH);  // yön: ileri
  digitalWrite(IN2, LOW);
}

void loop() {
  int deger = analogRead(A0);   // 0-1023
  analogWrite(ENA, deger / 4);  // 0-255
}

DC motor kaç volt ile çalışır?

Etiketinde ya da datasheet'inde yazan gerilimle; tek cevap yok. Örneğin FA-130 tipi küçük motor 3 V için yapılmıştır.

Redüktörlü DC motor nedir?

Ucuna dişli kutusu takılmış DC motordur. Örneğin 1:48 oranlı motorun mili 48 kat yavaş döner, tork (dönme kuvveti) ise yaklaşık 48 kat artar; dişli kayıpları bunu biraz azaltır. Robot tekerlerinde çoğunlukla bu kullanılır.

Belirli bir açıya gitmek gerekiyorsa servo motor, adım adım hassas konum gerekiyorsa step motor daha uygundur. DC motoru enkoderle bir konuma götürmek için PID kullanılır.

Sık yapılan hatalar

Belirti Sebep Çözüm
Motor hep tam hızda, hız değişmiyor ENA jumper'ı takılı Jumper'ı çıkarın, ENA'yı pin 9'a bağlayın
Motor hiç dönmüyor, LED yanıyor GND ortak değil ya da ENA bağlı değil Pil eksisini Arduino GND'ye bağlayın, ENA kablosuna bakın
Düşük hızda vızıldıyor ama dönmüyor Ortalama gerilim sürtünmeyi yenemiyor En düşük çalışan değeri bulun, altına inmeyin
Motor çalışınca Arduino resetleniyor Motor akımı Arduino'nun beslemesini düşürüyor Motoru ayrı pille besleyin, GND'ler ortak kalsın
Sürücü çok ısınıyor Motor fazla akım çekiyor ya da sıkışmış Yükü azaltın, mili kontrol edin, soğutucuyu takılı tutun

Güvenlik: Mil sıkışırsa motor en büyük akımını çeker, sürücü ve kablolar ısınır: beslemeyi kesin, motoru elle tutmayın. LiPo pille kısa devreye karşı çok dikkatli olun.

Kaynaklar

Erişim: 17 Ekim 2026