3.15. DC motor kontrolü¶
DC fırçalı bir motor, bir manyetik alan içinde bir mil üzerinde bulunan tel sargısıdır. Sargıdan akım geçirin, alan ona bir kuvvet uygular; bu kuvvet milde tork hâline gelir. Motorun içindeki fırçalar, mil döndükçe sargıdaki akımın yönünü değiştirir; böylece tork mili her zaman aynı yönde iter. İki motor ucu arasına bir DC gerilim uygulayın, mil döner; kutupları değiştirin, ters yönde döner.
Motorlar tipik olarak, kameranın 3.3 V mantık rayının üzerindeki besleme gerilimlerinde, yüzlerce miliamperden birkaç ampere kadar akım ister. Bir GPIO pini yaklaşık 25 mA mertebesinde akım sağlayabilir ve kutupları tersine çeviremez; yalnızca kendi iki rayını sürebilir. Kamera ile motor arasındaki sürme katmanı, motorun akımını taşımak, ayrı bir daha yüksek gerilimli motor beslemesini yönlendirmek ve komut üzerine kameranın kutupları tersine çevirmesine izin vermek zorundadır. Dört transistörlü H-köprüsü bunun standart yanıtıdır.
3.15.1. H-köprüsü¶
Bir H-köprüsü, motorun etrafında bir H şeklinde düzenlenmiş dört anahtardan oluşur:
H-köprüsü: dört anahtar (S1 – S4), motor M öğesini Vmotor ile toprak arasına bağlar.¶
Farklı anahtar çiftlerini kapatmak, motorun uçlarında ne gördüğünü seçer:
S1 + S4 kapalı, S2 + S3 açık. Akım, Vmotor’dan
S1üzerinden geçer,Adüğümüne girer, motoru geçerekBdüğümüne ulaşır veS4üzerinden toprağa gider. Motor bir yöne döner.S2 + S3 kapalı, S1 + S4 açık. Akım, motordan ters yönde akar. Motor diğer yöne döner.
Dördü de açık. Her iki motor ucu da serbest kalır; motor boşta savrulur.
S3 + S4 kapalı (veya S1 + S2 kapalı). Her iki motor ucu da aynı raya bağlanır; motorun kendi kinetik enerjisi, kapalı çiftin ısı olarak kısa devre yaptığı bir akım sürer. Motor frenler.
İzin verilmeyen kombinasyon, aynı sütundaki her iki anahtarı da kapatmaktır – S1 + S3 veya S2 + S4 – ki bu, Vmotor’dan doğrudan toprağa bir kısa devre oluşturur. Buna shoot-through denir ve kameranın kodu buna izin vermemelidir.
Uygulamada dört anahtar, tümleşik bir sürücü IC’sinin içindeki MOSFET’lerdir (Seviye kaydırma sayfasında tanıtılmıştır). Yonga, dahili olarak dört anahtara eşlenen iki veya üç mantık seviyeli giriş pini sunar ve shoot-through’u önleyen kilitleme mantığı içerir; böylece kameranın kodunun bunu doğrudan yönetmesine gerek kalmaz.
3.15.2. PWM ve motorun endüktansı¶
Motorun hızını ayarlamak, tam açık ve tam kapalıdan fazlasını gerektirir. Bunun püf noktası, PWM ile LED karartma sayfasında LED’ler için kullanılanla aynıdır: sürmeyi yüksek bir frekansta darbeleyin ve yükün sonucu ortalamasını almasına izin verin. Bir LED için ortalama alıcı gözdü; bir motor için bunu sargının kendisi yapar.
Bir motor sargısı önemli ölçüde endüktansa sahiptir. Bir endüktör üzerinden geçen akım anında değişemez; üzerindeki gerilimle orantılı bir hızda değişir. Köprüyü 20 kHz’de açıp kapatarak darbelemek, her açık fazı sırasında sargı akımını yükseltir; kapalı faz sırasında ise akımın akmaya devam etmesi gerekir; sargı, onu sürdürmek için üzerindeki gerilimi tersine çevirir.
Gidecek bir yer olmazsa, bu akım, yeni açılan anahtar üzerindeki gerilimi yukarıya doğru sıçratır ve transistöre zarar verebilir. Her anahtara paralel bağlanan serbest dolaşım (freewheeling) diyotları – çoğu zaman sadece sürücü yongasının içindeki MOSFET’lerin kendi gövde diyotları – akıma ihtiyacı olan yolu verir. Akım, bir diyottan geçer ve hâlâ kapalı olan anahtarlardan biri üzerinden geri döner; böylece akımın köprünün ve motorun kendisinin küçük dirençleri üzerinden kademeli olarak söndüğü bir serbest dolaşım döngüsü tamamlanır. Diyot ayrıca, açılan anahtar üzerindeki gerilimi, döngünün geri döndüğü rayın bir diyot düşümü kadar yakınına sabitler; bu da MOSFET’in güvenli çalışma alanının iyice içindedir.
Her PWM periyodu boyunca akımın ortalaması torku üreten şeydir ve bu ortalama, görev döngüsünü (duty cycle) doğrusal olarak izler; görev döngüsünü ikiye katlamak torku kabaca ikiye katlar ve sabit yükte hızı kabaca ikiye katlar. Gözün doğrusal olmayan tepkisinin bir eğri gerektirdiği LED karartmanın aksine, duty_u16 değerinin doğrusal bir taraması zaten motor çabasının doğrusal bir taramasına karşılık gelir.
PWM frekansının yalnızca iki eşiği aşması gerekir:
~20 kHz’in üzerinde taşıyıcı, insan tarafından duyulabilir bandın dışındadır. Bunun altında, sargı üzerindeki manyetik kuvvet her PWM darbesiyle artar ve azalır; sargılar ve laminasyonlar fiziksel olarak taşıyıcı frekansında titreşir; motor etkin bir şekilde, PWM perdesinde bir ton yayan küçük bir hoparlöre dönüşür.
~50 kHz’in çok üzerinde, MOSFET’ler ve kapı sürücüleri anahtarlama kayıplarına verimlerini kaptırmaya başlar. Her açma-kapama geçişi sırasında MOSFET kısa süreliğine hem önemli bir gerilim hem de önemli bir akım taşır, ısı olarak küçük bir güç patlaması dağıtır; MOSFET’lerin kapı kapasitansının da her çevrimde şarj edilmesi ve boşaltılması gerekir, ki bunun bedelini sürücü yongası öder. Her iki maliyet de PWM frekansıyla ölçeklenir; bu nedenle yüksek hızlarda anahtarlamadan kaynaklanan ısı, motor akımını iletmekten kaynaklanan ısıyla yarışabilir.
20 kHz, hobi boyutundaki motorlar için rahat bir varsayılandır.
3.15.3. Bir H-köprüsünü sürmek¶
İki girişli bir H-köprüsü sürücü yongası, IN1 ve IN2 öğelerini kabaca şu şekilde dört anahtara eşler:
IN1 = 0, IN2 = 0– boşta savrul (dört anahtar da açık).IN1 = 1, IN2 = 0– bir yönde sür.IN1 = 0, IN2 = 1– diğer yönde sür.IN1 = 1, IN2 = 1– frenle.
İki girişi PWM çıkışları olarak sürmek, kameranın yönü iki pinden hangisinin görev döngüsünü taşıdığını seçerek, hızı ise görev döngüsü değerinin kendisiyle ayarlamasına olanak tanır:
import time
from machine import PWM, Pin
in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)
def drive_a(speed): # speed: 0..65535
in1.duty_u16(speed)
in2.duty_u16(0)
def drive_b(speed):
in1.duty_u16(0)
in2.duty_u16(speed)
def coast():
in1.duty_u16(0)
in2.duty_u16(0)
def brake():
in1.duty_u16(65535)
in2.duty_u16(65535)
drive_a(32768) # half speed in direction A
time.sleep(2)
drive_b(16384) # quarter speed in direction B
time.sleep(2)
coast()
Kapalıdan tama ve geri yapılan bir rampa, yumuşak bir başlangıç ve durma sağlar:
for d in range(0, 65535, 256):
in1.duty_u16(d)
time.sleep_ms(10)
for d in range(65535, 0, -256):
in1.duty_u16(d)
time.sleep_ms(10)
3.15.4. Yön-ve-hız sürücüleri¶
İkinci bir H-köprüsü yonga ailesi, daha kullanışlı bir arabirim sunar: bir dijital yön girişi (genellikle “phase” için DIR veya PH olarak etiketlenir) artı bir hız girişi (genellikle “enable” için PWM veya EN). Yön pini köprünün hangi yöne süreceğini seçer; hız pinindeki görev döngüsü ortalama akımı ayarlar.
Bunu yazılımdan sürmek, iki-PWM-girişli düzenden daha kolaydır. İki sinyal, problemin genellikle ifade edildiği biçimle eşleşir – “bu yöne, şu hızda dön” – böylece kod, in1 ve in2 arasında dallanmak yerine set_direction(forward); set_speed(50) diyebilir. Yalnızca bir PWM kanalı gerekir; bu da aynı zamanlayıcıdaki diğer kanalı ilgisiz bir iş için serbest bırakır. Ayrıca yön pini, köprüyü yeniden tetiklemeden değişiklikler arasında park hâlinde kalabilir; böylece sabit bir yönde hızı değiştirmek yalnızca tek bir yazmaca dokunur.
import time
from machine import PWM, Pin
dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)
def drive(direction, speed_u16):
dir_pin.value(direction) # 0 or 1
speed.duty_u16(speed_u16) # 0..65535
drive(0, 32768) # direction A at half speed
time.sleep(2)
drive(1, 16384) # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0) # stop
Bu tür bir sürücüde “durma”nın gerçekte ne yaptığı – boşta savrulma mı yoksa frenleme mi – yongaya bağlıdır. İki girişli bir sürücüde kameranın kodu seçer (boşta savrulma için her iki giriş düşük, frenleme için her ikisi de yüksek); yön-ve-hız sürücüsünde ise yonga karar verir, bu yüzden iki davranıştan birine güvenmeden önce veri sayfasına bir göz atmaya değer.