Arduino ile DC Motor PWM Kontrolü

         Robotik uygulamalarında en çok kullanılan eyleyici yada tahrik elemanı olan motorların kontrolünün yapılmasıdır. Her şeyde olduğu gibi Arduino programlaması bunu da çokça kolay bir seviyeye çekmiştir.
         Öncelikle PWM nedir bunun üzerinde duralım. PWM (Pulse Width Modulation) darbe genişlik modülü basit bir mantıkla belirli bir periyot içerisinde motora voltajın ne kadar sürede uygulanacağıdır.


            Yukarıdaki şemada görüleceği gibi kare dalgaların genlikleri voltajın uygulanma süreleri verilmiştir. Buna Duty Cycle yani uygulama süresi denilebilir. En üstteki grafikte 0% Duty Cycle yani 0 Volt uygulandığı durumdaki dalga şematize edilmiştir. Diğer bir grafikte ise Duty Cycle 50% dir. Burada bir T periyodunun yarısı süresince +5V uygulanırken Diğer yarısında 0V uygulanmış demektir. Benzer şekilde 75% Duty Cycle için 3/4T periyodunda +5V 1/4T periyodunda ise 0V uygulanmıştır. Peki bu ne işe yarar ? PWM periyorları saniyenin çok çok altında sürelerde geçekleşir. Yani +5v ile 0v un uygulanma süreleri o kadar kısadırki çıkışta ne +5V ne de 0v alabiliriz. Onun yerine Duty Cycle değerine göre bu voltajların ortalaması olan PWM voltajı elde edilmiş olur. Yani biz uygulamak istediğimiz voltajı PWM çıkış değerine göre belirleyebiliriz. Onuda şu şekilde yapıyoruz.
           Arduino'da 8 bitlik PWM çıkış değeri vardır. Yani biz PWM değerini 0 ile 255 değerleri altında ayarlayabiliriz. Bu demek oluyor ki çıkıştaki 5 V ' u 255 parçaya bölerek elde edilen voltajın katlarını çıkış olarak verebiliriz. Formulize edecek olursak;


Arduino'da PWM çıkışı almak için gerekli kod ise şöyledir;  analogWrite(PWM_pini , Duty Cycle);

Bir örnek üzerinden mantığını tekrarlayalım.
Arduino Uno kartımızın 6 nolu PWM pininden çıkış almak isteyelim. 

analogWrite(6, 127); --- (5/255)x127 = 2,5 Volt çıkış alınır.
analogWrite(6, 64); --- (5/255)x64 = 125 Volt çıkış alınır.

Yani basit bir mantıkla 1 PWM değeri 5/255= 0,020 V'a eşittir yaklaşık olarak.

Şimdi motorumuza kontrol etmek için bir Arduino PWM kontrol örneği yapalım.


int PWMpin = 6; //Motoru tetikleyen pin
void setup()
{
  //PWM yada Anolag işlemler için ilgili pinler için setup ayarı yapılmaz.
}

void loop()
{
  // motorumuzun hızını belirli sürelerle arttırıp azaltalım.

  for(int k=0; k<9 ; k++>
  {
    analogWrite(PWMpin,(32*k)-1); // k'nın 8 değerine kadar PWM değeri yaklaşık 32 nın k           katları olarak artacak.voltaj 0'dan +5V çıkacak. 
    (k=8 için PWM =256 olamaz o yüzden -1 kullanıldı.)
  }
  for(int k=8; k>-1 ; k--)
  {
    analogWrite(PWMpin,255/k); // k'nın 0 değerine kadar PWM değeri 32 nin k katları olarak       // azalacak. voltaj +5V'dan 0 ' a düşecek.
  }
}

Unutulmaması gereken önemli bir şey motorların çalışırken yüksek akım çektikleri ve bu yüzden Arduino ve benzeri kontrolcülere asla direk bağlanmaması gerektiğidir. Bunun için mutlaka Arduino ile motor arasına bir motor sürücü devre bağlanır.

İyi Çalışmalar...

2 yorum

Click here for yorum
Tymofei
admin
Aralık 19, 2018 ×

Merhabalar makine mühendisliği okuyan ama elektronik alanında uzmanlaşmak isteyen bir öğrenciyim.Bundan kime bahsetsem ikisinin ayrı bir dal olduğunu ve mantıksız olduğunu söylüyor.Ne düşünüyorsunuz?Birde nereden başlamam gerekir bunun için özellikle kontrol alanında uzmanlaşmak istiyorsam?

Reply
avatar
mvaslan
admin
Ocak 07, 2019 ×

Merhaba, biraz geç oldu. Blogla ilgilenmiyorum artık. Ama sorunu yanıtlamak isterim. Kontrol alanında uzmanlaşmak yada kontrol alanı Makine mühendisliğinin de bir alanı zaten. Ama biz makine mühendisleri sistemin dinamiklerini hesaplarız önce. Sonra o sistemi kontrol etmek için gerekli bir kontrolcü oluştururuz. Bu kontrolcü bazen bilgisayar üzerinde bir software olur MATLAB vb gibi. Belki PLC, belki gelişmiş kontrol sistemleri belki de bazen Arduino olur. Bu kontrolü sağlamak için bir miktar yazılım ve matematik bilgisi gerekir. Uygulamak içinde bir miktar elektronik bilgisi gerekir. Kısaca şöyle anlatayım. Boyutları ve ağırlıkları belirlenmiş bir güneş kollektörünü kontrol etmek için gerekli dinamik hesabı yapmalısın. Tahrik edecek motor, gücü, ataleti, ihtiyacın olan hız, açısal hız bunları bir mühendis olarak hesaplarsın gerekli sistemi kurarsın sonra bu sistemi kontrol etmek için bir ünite seçersin PLC, PC, Arduino vs. Gerekli hareketi sağlayacak olan sistemleri seçersin; motor sürücüler, sensörler. Bu bağlamda belirli bir noktaya kadar elektronik ve yazılım bilmen gerekecektir. Ama bir motor sürücü nasıl tasarlanır kısmındaki elektronik bilgisi bizim için çok da önemli değildir. Biz sistemimizi çalıştıracak yeterlilikte bir motor sürücü araştırıp, kullanmayı öğrenip uygularız. Çoğu zaman bunu da yapmayız belkide. Durum böyle kendi fikrimce. Kontrol biz makine mühendislerinin de bir alanıdır. Hayatta Başarılar diliyorum umarım bir şeyler ifade etmiştir.

Reply
avatar