Arduino ile Fırçasız DC Motoru Kontrolü
DC motor üzerinde tam kontrol sahibi olmak için hızını ve dönüş yönünü kontrol etmeliyiz. Bu, iki tekniği birleştirerek elde edilebilir.
- H-Bridge - Dönüş yönünü kontrol etmek için(yön, ileri geri, pozisyon)
PWM - Arduino ile DC Motor Hız Kontrolü
Bir DC motorun hızı, giriş voltajını değiştirerek kontrol edilebilir. Bunu yapmak için yaygın bir teknik olan PWM (Darbe Genişliği Modülasyonu) kullanmalıyız. PWM, bir dizi ON-OFF tetiklemesi göndererek giriş voltajının ortalama değerinin ayarlandığı bir tekniktir. Ortalama voltaj, Görev Döngüsü olarak bilinen darbelerin genişliği ile orantılıdır. Görev döngüsü ne kadar yüksek olursa, dc motora uygulanan yüksek voltaj (Yüksek Hız) ve görev döngüsü ne kadar düşük olursa, dc motora uygulanan ortalama voltaj o kadar düşük (Düşük Hız) olacaktır. Aşağıdaki resimde, çeşitli iş çevrimleri ve ortalama gerilimler ile PWM tekniği gösterilmektedir.
H-Bridge - Arduino ile DC Motor Yön Kontrolü - İleri Geri Kontrol
DC motorun dönüş yönü, giriş voltajının polaritesini değiştirerek kontrol edilebilir. Bunu yapmak için yaygın bir teknik olan H-Bridge kullanılmaktır. Bir H-Bridge devresi, motor merkezde H-benzeri bir düzenleme oluşturan dört anahtar içerir. İki özel anahtarın aynı anda kapatılması, motora uygulanan voltajın polaritesini tersine çevirir. Bu, motorun dönüş yönünde değişime neden olur. Aşağıdaki animasyon H-Bridge devresinin çalışmasını gösterir.
Arduino ile L293D Motor Sürücüsü Kullanımı
L293D motor sürücü, bir çift DC motor veya bir step motor kullanabilen çift kanallı H-Bridge motor sürücüsüdür. L293d ile iki tekerlekli robot platformları oluşturabilir, iki motoru ayrı ayrı kodlayarak sürebilirsiniz.
L293D Motor Sürücü Enerji Pini
L293D motor sürücüsü aslında iki güç giriş pinine sahiptir. Bunlar Vcc1 ve Vcc2. Vcc1 , 5V olması gereken dahili mantık devresini sürmek için kullanılır. Verici Vcc2 pini H-Köprü bağlantısı ile 4.5V - 36V arası gereken motor gücünü iletir. Ve ikisi de GND pinine bağlıdır .
L293D Motor Sürücü Veri İletim Pinleri
L293D motor sürücüsünün A ve B motorlarına veri iletmesi için çıkış kanalları sırasıyla OUT1, OUT2 ve OUT3, OUT4 pinleridir. Bu pinler 4.5V ile 36V arasında voltajı iki adet DC motora iletir. Motor Sürücü üzerindeki her pin DC motorlara 600mA'ya kadar elektriksel akım iletebilir. Ancak, motora verilen akım miktarı, sistemin güç kaynağına(adaptör, lipo pil vb.) bağlıdır.
Arduino ile DC Motor Hız, Yön, İleri Geri, Pozisyon Kontrolü
L293D motor sürücü pinlerinin her biri için, DC motorların hızını ve dönüş yönünü aynı anda kontrol etmemizi sağlayan iki tür kontrol pini vardır.
- Yön kontrol pinleri
- Hız kontrol pimleri
Arduino ile DC Motor Yön Kontrol, İleri Geri, Hareket, Pozisyon Pinleri
Yön kontrol pimlerini kullanarak, motorun ileri mi yoksa geri mi hareket etmesini kontrol edebiliriz.
Pozisyon pinleri aslında L293D motor sürücü içindeki H-Bridge devresinin anahtarlarını kontrol eder. L293d motor sürücü, her kanal için iki yön kontrol yani hareket pinine sahiptir.
IN1, IN2 pinleri 1. dc motorun hareket ve hızını kontrol ederken IN3, IN4 2. dc motorun hız ve hareket yani yön faliyetini kontrol etmektedir.
Bir dc motorun dönüş yönü bu pinlere verilen elektriksel akım (5 Volt) veya Toprak (Nötr) uygulanarak kontrol edilebilir. Aşağıdaki grafik bunun nasıl yapıldığını göstermektedir.
Arduino ile DC Motor Hız Kontrol Pinleri
Hız kontrol pinleri ENA ve ENB 'dir. 2 dc motor kontrolünün hızları bu pinler ile yapılır.
ENAA motorunu, ENBB motorunu kontrol eder.
Bu pinlere uygulanan HIGH kodu hareket yani motorların dönmesini sağlar, LOW ise motorların durmalarını sağlar. Ancak, motor hız kontrolü Darbe Genişliği Modülasyonu (PWM) ile sağlanabilmektedir.
Arduino ile L293D Motor Sürücü Kullanarak 2 DC Motor Kontrolü
Artık l293d motor sürücü ile ilgili her şeyi öğrendiğimize göre, Arduino'muz ile bağlantısını sağlayabiliriz! Arduino ile 2 dc motor kontrolü için öncelikle motorlara güç kaynağı(pil, adaptör vb.) bağlayarak başlayalım. Projemizde, genellikle 2wd robot araba kiti gibi arduino dc motorları yani (Sarı TT motor) kullanıyoruz.
65mm tekerlek ve motor seti 3 ile 9V arasında çalışır. 9V güç kaynağını Vcc2 pinine bağlayalım.
Daha sonra, L293D'nin mantık devresi için 5 Volt sağlamamız gerekir. Vcc1 pinini Arduino'daki 5V çıkışa bağlayın.
Devredeki tüm toprakları ortak kullandığımızdan mutlaka emin olalım.
Şimdi, L293D IC'nin giriş ve etkinleştirme pinlerini (ENA, IN1, IN2, IN3, IN4 ve ENB), altı Arduino dijital çıkış pinine (9, 8, 7, 5, 4 ve 3) bağlayalım. Arduino çıkış pinlerinin 9 ve 3'ün her ikisinin de PWM(motor hız kontrolü) için etkin olduğunu unutmayın.
Son olarak, bir motoru OUT1, OUT2'ye ve diğer motoru ve OUT3, OUT4'e bağlayın.
Motorunuzun bağlantılarını teknik olarak sağ veya sol olarak değiştirebilirsiniz herhangi bir sıkıntı teşkil etmeyecektir. İşiniz bittiğinde, aşağıdaki resme benzeyen bir bağlantıya sahip olmalısınız.
Arduino ile DC Motor Kontrolü için Kod
Aşağıdaki kodlar, L293D motor sürücü ile bir DC motorun hızını ve dönüş yönünü kontrol edebilmeniz için pratik temel teşkil edecektir.
// Motor A connections
int enA = 9;
int in1 = 8;
int in2 = 7;
// Motor B connections
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup()
{
// Set all the motor control pins to outputs
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// Turn off motors - Initial state
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop()
{
directionControl();
delay(1000);
speedControl();
delay(1000);
}
// This function lets you control spinning direction of motors
void directionControl()
{
// Set motors to maximum speed
// For PWM maximum possible values are 0 to 255
analogWrite(enA, 255);
analogWrite(enB, 255);
// Turn on motor A & B
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
// Now change motor directions
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
// Turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
// This function lets you control speed of the motors
void speedControl()
{
// Turn on motors
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
// Accelerate from zero to maximum speed
for (int i = 0; i < 256; i++)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Decelerate from maximum speed to zero
for (int i = 255; i >= 0; --i)
{
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
// Now turn off motors
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
Kod Açıklaması:
Arduino kodu oldukça basittir. Herhangi bir kütüphanenin çalışmasını gerektirmez. Kodlar, L293D'nin kontrol pinlerinin bağlı olduğu Arduino pinlerini bildirmekle başlar. Kodun kurulum bölümünde, tüm motor kontrol pinleri dijital OUTPUT olarak her iki motoru da LOW veya OFF olarak çekilir.
Kodun döngü bölümünde, bir saniyelik aralıklarla iki kullanıcı tanımlı kod işlevi kullanılır.