Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

5. hafta / 14

Eyleyiciler ve motor kontrolü

Araçlar: Bu platform (Uno laboratuvarı: L298N, TB6612, servo, step, ESC)

Bu haftanın sonunda

  • PWM'i açıklamak ve görev döngüsünden (duty cycle) ortalama gerilimi hesaplamak
  • DC motorları bir H köprüsüyle iki yönde sürmek
  • DC motorlar, servolar ve step motorlar arasında seçim yapmak

Ders notları

Eyleyiciler (actuators) elektrik enerjisini harekete dönüştürür. Bir mikrodenetleyici pini yalnızca birkaç miliamper sağlayabilir; bu nedenle motorlar her zaman bir sürücüye ve ortak toprağa bağlı ayrı bir güç kaynağına ihtiyaç duyar.

DC motorlar ve PWM

Bir DC motorun hızı kabaca gerilimiyle, torku ise akımıyla orantılıdır. Mikrodenetleyici keyfi bir gerilim üretemez; bu yüzden beslemeyi hızla açıp kapatır. Açık kaldığı sürenin oranı görev döngüsü (duty cycle) D'dir:

Vavg = D · Vsupply

Uno'da analogWrite(pin, 0…255) yaklaşık 490 Hz'lik PWM üretir (5 ve 6 numaralı pinlerde 980 Hz).

H köprüsü

Dört anahtar, akımın motordan her iki yönde geçmesine izin verir. L298N (basit, ancak yaklaşık 2 V'u ısı olarak kaybeder) veya TB6612FNG (daha verimli) gibi modüller, motor başına iki yön pini ve bir PWM pini alır. Motorlar endüktif yüklerdir; bu nedenle sürücüler geri dönüş (flyback) diyotları içerir.

Servolar ve step motorlar

  • Hobi servosu: motor, dişli kutusu ve konum denetleyicisi tek kutuda. 1 ile 2 ms darbe genişliğine sahip 50 Hz'lik bir sinyal, açıyı 0° ile 180° arasında ayarlar.
  • Step motor: sabit adımlarla (çoğunlukla tur başına 200) hareket eder, konumlandırma için geri besleme (feedback) gerekmez. 3B yazıcılarda kullanılır. A4988 gibi sürücüler adım ve yön pinleri alır.

Seçim yaparken neyi kontrol etmeniz gerektiğini sorun: hız (DC), belirli bir aralıkta açı (servo), hassas ve tekrarlanabilir konum (step) ya da yüksek güç yoğunluğu (dronlardaki gibi ESC'li fırçasız motor).

Derinlemesine

Motor gerçekte ne görür?

Vavg = D · Vsupply formülü sürücüyü yok sayar. L298N bipolar transistörlerle anahtarlama yapar ve bunlardan ikisi seri iletime geçerek kabaca 2 V kaybettirir (yüksek akımda daha fazla). TB6612FNG ise toplam yaklaşık 0,5 Ω iletim direncine sahip MOSFET'ler kullanır, dolayısıyla kaybı akıma bağlıdır.

L298N: Vavg ≈ D · (Vs − 2 V)     TB6612FNG: Vavg ≈ D · (Vs − I · 0.5 Ω)

Çözümlü örnek. 12 V'luk bir kaynaktan %50 doluluk oranında ideal bir sürücü 6 V verir, ancak L298N yaklaşık (12 − 2) × 0,5 = 5 V verir. 1,5 A'de 1,5 × 2 = 3 W'ı ısıya çevirir; soğutucu taşımasının nedeni budur. TB6612FNG 1 A'de yalnızca 0,5 V düşürür ve I²R = 0,5 W harcar, ancak kanal başına 1,2 A sürekli akım ve 15 V için derecelendirilmiştir; bu yüzden 4 Ω sargılı bir motor (12 V'ta 3 A kilitlenme akımı) yumuşak kalkış rampası ya da daha büyük bir sürücü ister.

PWM frekansını seçmek

Motor sargısı, zaman sabiti τe = L / R olan bir endüktanstır. L = 2 mH ve R = 4 Ω için τe = 0,5 ms'dir. Uno'nun varsayılan 490 Hz'inde periyot (2 ms) τe'nin dört katıdır; akım her çevrimde yükselip söner: motor ötüşür ve düşük doluluk oranında sarsıntılı döner. Yaklaşık 20 kHz'in üstünde akım düzgündür ve ses duyulabilir aralığın dışına çıkar. Timer1, hızlı PWM modunda TOP = 799 ve ön bölücüsüz ayarlandığında 9 ve 10 numaralı pinlerde 16 MHz / 800 = 20 kHz verir.

Step motorlar: milimetre başına adım

1/16 mikro adımlı (microstepping) 200 adımlı bir motor tur başına 3 200 mikro adım ister. 20 dişli kasnaklı bir GT2 kayışta (tur başına 40 mm) bu, milimetrede 80 mikro adım eder; yani 100 mm/s için saniyede 8 000 darbe gerekir, bu da AccelStepper gibi bir yazılım adım üretecinin 16 MHz'lik AVR'de başarabildiğinin yaklaşık iki katıdır. Bir ESP32 veya STM32 zamanlayıcısı kullanın ya da mikro adımı düşürün. TMC2209 sessiz StealthChop, 1/256'ya kadar ara değerleme ve sensörsüz sıfırlama için StallGuard ekler. Step motor açık döngüdür: yük torku motor torkunu aşarsa sessizce adım kaçırır, bu yüzden hızı her zaman rampayla değiştirin.

Fırçasız motorlar ve ESC'ler

Bir BLDC motorun KV değeri volt başına yüksüz devirdir: 4S bir pakette (14,8 V) 920 KV'lik bir motor yüksüzken yaklaşık 920 × 14,8 ≈ 13 600 dev/dk döner, pervane takılıyken daha az. ESC üç fazı komütasyonla sürer; siz yalnızca bir gaz komutu gönderirsiniz. Klasik PWM 1000 ile 2000 µs arası bir darbe gönderir ve kalibrasyon ister; DShot600 ise 600 kbit/s hızla, sağlama toplamlı (checksum) 16 bitlik dijital bir çerçeve gönderir, böylece kalibrasyon gerekmez ve gürültü sahte bir gaz değeri üretemez.

İhtiyaçEyleyiciHyvex sürücüsü
tekerlek hızıenkoderli redüktörlü DC motorTB6612FNG, L298N
bir aralıkta açıhobi servosudoğrudan 50 Hz sinyal, ayrı 5 ile 6 V besleme
tekrarlanabilir konumstep motorTMC2209
yüksek güç yoğunluğuBLDCESC

Simülasyon

PWM ve motor hızı

PWM, 12 V beslemeyi tamamen açıp kapatır. Motor ve LED ortalama gerilime tepki verir, bu yüzden doluluk oranı hızı ve parlaklığı belirler. Burada zaman yavaşlatıldı; Arduino PWM yaklaşık 490 Hz'de çalışır.

Kod

Arduino: potansiyometreyi izleyen servo
#include <Servo.h>
Servo s;

void setup() { s.attach(9); }

void loop() {
  int raw = analogRead(A0);              // 0..1023
  int angle = map(raw, 0, 1023, 0, 180);
  s.write(angle);
  delay(15);
}

Sık yapılan hatalar

  • Motor kaynağı, sürücü ve Uno arasındaki ortak toprağı unutmak.
  • Motorları veya servoları Uno'nun 5 V pininden beslemek; akım sıçramaları gerilimi düşürüp kartı sıfırlar.
  • 12 V'ta %50 doluluk oranında L298N'den 6 V beklemek ve yaklaşık 2 V'luk düşümünü unutmak.
  • Yönü tam hızda, sıfırdan geçmeden ters çevirmek; büyük bir akım sıçramasına yol açar.
  • Bir ESC'yi tezgâhta pervane takılıyken kalibre etmek veya kurmak (arm).
  • Step motoru duruştan hızlanma rampası olmadan tam hızda sürmek; hiçbir hata vermeden adım kaçırır.

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

Motor sürücüsü, arayüzler ve sözleşmeler (contracts) için ders kitabı örneğidir. IMotor::set(int speed) arayüzü sözleşmeyi belirtir: ön koşul −255 ≤ speed ≤ 255, son koşul ise yön pinlerinin ve doluluk oranının işarete ve büyüklüğe uymasıdır. L298N ve TB6612FNG aynı arayüzün iki gerçeklemesidir; uygulama hangisinin takılı olduğunu umursamamalıdır.

  • Hatalı girdiyi kırpmak (clamp) ile ona assert koymak arasında açıkça karar verin ve bu kararı test edin.
  • Bir komut zaman aşımı (ölü adam anahtarı, dead-man switch) ekleyin: 200 ms boyunca yeni komut gelmezse motorları durdurun. Bu tek kural en tehlikeli kontrolden çıkma arızalarını önler.
  • Güvenlik mantığı en alt katmana aittir; böylece hiçbir üst katman onu unutamaz.

Dönem projesi uygulaması: iki gerçeklemeli (örneğin Webots motoru ve bir sahte) tek bir motor arayüzü yazın; kırpma, sıfırda frenleme ve komut zaman aşımı için birim testleri ekleyin.

Laboratuvar görevi

Wokwi'de bir servoyu potansiyometreyle kontrol edin. Ardından bir DC motoru L298N üzerinden sürün ve delay() kullanmadan hızı 0'dan tam hıza çıkarıp geri indirin.

Kendini sına

  1. 3S bir LiPo (11,1 V), analogWrite(pin, 191) ile ideal bir H köprüsü üzerinden bir motoru sürüyor. Motorun ortalama gerilimi nedir?

  2. 1/8 mikro adımlı 200 adımlı bir motor, 8 mm hatveli bir vidalı mili sürüyor. Milimetre başına kaç mikro adım vardır?

  3. 1000 KV'lik bir fırçasız motorun 3S pakette (11,1 V) yüksüz devri nedir?

  4. 7,4 V'luk bataryadaki bir L298N motoru tam doluluk oranında sürüyor ama motor yavaş. En olası neden nedir?

Ödev

−255 ile 255 arasında değer alan, yön pinlerini ayarlayan, girişi sınırlayan (clamp) ve 0'da fren yapan bir setMotor(int speed) fonksiyonu yazın. Wokwi'de kısa bir hız dizisiyle test edin.

Bu haftanın donanımı (Hyvex)

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
  • TestlerimMini testler ve puanlarSayfa
  • 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ç