#07 Arduino ile DC Motor Sürme


Merhaba Arkadaşlar...
Öncelikle niçin motorları mikrokontrolcülerimize direk bağlayıp süremiyoruz da motor sürücleri kullanmamız gerekiyor? Ona değinelim... Arduino gibi bir mikrokontrolcünün giriş çıkış pinleri maksimum pin başına 50mA akım sağlayabiliyor. Buda motorların çalışması için yeterli değil. (Küçük Motorlar dışında) Buna rağmen Arduino'ya güçlü bir motor bağlayıp sürmeye çalışırsanız motor aşırı akım çekerek Arduino'ya hatta PC'nize zarar verebilir. İşte bu sorunu motor sürücüler çözüyor.. Motora sağlanacak akımı bir dış güç kaynağından almanızı buna rağmen motoru Arduino ile kontrol edebilmenizi sağlıyor. Bu dış güç kaynağı bir pil olabilir.

Birazda L298N (Motor Sürücüsü) 'ne değinelim birazda. Aynı anda iki motoru birbirinden bağımsız olarak sürebiliyor. O yüzden buna çift kanallı motor sürücü diyoruz. Piyasada tek, çift ve daha fazla kanallı motor sürücüleri mevcuttur. Bu sürücüler motorlara 5 ile 46 Volt arası güç kanal başına 2 Amper akım sağlayarak onları sürebiliyor. Tam kapasitede çalışınca haliyle oldukça ısınan parçalar bunlar.. Bu yüzden etkili bir şekilde soğutulmaya ihtiyaç duyar.

L298N i çalıştırmamız için H-Köprüsü dediğimiz bir devreye ihtiyacımız olacak. Bunu manuel olarak hazırlamamız gerekecek. H-Köprüsü dediğimiz özellik motor sürücünün bir motoru hem ileri hemde geri sürebilmesi sağlıyor. Bu köprüyü kendimizde yapabiliriz. Ama biz bunla uğraşmayıp L298N'in bir kart haline getirilmiş H-Köprüsü devresi hazırlanmış kullanımı pratikleştirilmiş versiyonunu kullanacağız.


Bu kartında kalbinde L298N motor sürücü bulunuyor. Farkıysa karta bağlanıptüm girş ve çıkışlar hazırlanıp etiketlenerek sunulmuş. Ek olarak sürücüye bir soğutucu takılarak ısınma problemi ortadan kaldırılmış.

L298 entegresiyle motor sürücü kartının yapımı
L298 entegresinde 15 adet pin bulunmaktadır. Bu pinlerden bazıları motorlara, bazıları Arduino'ya bazıları ise besleme kaynağına bağlanacaktır. L298 entegresinin pinleri aşağıdaki resimde gösterilmiştir.


Entegre üzerinde bulunan pinlere ve bu pinlerin görevlerine kısaca göz atalım:
  • INPUT 1, 2, 3 ve 4 (5, 7, 10 ve 12. pinler): INPUT pinleri motorların dönme yönünün kontrolü için Arduino'ya bağlanır. INPUT 1 ve 2 pinleri 1. motorun, INPUT 3 ve 4 pinleri ise 2. motorun kontrolünde kullanılır. Örneğin 1. Motorun kontrolü için, INPUT 1 pini 5 volt, INPUT 2 pini 0 volt yapılır ise motor ileri yönde dönmeye başlar. Eğer INPUT 1 pini 0 volt ve INPUT 2 pini 5 volt yapılır ise motor geri yönde dönmeye başlar. İki pinin aynı anda 5 volt olması motoru kilitleyerek fren yapmasını sağlar. İki pininde 0 volt düzeyinde olması ise motorun boşta olmasına neden olup kısa süre sonra motorun durmasını sağlar.
  • OUTPUT 1, 2, 3 ve 4 (2, 3, 13 ve 14. pinler): Bu pinler motorlara bağlanan pinlerdir. OUTPUT 1 ve 2. pinler 1. Motora, OUTPUT 3 ve 4. pinler ise 2. motora bağlanır.
  • ENABLE A ve ENABLE B (6. ve 11. pinler): Bu iki pin motorların dönüş hızını ayarlamak için kullanılır. Bu yüzden bu pinleri Arduino'nun PWM ayaklarına bağlamamız gerekir. PWM sinyalinin görev zamanına göre motorun hızı arttırılabilir veya azaltılabilir. ENABLE A pini 1. motorun, ENABLE B pini ise 2. motorun hızını kontrol etmek için kullanılır. Eğer hız kontrolü yapılmayacak sa bu pinler 5 volt hattına bağlanabilir.
Hatırlatma: PWM sinyali bir kare sinyaldir. Bu sinyalin 5 volt ve 0 volt düzeylerinin oranına görev zamanı denir. Görev zamanı çıkış sinyalinin genliğini belirlediği için motorların dönme hızını ayarlamada kullanılır. Motorlar için PWM sinyalini üretmek için Arduino'nun analogWrite fonksiyonunu kullanacağız.
  • VSS (LOGIC SUPPLY voltAGE – 9. pin): Adından da anlaşıldığı gibi bu pinin 5 volta bağlanması gerekmektedir. Devrenin kararsızlığını azaltmak için bu pinle toprak arasına 100nF'lık kondansatör bağlanabilir.
  • GND (8. pin): Besleme hattının devreyi tamamlayabilmesi için bu pin toprak hattına bağlanması gerekir. Ayrıca entegrenin üzerindeki demir de GND pinine bağlıdır. Bu metalin devre kurulumunda yanlış pinlere değip kısa devre yapmamasına özen göstermek gerekir.
  • VS (4. pin): Entegrenin motorlara vereceği enerjiyi aldığı ana besleme hattıdır. Bu hatta bağlanacak enerji kaynağı motorlara verileceği için, motorlarımızın özelliğine göre besleme gerilimi kullanmalıyız. Genellikle bu hatta 7 ila 12 volt arasında besleme kaynakları bağlanmaktadır.
Not: Motorun ileri gitmesi beklenirken geri yönde dönmesi, OUTPUT pinlerinin ters bağlanmış olduğundan kaynaklanmaktadır. Bu pinlerin yerleri değiştirilerek motorların doğru yönde dönmesi sağlanabilir.

Motor sürücü bağlantısını aşağıdaki gibi yapınız.

Arduino Motor Sürücü
8 INPUT 1
9 INPUT 2
13 INPUT 3
12 INPUT 4
11 ENABLE A
10 ENABLE B
Motor Motor Sürücü
Motor1 + OUTPUT 1
Motor1 - OUTPUT 2
Motor2 + OUTPUT 3
Motor2 - OUTPUT 4
Besleme Motor Sürücü
+12 Volt VCC
Toprak (-Uç) GND
+5 Volt Vs
Devre kurulumunu yaptığımıza göre aşağıdaki kodu Arduino'ya yükleyerek devremizi test edelim. Kendi motor sürücüsünü kurmuş olanlar da aşağıdaki Arduino kodunu kullanabilirler.
int DonmeHizi = 175; 
/* bu değişken ile motorların dönme hızı kontrol edilebilir */

/* motor sürücüsüne bağlanacak INPUT ve ENABLE pinleri belirleniyor */
const int sagileri = 9;
const int saggeri = 8;
const int solileri = 12;
const int solgeri = 13;
const int solenable = 11;
const int sagenable = 10;

void ileri(int hiz){
/* ilk değişkenimiz sag motorun ikincisi sol motorun hızını göstermektedir.
* motorlarımızın hızı 0-255 arasında olmalıdır.
* Fakat bazı motorların torkunun yetersizliğiniden 60-255 arasında çalışmaktadır.
* Eğer motorunuzdan tiz bir ses çıkıyorsa hızını arttırmanız gerekmektedir.
*/
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */

analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}

void sagaDon(int hiz){
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,LOW); /* geri dönme sağlanıyor */
digitalWrite(saggeri,HIGH); /* geri dönme sağlanıyor */

analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, HIGH); /* ileri dönme sağlanıyor */
digitalWrite(solgeri,LOW); /* ileri dönme sağlanıyor */
}

void solaDon(int hiz){
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,HIGH); /* ileri dönme sağlanıyor */
digitalWrite(saggeri,LOW); /* ileri dönme sağlanıyor */

analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, LOW); /* geri dönme sağlanıyor */
digitalWrite(solgeri,HIGH); /* geri dönme sağlanıyor */
}

void geri(int hiz){
analogWrite(sagenable, hiz); /* sağ motorun hız verisi */
digitalWrite(sagileri,LOW); /* geri yönde dönme sağlanıyor */
digitalWrite(saggeri, HIGH); /* geri yönde dönme sağlanıyor */

analogWrite(solenable, hiz); /* sol motorun hız verisi */
digitalWrite(solileri, LOW); /* geri yönde dönme sağlanıyor */
digitalWrite(solgeri, HIGH); /* geri yönde dönme sağlanıyor */
}

void dur()
{
/* Tüm motorlar kitlenerek durma sağlanıyor */
digitalWrite(sagileri, HIGH);
digitalWrite(saggeri, HIGH);
digitalWrite(solileri, HIGH);
digitalWrite(solgeri, HIGH);
}

void setup(){
/* motorları kontrol eden pinler çıkış olarak ayarlanıyor */
pinMode(sagileri,OUTPUT);
pinMode(saggeri,OUTPUT);
pinMode(solileri,OUTPUT);
pinMode(solgeri,OUTPUT);
pinMode(sagenable,OUTPUT);
pinMode(solenable,OUTPUT);
}

void loop(){
ileri(DonmeHizi);
delay(1000);
dur();
delay(1000);
solaDon(DonmeHizi);
delay(1000);
dur();
delay(1000);
sagaDon(DonmeHizi);
delay(1000);
dur();
delay(1000);
geri(DonmeHizi);
delay(1000);
dur();
delay(1000);
}
Yukarıdaki kodla motorlar dönmeye başlamalıdır. Eğer motorların dönmesinde bir sorun var ise, öncelikle kablo bağlantılarınızı gözden geçiriniz. INPUT pinleri hatalı bağlanmış olabilir, birbiri arasında yerlerini değiştirmeyi deneyebilirsiniz. Motorun ileri yönde dönmesi beklenirken geri yönde dönüyorsa motor bağlantılarının yerini değiştirebilirsiniz.

Bu bölümde Arduino ile DC motor kontrolünün nasıl yapıldığını öğrenmiş olduk. Motor kontrolü için gereken motor sürücülerin türlerini ve kendimiz nasıl motor sürücü yapacağımızı da öğrendik. Artık hareket gerektiren projelerimizde motor sürücüler yardımıyla DC motorlarımızı kullanabiliriz.

Not: H Köprüsü DC motorların ileri ve geri yönde hareket etmesini sağlayan devredir. Devrede 2 adet NPN ve 2 adet PNP transistör bulunur.

H Köprüsü ile ilgili detaylı bilgi için tıklayınız.
Ad

Arduino Autocad Bilim-Teknoloji Biyomedikal Sistemler C-Programlama C# C# Programlama Diferansiyel Denklemler Dijital Kontrol Sistemleri Elektrik Devreleri 1 Elektrik Devreleri 2 Elektrik Makineleri 1 Elektrik Makineleri 2 Elektrik Tesislerinde Koruma Elektromantetik Alan Teorisi Elektromantetik Dalga Teorisi Elektronik 1 Elektronik 2 Elektronik-Devreler EmguCV Genel Fizik Genel Kimya Genel Matematik Gömülü Linux Güç Elektroniği Haberleşme Sistemleri İşaret ve Sistemler Lineer-Cebir Lojik Devreler Malzeme Bilimi MATLAB Mikroişlemciler Olasılık ve İstatistik Otomatik Kontrol Sistemleri PLC-Otomasyon Proje Yönetimi ve Girişimcilik Raspberry Pi Sayısal Analiz Sayısal İşaret İşleme Teknik-Kutuphane Termodinamik Yüksek Gerilim Tekniği
false
ltr
item
Çağlar GÜL: #07 Arduino ile DC Motor Sürme
#07 Arduino ile DC Motor Sürme
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlmc51y75RPg-ZSQmf-iFGYz1qmRpKAnI_q-XEbThLIuZNln_tdACLlqwV7guFC2oLmuLjbiXMYY67ziAgk03lvlUkgeAV3yQqWh2_yBxc4qDdmlyiaUNlV89-w0XbZrZRHApRAKQW4HM/s1600/DC-motor.png
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlmc51y75RPg-ZSQmf-iFGYz1qmRpKAnI_q-XEbThLIuZNln_tdACLlqwV7guFC2oLmuLjbiXMYY67ziAgk03lvlUkgeAV3yQqWh2_yBxc4qDdmlyiaUNlV89-w0XbZrZRHApRAKQW4HM/s72-c/DC-motor.png
Çağlar GÜL
https://elektronikafa.blogspot.com/2015/09/07-arduino-ile-dc-motor-surme.html
https://elektronikafa.blogspot.com/
http://elektronikafa.blogspot.com/
http://elektronikafa.blogspot.com/2015/09/07-arduino-ile-dc-motor-surme.html
true
871250089272898028
UTF-8
Not found any posts Not found any related posts VIEW ALL Readmore Reply Cancel reply Delete By Home PAGES POSTS View All RECOMMENDED FOR YOU Tag ARCHIVE SEARCH ALL POSTS Not found any post match with your request Back Home Contents See also related Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sun Mon Tue Wed Thu Fri Sat January February March April May June July August September October November December Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec just now 1 minute ago $$1$$ minutes ago 1 hour ago $$1$$ hours ago Yesterday $$1$$ days ago $$1$$ weeks ago more than 5 weeks ago Followers Follow THIS CONTENT IS PREMIUM Please share to unlock Copy All Code Select All Code All codes were copied to your clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy