PWM (darbe genişlik modülasyonu), bir sinyali çok hızlı açıp kapatarak ortalama gücü ayarlama yöntemidir. Sinyalin bir periyot içinde açık kaldığı süre görev oranı (duty cycle) olarak ifade edilir: 12V'luk bir kaynakla %50 görev oranı, yüke ortalama yaklaşık 6V gibi etki eder. LED parlaklığı, DC motor hızı, servo konumu ve ısıtıcı gücü PWM ile kontrol edilir. Arduino'da analogWrite(pin, 0-255) ile PWM üretilir.
Bir LED'in parlaklığını yavaşça artırmak, bir fanın hızını ayarlamak ya da bir servo motoru belirli bir açıya getirmek... Bunların hepsi aynı yöntemle yapılır: PWM. Bu rehberde PWM'in ne olduğunu, görev oranı ve frekansın anlamını ve Arduino ile nasıl kullanıldığını anlatıyoruz.
PWM nedir?
PWM (Pulse Width Modulation, darbe genişlik modülasyonu), bir dijital sinyalin sabit bir frekansta çok hızlı açılıp kapatılması ve açık kalma süresinin değiştirilmesiyle yüke giden ortalama gücün ayarlanmasıdır. Dijital bir pin yalnızca açık (ör. 5V) ya da kapalı (0V) olabilir; PWM bu iki durum arasında hızla geçiş yaparak ara değerler varmış gibi bir etki oluşturur.
Görev oranı ve frekans
- Görev oranı (duty cycle): Bir periyot içinde sinyalin açık kaldığı sürenin yüzdesi. %0 sürekli kapalı, %100 sürekli açık, %25 periyodun dörtte biri açık demektir.
- Frekans: Sinyalin saniyede kaç kez açılıp kapandığı. Görev oranı sabitken frekans değişse de ortalama güç aynı kalır.
- Ortalama gerilim: Yaklaşık olarak görev oranı × besleme gerilimi. Örneğin 12V'ta %50 görev oranı, yüke ortalama yaklaşık 6V gibi etki eder.
PWM'in kullanım alanları
| Uygulama | Ne kontrol edilir | Tipik frekans |
|---|---|---|
| LED parlaklığı | Ortalama ışık | Titremenin fark edilmeyeceği kadar yüksek (yüzlerce Hz ve üzeri) |
| DC motor hızı | Ortalama gerilim ve hız | Birkaç kHz ile 20 kHz üzeri (duyulabilir vınlamayı önlemek için) |
| Servo motor | Açı (darbe süresiyle) | 50 Hz, 1-2 ms darbe |
| Isıtıcı ve Peltier | Güç | Düşük frekans yeterli olabilir |
| DC-DC dönüştürücüler | Çıkış gerilimi | Onlarca-yüzlerce kHz |
Arduino'da PWM nasıl kullanılır?
- Arduino Uno'da PWM yalnızca ~ işaretli pinlerde vardır: 3, 5, 6, 9, 10 ve 11.
- analogWrite(9, değer) ile 0-255 arası bir değer verin: 0 = %0, 127 ≈ %50, 255 = %100 görev oranı.
- Uno'da çoğu PWM pininin frekansı yaklaşık 490 Hz, 5 ve 6 numaralı pinlerin ise yaklaşık 980 Hz'dir.
- ESP32'de PWM, istenen frekans ve çözünürlükte (ör. 5 kHz, 8 bit) ayarlanan LEDC kanallarıyla üretilir ve neredeyse her pinde kullanılabilir.
Görev oranını ve frekansı görmek için PWM sinyalini osiloskopla izleyebilirsiniz; bkz. osiloskop rehberi.
PWM ile yüksek akımlı yük nasıl sürülür?
Arduino pini yalnızca küçük akımlar verebildiği için motor, LED şerit ya da ısıtıcı gibi yükler PWM sinyaliyle sürülen bir MOSFET ya da motor sürücü üzerinden kontrol edilir.
- DC yükler için lojik seviyeli bir MOSFET ya da hazır MOSFET PWM anahtarlama modülü; ayrıntılar MOSFET rehberimizde.
- Motor yönü de kontrol edilecekse H-köprülü sürücüler; bkz. L298N rehberi.
- Kodsuz hız kontrolü için hazır PWM modülleri: 6-30V 5A ekranlı PWM motor sürücü, yüksek akım için 12-60V 70A PWM motor hız kontrol modülü.
- Motor ve bobin gibi endüktif yüklerde yüke ters paralel diyot kullanılmalıdır.
Motor hız kontrolünü DC motor hız kontrolü yazımızda ayrıntılı anlattık.
PWM'den analog gerilim elde etmek
PWM sinyali bir direnç ve kondansatörden oluşan alçak geçiren filtreden (RC filtre) geçirildiğinde, görev oranıyla orantılı düzgün bir DC gerilim elde edilir. Bu yöntem basit bir dijital-analog dönüştürücü gibi kullanılır. Endüstriyel cihazlarda PWM'i 0-10V gibi analog sinyale çeviren hazır modüller de bulunur; ör. 2 kanal PWM-DC çevirici. Test ve deneme için ayarlanabilir PWM sinyal jeneratörü modülü ya da 3 kanal PWM sinyal jeneratörü kullanılabilir.
Sık sorulan sorular
PWM ile analog sinyal aynı şey mi?
Hayır. PWM dijital bir sinyaldir ve yalnızca iki seviye arasında hızla gidip gelir. Yük ya da filtre bu hızlı değişimi ortalayarak analog bir değer gibi algılar.
LED neden PWM'de titriyor?
PWM frekansı düşükse göz ya da kamera açılıp kapanmayı fark eder. Frekansı yükseltmek titremeyi ortadan kaldırır; özellikle kamerayla kayıt yapılan ortamlarda yüksek frekans önerilir.
Motor PWM'de neden vınlama yapıyor?
PWM frekansı insan kulağının duyabileceği aralıktaysa motor sargıları bu frekansta titreşir ve ses çıkar. Frekansı yaklaşık 20 kHz'in üzerine çıkarmak sesi büyük ölçüde azaltır.
Servo motor PWM'i farklı mı?
Evet. Servolarda görev oranı değil, yaklaşık 20 ms'lik periyot içindeki darbenin süresi (1-2 ms) açıyı belirler. Bu yüzden servolar analogWrite yerine Servo kütüphanesiyle kontrol edilir; bkz. servo motor rehberimiz.
Görev oranı nasıl hesaplanır?
Görev oranı = açık kalma süresi / periyot × 100'dür. Örneğin 1 ms'lik periyodun 0,25 ms'si açıksa görev oranı %25'tir.
Özet
- PWM, sinyali hızla açıp kapatarak ortalama gücü ayarlar.
- Görev oranı açık kalma yüzdesidir; ortalama gerilim ≈ görev oranı × besleme.
- Arduino Uno'da analogWrite(0-255) ile ~ işaretli pinlerde kullanılır.
- Yüksek akımlı yükler MOSFET ya da motor sürücüyle sürülür.
- RC filtreyle PWM'den analog gerilim elde edilir.
