Okullar için Robotik ve Mühendislik · anaokulundan liseye

7. ünite / 10 · yaklaşık 5 saat

Motorlar: L298N, enkoder ve hız denetimi

H köprüsü, PWM ile hız, enkoderden yön ve devir, PI döngüsü; güç ve toprak düzeni.

Bu ünitenin sonunda

  • H köprüsünün ileri, geri, fren ve serbest kiplerini IN1/IN2/EN ile açıklamak
  • Dörtlü enkoderin A/B kanallarından yön ve devir hesaplamak
  • PI hız denetimini ileri beslemeyle kurmak ve doyumda integrali dondurmak
  • Motor gücünü Pi'den ayırıp ortak toprak kurmak

Ders notları

Bir DC motor Pi'nin pininden sürülemez: amperlerce akım çeker ve kapanırken gerilim sıçraması üretir. Araya bir H köprüsü (L298N, TB6612FNG) girer: dört anahtar motorun uçlarını kaynağa iki yönde bağlar.

  • IN1 = 1, IN2 = 0: ileri; IN1 = 0, IN2 = 1: geri.
  • IN1 = IN2: fren (motor uçları kısa devre, hızla durur).
  • EN = 0: serbest (motor kendi kendine yavaşlar).
  • EN'e PWM verilince ortalama gerilim, dolayısıyla hız ayarlanır.

L298N bipolar transistörlüdür ve yaklaşık 2 V düşürür: 7,4 V pilde motor ~5,4 V görür ve sürücü ısınır. TB6612FNG MOSFET'lidir, kaybı çok azdır.

Enkoder

Motor miline bağlı dörtlü enkoderin iki kanalı (A, B) 90° faz farklıdır. Sıra 00 → 01 → 11 → 10 ise ileri, tersiyse geri. Her kenarı saymak (4× çözme) çözünürlüğü dört katına çıkarır. İki kanal aynı anda değişmiş görünüyorsa bir örnek kaçırılmıştır: Pi'de yüksek hızda bu olur, bu yüzden hızlı enkoderler MCU'ya bırakılır.

PI denetimi

Yük binince hız düşer. PI denetimi hatayı (hedef − ölçülen) hem anlık (P) hem birikmiş (I) olarak düzeltir. 3. ünitedeki doğru, ileri besleme olarak iyi bir başlangıç verir; I terimi geri kalanı kapatır.

Simülasyon

L298N, DC motor ve dörtlü enkoder

IN1/IN2/EN ile ileri, geri, fren ve serbest; birinci dereceden motor modeli; enkoderin A/B kanallarından yön ve hız. PI denetimini açıp yük altında hızın nasıl tutulduğunu izle.

-200-1000100200rpmAB
kip: coast hız: 0 rpm sayım: 0 enkoder yönü: — AB: 00

Kendin dene

Benzetimde IN1/IN2 ile dört kipi dene ve fren ile serbest arasındaki duruş süresi farkını not et. Enkoder kanallarını izleyerek yönü sıradan oku. Yükü %40 yap: PI kapalıyken hız ne kadar düşüyor? PI'ı aç ve hedefe ne kadar sürede oturduğunu ölç. KI'yı çok büyütüp salınımı gör.

Kod

Motor + enkoder + PI hız döngüsü
from gpiozero import Motor, RotaryEncoder
from time import sleep, monotonic

motor = Motor(forward=5, backward=6, enable=12)      # L298N IN1, IN2, ENA (PWM)
enc = RotaryEncoder(a=23, b=24, max_steps=0)         # max_steps=0: sınırsız sayım
CPR = 1400                                           # çıkış milinde tur başına sayım
KP, KI, DT = 0.004, 0.02, 0.02
integral, last = 0.0, enc.steps

def control(target_rpm: float):
    global integral, last
    steps = enc.steps
    rpm = (steps - last) / CPR * 60 / DT
    last = steps
    err = target_rpm - rpm
    u = KP * err + KI * (integral + err * DT)
    if abs(u) < 1:
        integral += err * DT                         # doyumda integrali dondur (anti-windup)
    u = max(-1.0, min(1.0, u))
    motor.forward(u) if u >= 0 else motor.backward(-u)
    return rpm

t0 = monotonic()
while monotonic() - t0 < 5:
    print(f"{control(100):.0f} rpm")
    sleep(DT)                                        # Linux: 20 ms ± titreşim; kesin döngü için MCU
motor.stop()

Sık yapılan hatalar

  • Motoru Pi'nin 5 V pininden beslemek: Pi yeniden başlar ya da bozulur.
  • Motor kaynağı ile Pi arasında ortak GND kurmamak: sürücü girişleri tanımsız kalır.
  • Doyumda integrali biriktirmek (windup): hedef değişince robot uzun süre aşar.
  • Yön değiştirirken doğrudan ileriden geriye geçmek: akım sıçrar; önce dur ya da rampa kullan.

Yazılım mühendisliği bağlantısı

PI denetleyicisi saf bir sınıftır: step(target, measured, dt) → u.

  • Birinci dereceden motor modeliyle (benzetimdeki gibi) kapalı döngü testi yaz: "2 s içinde hedefin %5'ine oturur".
  • Kazançlar ayar dosyasında; her değişiklik test ve günlükle belgelenir.

Kendini sına

  1. L298N'de IN1 = 1, IN2 = 1 ve EN = 1 ise motor ne yapar?

  2. Enkoder sırası 00 → 10 → 11 → 01 ise yön?

  3. 50 ms'de 70 sayım, CPR 1400. Devir/dakika kaç?

  4. Integral windup nedir?

Bu üniteden sonra bitirme projesinde

Gerçek parçalar (Hyvex, 3B modelli)

ESOF 323, 5. hafta

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç