PWM ve Arduino

PWM ve Arduino ile birçok projede analog sinyalleri dijital olarak kontrol edebilirsiniz. PWM (Pulse Width Modulation – Darbe Genişlik Modülasyonu), Arduino ile çeşitli cihazları kontrol etmenizi sağlayan temel bir tekniktir. Bu yazıda, PWM ve Arduino ile yapabileceğiniz projeler, PWM’in nasıl çalıştığı ve Arduino üzerinde PWM kullanmanın avantajları hakkında bilgi vereceğiz.

PWM Nedir?

PWM ve Arduino kullanırken, bir dijital sinyalin ortalama değerini ayarlayarak analog benzeri bir sinyal elde edebilirsiniz. PWM, dijital sinyali hızlı bir şekilde açıp kapatarak, bir cihazın gücünü değiştirmenizi sağlar. Bu teknik, Arduino ile LED parlaklığını kontrol etmekten motor hızlarını ayarlamaya kadar birçok alanda kullanılır.

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.

PWM Kullanım Alanları

PWM ve Arduino kullanılarak birçok farklı uygulama yapılabilir. İşte bazı yaygın kullanım alanları:

  1. LED Parlaklık Kontrolü: PWM ile bir LED’in parlaklığını kontrol etmek çok kolaydır. Arduino ile LED’in parlaklığını belirli bir düzeyde tutmak için PWM sinyali kullanılır.
  2. Motor Hızı Kontrolü: PWM ve Arduino kullanarak, DC motorlarının hızını hassas bir şekilde ayarlayabilirsiniz. Motorun hızını, PWM sinyalinin duty cycle’ını değiştirerek kontrol edebilirsiniz.
  3. Isı Kontrolü: PWM, bir ısıtıcıyı kontrol etmek için de kullanılır. PWM ve Arduino ile ısıtıcıyı açıp kapatarak ortalama sıcaklık değeri elde edilebilir.
  4. Ses Üretimi: Arduino ve PWM kullanarak sesler üretmek mümkündür. Örneğin, piezoelektrik hoparlör ile ses çıkışı sağlanabilir.
  5. Analog Değerler İçin Dijital Çözümler: PWM ve Arduino, analog verilerin dijital cihazlar ile üretilmesini sağlar. Bu, maliyetleri düşürür ve projelere esneklik kazandırır.

PWM ve Arduino Bağlantısı: 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 ve 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 ve Arduino

Kare dalga, bilindiği gibi “on” ve “off” konumlarını sağlar. 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 ve Arduino ile Projeler

PWM ve Arduino kullanarak yaratabileceğiniz projeler oldukça geniş bir yelpazeye yayılabilir. İşte bazı proje fikirleri:

  • LED Parlaklık Kontrolü: PWM sinyali ile bir LED’in parlaklığını hassas bir şekilde ayarlayın.
  • Motor Hızı Ayarı: PWM ile DC motorlarının hızını kontrollü bir şekilde değiştirin.
  • Ses Üretimi: Piezo buzzer kullanarak farklı tonlar üretin.
  • Isı Kontrolü: PWM ile bir ısıtıcıyı kontrol edin.

PWM Uygulama Alanları 

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.

PWM ile Neler Yapılabilir ?

  • Bir LED kısıp ya da parlatabilirsiniz.
  • 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 ve Arduino pwm ve arduino
Sigma – Delta Yöntemiyle PWM Tekniğinin Uygulanması

Arduino ve PWM: Hızlı PWM 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.

KARTPWM PİNİPWM FREKANSI
Uno, Nano, Mini3, 5, 6, 9, 10, 11490 Hz (pin 5 ve 6: 980 Hz)
Mega2 – 13, 44 – 46490 Hz (pin 4 ve 13: 980 Hz)
Leonardo, Micro, Yún3, 5, 6, 9, 10, 11, 13490 Hz (pin 3 ve 11: 980 Hz)
Uno WiFi Rev.23, 5, 6, 9, 10976 Hz
MKR boards0 – 8, 10, A3 (18), A4 (19)732 Hz
MKR1000 WiFi0 – 8, 10, 11, A3 (18), A4 (19)732 Hz
Zero3 – 13, A0 (14), A1 (15)732 Hz
Due2 – 131000 Hz
1013, 5, 6, 9pins 3 ve 9: 490 Hz, pins 5 ve 6: 980 Hz

PWM ve Arduino kullanımı, birçok projede büyük kolaylık sağlar. Bu teknik ile dijital sinyalleri analog gibi kullanarak enerji verimliliği sağlar ve cihazlarınızı hassas bir şekilde kontrol edebilirsiniz. Arduino ile PWM sinyalleri kullanarak, LED parlaklık ayarı, motor hızı kontrolü ve daha birçok farklı projeyi kolayca gerçekleştirebilirsiniz

 

 

Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.