PWM ve Arduino

PWM ve Arduino konumuza geçmeden yani Pulse Width Modulation hakkındaki makalemizi okumadan önce timer ve frekasın ne olduğunu bilmenizi şiddetle tavsiye ediyorum  ve konuya  başlıyorum..

Elektronik, sinyal işleme veya kare dalga dendiğinde genelde akıllara ilk olarak PWM (Pulse Width Modulation) tekniği gelir. Modülasyon işlemi gerçekleştiren bu tekniğin asıl amacı cihazlara verilen elektriğin gücünü kontrol altında tutmaktır.

Açılımı Pulse Width Modulation yani Sinyal Genişlik Modülasyonu olan bu teknik, sinyal işleme veya sinyal aktarma gibi daha çok elektronik devrelerin yanı sıra Arduino veya elektrik makineleri gibi özel uygulama alanlarında da yer alan bir tekniktir.

En basit haliyle bir sinyal modülasyon tekniği olarak tanımlanabilir. Sinyal bilgisinin aktarım için uygun hale çevirilmesi amacının yanı sıra güç kontrolü sağlamak ve elektrik makineleri, güneş pili şarj üniteleri gibi özel devrelere destek olmak amacı da taşır.

Duty Cycle Nedir?

Bu kontrolde tamamen anahtarlama ile sağlanır. Anahtarlama ne kadar hızlı yapılırsa, PWM ile aktarılan sinyalin gücü o kadar da artar. Örneğin bir lambaya gönderilen sinyalde PWM tekniğine ihtiyaç duyuluyorsa, bu teknik 120 Hz frekans değerinde uygulandığında maksimum verim elde edilebilir.

pwm arduino, PWM ve Arduino

“Duty Cycle” yani görev döngüsü olarak tanımlanan bir kavram bulunuyor ve PWM tekniğinde de sıkça karşımıza çıkıyor. Görev döngüsü kavramı aslında yapılan işlemin periyodunu belirtiyor. Bu döngü düşük seviyelerde ise aktarılan güç düşük olurken, döngünün yüksek seviyelerinde yüksek güç aktarılıyor.

PWM ve Frekans kontrolü aslında bir çoğunuzun evinde gördüğü, kısılıp açılabilir lambalar gibidir. Işığın şiddetini ayarlamak için bir nevi potansiyometre kullanılır, burada ise anahtarlama (açma kapama) işlemi olarak uygulanır.

Arduino bünyesinde de PWM tekniği kullanılabiliyor. Arduino bünyesinde kullanılan PWM tekniği ile dijital sonuçlardan analog sonuçlar elde edilebiliyor. Bunun yanı sıra özellikle kontrol için ihtiyaç olan kare dalga üretimi de gerçekleşiyor.

pwm arduino, PWM ve Arduino

Kare dalga, bilindiği gibi “on” ve “off” konumlarını sağlıyor

 

 

 

 

Böylece kare dalga gönderildiğinde “on” konumunda 5V uygulanırken, “off” konumunda 0V uygulanmış oluyor. İşte bu “on” kısmının aktif olduğu genişliğe “Pulse Width” yani “Sinyal Genişliği” adı veriliyor. Bu doğrultuda istenilen sinyal genişliği elde etmek için de modülasyon tekniği uygulamanız gerekiyor ki bu da PWM’in temel mantığıdır.

Arduino ile yanıp sönen bir LED devresi kurmak veya Arduino ile DC motor kontrolü gerçekleştirmek için PWM tekniğini kullanmamız gerekiyor. Bu teknik de Arduino’ya gömülen yazılımda yatıyor. “analogWrite(…)” fonksiyonu ile görev döngüsünün miktarı belirleniyor ve kare dalga elde ediliyor.

PWM Uygulama Alanları 

  • Direkt Tork Kontrol (DTC): 

    AC motorlarda kullanılmak üzere geliştirilen bir PWM tekniğidir. Delta modülasyon tekniğinden üretilmiştir. Motora gönderilen sinyal belirli bir filtreden geçirilir ve motorun torku ile manyetik akı kontrol altında tutulur.

  • Zaman Bölücü:

    Özellikle mikroişlemcilerin PWM çıkışları tarafından kullanılırlar. Değişken görev döngüsüne sahip devrelerde de kullanılabilirler.

  • Haberleşme Sistemleri:

    Telekomünikasyon sistemlerinde sinyallerin önemi çok büyük ve bu sinyallerin kontrol edilmesi ve modülasyon tekniğine uygun olması gibi kabiliyetler de çok önemli. “0” ve “1”lerden oluşan lojik haberleşme devrelerinde kare dalga ve PWM en sık kullanılan 2 unsur olarak görülüyor.

  •  Güç Aktarımı ve Elektrik Makineleri:

    Güç kontrolü ve aktarılan güç miktarının ayarlanması da elektrik-elektronik dünyasında önemli unsurların başında geliyor. Yüksek frekanslı devrelerde PWM sinyal kontrolü sayesinde bu durum gerçekleşebiliyor.

  • Voltaj Regülatör Devreleri: 

    Voltaj regülatör devrelerinde de PWM tekniğine başvurulabilir. Uygun görev döngüsüne anahtarlama yaparak voltajı kesme ve düzenleme işlemleri ile regüle edebilen PWM tekniği sonucunda bir takım elektronik gürültü oluşuyor. Ancak LC filtre ile bu durumu aşmak mümkün.

  •  Ses Efektleri ve Yükselticiler:

    Osilatörler ile birlikte bazı ses efektlerini elde etmek için PWM tekniği kullanılabiliyor. Aynı zamanda yükseltici devrelerinde ve amfilerde kontrol amacıyla da PWM tekniğine başvuru yapılabiliyor.

  • Diğer Elektriksel Alanlar:

    Güneş enerji sistemlerinde ve rüzgar enerjisi sistemlerinde kullanılan mikro inverterlerin dizaynları PWM tekniğine uygun olarak gerçekleştirilir. Aynı zamanda PWM sinyali FET tipi transistörlere iletilir. Ayrıca PWM tekniği robotik devrelerde ve servo motor devrelerinde yine kontrol amacıyla kullanılabilir.

Çeşitli devre yapılarına göre MOSFET veya IGBT kullanılabilirken giriş gücünü ayarlamak için de Varyak kullanılabiliyor. Ancak bazı devrelerde ise bu elemanlar istenilen fonksiyonu yerine getiremediğinde PWM kontrolüne başvuruluyor. Özellikle motor devir kontrolü için PWM tekniği sık sık karşımıza çıkıyor.

PWM ile Neler Yapılabilir ?

  • Bir LED kısıp, ışını arttırabilirsiniz.
  • Bir analog çıkış sağlayabilirsiniz; tabii dijital çıkışlar filtrelendiyse,
  • %0 ile %100 arasında (0v – 5v) bir voltaj çıkışı sağlayabilirsiniz
  • Ses sinyalleri üretebilirsiniz
  • Motorlar için hız kontrolü sağlayabilirsiniz.
    Modüle edilmiş sinyal üretebilirsiniz (Ifrared LED Kumandaları gibi)
void setup(){
     pinMode(13, OUTPUT);
}

void loop(){
     digitalWrite(13, HIGH);
     delayMicroseconds(100); // Yaklaşık %10 döngü 1KHz de
     digitalWrite(13, LOW);
     delayMicroseconds(1000 - 100);
}

 

PWM Tekniğinin Prensipleri 

PWM tekniğinin temeli kare dalga üretmekte yatıyor. Bu kare dalga da genellikle referans olarak aldığı dalganın ortalaması kadar büyüklüğe sahip oluyor. Bunun yanı sıra sistemdeki dalganın büyüklüğü ise görev döngüsünün büyüklüğü ile doğru orantılıdır.PWM dalgasını elde etmenin birden fazla yöntemi bulunuyor. Bunları listelersek:

♦ Delta: Delta modülasyonlu PWM sinyali, integral alıcı ve limitleyici devre yapıları ile elde edilir. İntegral sonucunun limitlere değmesi “off”, diğer durumlarda “on” durumu oluştuğu için kare dalga oluşur.

♦ Sigma – Delta: Bu modülasyonda ise çıkış sinyali, referans alınan sinyalden çıkartılır. Böylece hata sinyali elde edilmiş olur. Hata sinyalinin integralinin sonucuna göre eğer limite değiyorsa “off”, değmiyorsa “on” durumu oluşturularak kare dalga elde edilir.

♦ Boşluk – Vektör: 3 fazlı AC uygulamalar için algoritma kullanılarak kare dalga elde edilir.

pwm arduino, PWM ve Arduino
Sigma – Delta Yöntemiyle PWM Tekniğinin Uygulanması

Hızlı PWM ve Kullanımı;

ATmega çipinin kendi PWM entegrelerini kullanarak yazılım tabanlı PWM’den  yani analogwritekodundan daha hızlı PWM değerleri alınabilir

Kayıtlar ve Bitler;

Doğru bit kullanımı için zamanlayıcılar arasında ve cihazlar arasında emin olmak için mutlaka  Arduino’da kullanılan ATmega datasheet sayfasına bakın.

Kullanılabilir 2 Hızlı Arduino PWM Modu vardır yani;

Hızlı PWM’de 62.5kHz frekansında çalışabilir ve bu frekansı yavaşlatmak için faktörel boyutları kullanabiliriz yani; 8, 64, 256 or 1024. Bu mod açıklamasından karmaşık geliyor ama sadece standart PWMden ibaret , normal PWM modundan hızlı olması haricinde bir farkı yok.

 

Faz Doğrulaması PWMde bize 31.25kHz, verecektir bunu yavaşlatmak için aşağıdaki faktörlerle daha iyi anlayabilirsiniz

//timer 0 ve 255 arasında çalışabilir yada, 0 dan sabit bir değere kadar.
//bu kodda "x"  "0", "1" yada "2" timer 0, 1 yada 2 için kullanılmıştır.
//
//timer ayarı
//  Seçenek                          Prescale faktörü
//  TCCRxB = _BV(CS00);              1
//  TCCRxB = _BV(CS01);              8
//  TCCRxB = _BV(CS00) | _BV(CS01);  64
//  TCCRxB = _BV(CS02);              256
//  TCCRxB = _BV(CS00) | _BV(CS02);  1024

Arduino Uno için

Timer output	Arduino output	Chip pin	Pin name
OC0A			6				12			PD6
OC0B			5				11			PD5
OC1A			9				15			PB1
OC1B			10				16			PB2
OC2A			11				17			PB3
OC2B			3				5			PD3

OCRxA registeri ile pinlerden birini fast pwm için ayarlayabilirsiniz.

 

Timer0 PWM Output

Timer0 arduino nun genel kullanım timerıdır çoğu sensör ve kütüphane bu timerı kullanır fakat bunu değiştirmekte oldukça basit, kütüphanenin .c dosyasında kısa bir CONTROL+F araması ile timerı değiştirebilirsiniz bunun yanında timer0 ın PRESACE FACTOR ünüde "hardware\arduino\cores\arduino\wiring.c"yoluyla değiştirebilirsiniz fakat bunun sonucu ile milis,micros,delay komutlarını istediğiniz gibi çalışmayabilir. Ayrıca aynı anda bir timerı kullanamayız bu yüzden fonksiyona göre timerlara görevi dağıtmalıyız örnek vermek gerekirse RadioHead kütüphanesi ile TextToSpeech kütüphanesi aynı timerı kullanırlar, bu sebepten derleme hatası ile karşılaşırsınız bunu önlemek için herhangi birinin .c kodunda timerı değiştirmeniz yeterli olacaktır.

 

Değiştirilmemiş pwm pin frekansları

KARTPWM PİNİPWM FREKANSI

Uno, Nano, Mini

3, 5, 6, 9, 10, 11

490 Hz (pin 5 ve 6: 980 Hz)

Mega

2 – 13, 44 – 46

490 Hz (pin 4 ve 13: 980 Hz)

Leonardo, Micro, Yún

3, 5, 6, 9, 10, 11, 13

490 Hz (pis 3 ve 11: 980 Hz)

Uno WiFi Rev.2

3, 5, 6, 9, 10

976 Hz

MKR boards *

0 – 8, 10, A3 (18), A4 (19)

732 Hz

MKR1000 WiFi *

0 – 8, 10, 11, A3 (18), A4 (19)

732 Hz

Zero *

3 – 13, A0 (14), A1 (15)

732 Hz

Due **

2-13

1000 Hz

101

3, 5, 6, 9

pins 3 ve 9: 490 Hz, pins 5 ve 6: 980 Hz