L298N Motor Sürücü Kullanımı
L298N, iki DC motoru (veya bir step motoru) yön ve hız kontrolüyle sürebilen çift H köprüsü kartıdır. Hobi robotlarında en yaygın kullanılan sürücüdür.
Bu yazı kartın tüm bağlantılarını, kontrol mantığını ve sık yapılan hataları adım adım açıklar.
Kart Üzerindeki Bağlantılar
Güç girişleri
| Terminal | Açıklama |
|---|---|
| +12V | Motor beslemesi girişi (7 – 35 V) |
| GND | Ortak toprak |
| +5V | Lojik besleme — jumper durumuna göre giriş veya çıkış |
Motor çıkışları
| Terminal | Açıklama |
|---|---|
| OUT1, OUT2 | A motoru |
| OUT3, OUT4 | B motoru |
Kontrol pinleri
| Pin | İşlev |
|---|---|
| ENA | A motoru hız kontrolü (PWM) |
| IN1, IN2 | A motoru yön kontrolü |
| IN3, IN4 | B motoru yön kontrolü |
| ENB | B motoru hız kontrolü (PWM) |
5V Jumper — En Kritik Ayar
Kart üzerinde +5V terminalinin yanında bir jumper bulunur. Yanlış kullanımı kartı veya Arduino’yu yakabilir.
Jumper TAKILI (varsayılan)
Kart üzerindeki 78M05 regülatörü aktiftir. +12V girişinden aldığı gerilimi 5 V’a düşürür ve +5V terminalinden çıkış verir.
- Kullanım: Motor beslemesi 7 – 12 V arasındaysa.
+5Vterminalinden Arduino’yu besleyebilirsiniz.- ⚠ Motor beslemesi 12 V’un üzerindeyse regülatör aşırı ısınır ve bozulur. Jumper’ı çıkarın.
Jumper ÇIKARILMIŞ
Dahili regülatör devre dışıdır. +5V terminali artık bir giriştir ve buraya harici 5 V vermeniz gerekir.
- Kullanım: Motor beslemesi 12 V üzerindeyse veya ayrı bir 5 V kaynağınız varsa.
- Arduino’nun 5V pinini L298N’in
+5Vterminaline bağlayın. - GND’leri mutlaka birleştirin.
Özet kural: Motor beslemesi 12 V’tan büyükse jumper’ı çıkarın ve +5V’a harici besleme verin.
Yön Kontrol Mantığı
Her motor için iki giriş pini vardır ve dört olası kombinasyon şu sonuçları verir:
| IN1 | IN2 | A motoru |
|---|---|---|
| HIGH | LOW | İleri |
| LOW | HIGH | Geri |
| LOW | LOW | Serbest (coast) |
| HIGH | HIGH | Fren (brake) |
ENA pini ise motorun hızını belirler: analogWrite(ENA, 0–255).
ENA LOW ise IN1/IN2 ne olursa olsun motor çalışmaz.
ENA / ENB Jumperları
Kart üzerinde ENA ve ENB pinlerinde de birer jumper bulunur.
- Jumper takılıyken: Enable pini sürekli 5 V’a bağlıdır. Motor her zaman tam hızda çalışır, PWM ile hız ayarı yapılamaz.
- Jumper çıkarılmışsa: Pin serbesttir, Arduino’nun PWM pinine bağlayarak hız kontrolü yapabilirsiniz.
Hız kontrolü istiyorsanız bu jumperları çıkarmanız gerekir. Motor sadece tam hızda çalışıyorsa ilk bakılacak yer burasıdır.
Arduino Bağlantısı
| L298N | Arduino Uno |
|---|---|
| ENA | D10 (PWM) |
| IN1 | D9 |
| IN2 | D8 |
| IN3 | D7 |
| IN4 | D6 |
| ENB | D5 (PWM) |
| GND | GND |
Motor beslemesi +12V ve GND terminallerine bağlanır.
Tek Motor Kontrolü
const int ENA = 10;
const int IN1 = 9;
const int IN2 = 8;
void setup() {
pinMode(ENA, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
}
void ileri(int hiz) {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
analogWrite(ENA, hiz);
}
void geri(int hiz) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
analogWrite(ENA, hiz);
}
void dur() {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
analogWrite(ENA, 0);
}
void fren() {
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
analogWrite(ENA, 255);
}
void loop() {
ileri(200);
delay(2000);
fren();
delay(500);
geri(200);
delay(2000);
dur();
delay(1000);
}İki Motorlu Robot Kontrolü
// Sol motor
const int ENA = 10;
const int IN1 = 9;
const int IN2 = 8;
// Sag motor
const int IN3 = 7;
const int IN4 = 6;
const int ENB = 5;
// Motorlar arasi hiz farkini duzeltmek icin
const float SOL_KALIBRASYON = 1.00;
const float SAG_KALIBRASYON = 0.93;
void setup() {
int pinler[] = { ENA, IN1, IN2, IN3, IN4, ENB };
for (int i = 0; i < 6; i++) {
pinMode(pinler[i], OUTPUT);
}
}
void solMotor(int hiz) {
bool ileriYon = hiz >= 0;
int pwm = constrain(abs(hiz) * SOL_KALIBRASYON, 0, 255);
digitalWrite(IN1, ileriYon ? HIGH : LOW);
digitalWrite(IN2, ileriYon ? LOW : HIGH);
analogWrite(ENA, pwm);
}
void sagMotor(int hiz) {
bool ileriYon = hiz >= 0;
int pwm = constrain(abs(hiz) * SAG_KALIBRASYON, 0, 255);
digitalWrite(IN3, ileriYon ? HIGH : LOW);
digitalWrite(IN4, ileriYon ? LOW : HIGH);
analogWrite(ENB, pwm);
}
void ileriGit(int hiz) { solMotor(hiz); sagMotor(hiz); }
void geriGit(int hiz) { solMotor(-hiz); sagMotor(-hiz); }
void solaDon(int hiz) { solMotor(-hiz); sagMotor(hiz); }
void sagaDon(int hiz) { solMotor(hiz); sagMotor(-hiz); }
void dur() { solMotor(0); sagMotor(0); }
void loop() {
ileriGit(180);
delay(2000);
sagaDon(150);
delay(700);
ileriGit(180);
delay(2000);
dur();
delay(1000);
}solaDon ve sagaDon fonksiyonları motorları ters yönde çevirir; robot olduğu yerde döner (tank dönüşü). Yumuşak dönüş için bir motoru yavaşlatmak yeterlidir:
void yumusakSagaDon(int hiz) {
solMotor(hiz);
sagMotor(hiz / 3);
}Gerilim Kaybı — L298N’in Zayıf Noktası
L298N eski bipolar transistör teknolojisi kullanır. Her H köprüsünde iki transistör seri bağlı olduğu için motora giden gerilimde 1,4 – 2 V kayıp oluşur.
| Besleme | Motora ulaşan |
|---|---|
| 6 V | ~4 V |
| 9 V | ~7 V |
| 12 V | ~10 V |
Pratik sonuçları:
- 6 V’luk sarı motorları 6 V ile beslerseniz robot beklediğinizden yavaş olur.
- Kaybedilen güç ısıya dönüşür; kart ısınır ve büyük soğutucusu bu yüzden vardır.
- Çözüm olarak besleme gerilimini bir miktar yükseltmek gerekir (6 V motor için ~7,5–8 V).
Bu kayıptan rahatsızsanız TB6612FNG (0,5 V kayıp) veya DRV8871 kullanın.
Sık Karşılaşılan Sorunlar
| Belirti | Neden |
|---|---|
| Motor hiç çalışmıyor | GND’ler birleştirilmemiş; ENA/ENB jumperı yok ve pin LOW; motor beslemesi bağlı değil |
| Motor sadece tam hızda çalışıyor | ENA/ENB jumperı takılı — çıkarın |
| Motor çok yavaş | L298N gerilim kaybı; besleme yetersiz; PWM değeri düşük |
| Kart aşırı ısınıyor | Motor akımı 2 A’i aşıyor; besleme 12 V üzeriyken jumper takılı |
| Arduino resetleniyor | Motor ve Arduino aynı kaynaktan besleniyor; besleme hattına 1000 µF kondansatör ekleyin, beslemeleri ayırın |
| Motorlar farklı hızda dönüyor | Normal — yazılımsal kalibrasyon uygulayın |
| Bir motor hiç dönmüyor | Klemens vidası gevşek; IN pinlerinden biri bağlı değil |
L298N ile Step Motor Sürme
L298N bir bipolar step motoru da sürebilir. Bu durumda:
- Motorun A fazı → OUT1, OUT2
- Motorun B fazı → OUT3, OUT4
- ENA ve ENB sürekli HIGH
- IN1–IN4 adım dizisiyle sürülür
Ancak L298N’in akım limiti ayarı yoktur. Step motorlar sabit akımla sürülmek ister; L298N ile sürülen step motor ya zayıf kalır ya da aşırı ısınır.
Step motor için A4988 veya DRV8825 kullanın. Ayrıntılar A4988 ve DRV8825 Step Sürücü yazısındadır.
Özet
L298N, iki DC motoru yön ve hız kontrolüyle süren çift H köprüsü kartıdır. IN pinleri yönü, EN pinleri PWM ile hızı belirler.
Bu derste şunları öğrendik:
- ENA/IN1/IN2 kontrol mantığını ve dört yön kombinasyonunu
- 5V jumper’ının ne zaman takılı, ne zaman çıkarılmış olması gerektiğini
- ENA/ENB jumperı takılıyken hız kontrolünün çalışmadığını
- İki motorlu robot kontrol fonksiyonlarını ve kalibrasyonu
- L298N’in ~2 V gerilim kaybını ve sonuçlarını
- Sık karşılaşılan altı sorunun nedenini