PWM (Pulse Width Modulation) Nedir
PWM ( Pulse Width Modulation ), üretilen darbelerin (pulselerin) genişliklerinin kontrol edilerek ( veya değiştirerek ) üretilmek istenen analog değerin elde edilmesidir denilebilir.PWM ismini PIC ile uğraşıyorsanız önceden duymuş olabilirsiniz.Gelin isterseniz PWM yi anlayalım.
Genişlik ?
Tanımda pulse (darbe) lerin genişliklerinden bahsetmiştik.Daha iyi anlatabilmek için bir PWM dalgasının yapısına bakalım

Görülüdüğü gibi dalga yapısı bir kare dalgaya benziyor.Kare dalga hakkında buradan gerekli bilgiye ulaşabilirsiniz.Dalganın tepe noktasındaki değerine Vcc, çukurdaki değerine ise Vss diyelim.Elimizde Vss ve Vcc değerlerinde iki gerilim var.Eğer PIC ile uğraşıyorsak genellikle Vss=0 Vcc=5 volttur.İşte biz bu dalganın Vcc de ve Vss kalma süresinin oranını değiştirerek Vcc ile Vss arasındaki tüm gerilimleri elde edebiliriz.PWM nin pratik açıklamasını böyle yapabiliriz.
Duty Cycle ?
Duty Cycle nın Türkçe’sine “kullanım oranı” diyebiliriz.Formül tanımı olarak da
Duty Cycle=Yüksek Voltajda Kalma Süresi/Periyod
olur.
Mesela duty cycle=50% ise Vcc nin uygulanma süresinin periyoda oranı 1/2 dir.Başka bir değişle Vcc nin uygulanma süresi Vss nin uygulanma süresine eşittir.Aşağıda değişik duty cycle oranına sahip dalgalar görülmektedir.

Dalga-1′in duty cycle=yaklaşık %10 ken bu değer yaklaşık olarak dalga-2′de %50 dalga-3 de ise %90 dır.
Elde ettiğimiz voltajı nasıl hesaplayacağız ?
Elde ettiğimiz voltaj ile duty cycle arasında bir doğru orantı vardır.
Vcc=5V
Vss=0v
olsun.
Dalga-1 için voltmetrede okuduğumuz değer 5×10%=0.5V dalga-2 için 5×50%=2.5 dalga-3 için se 5×90%=4.5V olur.
Dalgaların özellikleri ne olmalıdır ?
PWM dalgalarının üretilmesi için bir sürü method vardır. Bu dalgaların frekansının yüksek olması gerekmektedir.Eğer bu hareket yavaş yapılırsa çıkışta Vcc ve Vss ayrı ayrı gözlemlenebilir.Örneğin bu çıkışı bir ışık kaynağına bağlarsanız titreşimler görülebilir.Bunu engellemek için dalga çok sayıda tekrar edilir ki PWM dalgalarının frekansı yaklaşık olarak 1KHz-20KHz arasındadır.
PWM nerede kullanılır ?
PWM tekniğinin uygulanması giderek yaygınlaşmaktadır.Mesela;
Çoğu anakart fanın hız kontrolünde
SMPS güç kaynaklarında
Telekomünikasyonda
Güç Devrelerinde
PIC uygulamalarında
PWM kullanılmaktadır.Şu adresten de PWM ile ilgili bir uygulamanın videolarına ve şemalarına ulaşabilirsiniz.
PIC ile PWM
PIC ile
1-Yazılımsal olarak
2-Donanım yardımıyla
PWM çıkış elde edilebilir.Burada donanımsal PWM desteği olan PIC ler (HPWM olarak da geçer) bize daha çok avantaj sağlamaktadır.Artık çoğu PIC kendi içinde PWM modülünü bulundurmakta yani HPWM özelliğini desteklemektedir.Bu tür PIC lerin içinde PWM üretmeye yarayan ayrı bir donanım bulunur.Biz buraya program yardımıyla bir değer atarız ve bu modül programdan bağımsız PWM üretebilir.Yani PIC ile sürekli işlem yaptırmayız.HPWM özelliği ile PWM dalganın frekansını ve duty cycle nı belirleriz.Belirlediğimiz ve PWM desteği olan bir bacaktan da bu çıkışı alabiliriz.
Yazılımsal olarak nerdeyse her PIC ile PWM sinyal üretebiliriz.Buradaki mantık bir pini belirli bir süre 1 diğer bir süre 0 yapmaktır.Böylece bir PWM elde etmiş oluruz.Fakat bu işlemi PIC sürekli yapmalıdır.Yani komut sürekli çalışmalıdır.Bunu işlemci sürekli yaptığı için aynı anda başka bir işlem yapılamamaktadır.Eğer PWM kullanacaksanız HPWM yani donanımsal olarak PWM desteği olan bir PIC kullanmalısınız.
PWM çözünürlüğü ?
Diyelim ki PIC ile PWM üretiyoruz.Bunun için HPWM özelliğini kullanıyoruz.İstediğimiz PWM özelliğini biz bir register(yazmaç) a program yardımıyla yazarız ve donanım bu değere uygun PWM üretir.İşte bu yazdığımız değerin detayı bize çözünürlüğü verir.Mesela PWM 10 bit register ile kontrol ediliyor diyelim.2^10=1024 kadar seçme hakkımız vardır.( Register lara 2 lik sistemde yani 1 0 olarak bilgi girildiği için tüm girebileceğimiz sayı 2^n ile sınırlıdır. ) Vcc=5V Vss=0V olduğundan 5/1024=0.0048828125V hassasiyetli bir dalga üretebiliriz.Yani yaklaşık 5mv hassasiyete sahip bir dalgamız olur.Mesela en hasas şekilde 0 - 5mv - 10 mv değerleri elde edebilir.Örneğin 6-7 mV elde edemeyiz.Bunun için PWM çözünürlüğünü yani PWm yi ayarlayan bit sayısı arttırılmalıdır.Tabi ki de biz bun kendimiz yapamayız.
Mesela PWM çözünürlüğü daha çok olan bir PIC seçmeli ya da PWM için entegreler kullanmalıyız.
PIC ile PWM elde edebileceğimiz kodlar
Örnek kod olarak sadece Basic dilinin kodlarını verebileceğim.Çünkü ASM ve C den emin değilim.Kod eklemek isterseniz seve seve ekleyebiliriz.
PWM kullanabilmemiz için PWM istediğimiz bacağı çıkış olarak seçmeliyiz.Örneğin 16F628A da donanımsal PWM (HPWM) kullanmak istiyorsak zaten zorunlu olarak pin 9 u (RB3) ü kullanacağız.Dolayısıyla bu bacak gerekli kodla (TRISB=0 yazarsanız tüm B portuyla birlikte o bacağı da çıkış olarak ayarlayabilirsiniz.) bu bacağı çıkış olarak seçmeliyiz.
Donanımsal (HPWM) üretme
HPWM A,B,C
A=Hangi donanımsal pwm pininden çıkış alacağımız.16F628A da bir donanımsal çıkış olduğu için 1 yazıyor.Yani 1. kanaldan PWM alacağız.
B=0-255 arası değer vererek duty cycle ( duty cycle nedir? ) oranını belirliyoruz.Örneğin 127 yazarsak yaklaşık %50 lik bir dalga alırız.
C=Buraya dalganın frekansını yazıyoruz.(Hertz cinsinden)
Yazılımsal PWM üretme
Bu yöntemi daha çok donanımsal PWM çıkışı olmayan PIClerde (16F84) gibi kullanırız.Bu yöntemle her bacaktan PWM alabilirsiniz.Fakat PIC bu işi yaparken başka bir iş yapamaz.HPWM arka planda çalışırken bu yazılımla yapılır.
Kod yapısı HPWM e çok benzer.
PWM A,B,C
A=Hangi pinden çıkış alacağız.Örneğin PORTB.3 yazabiliriz.
B=0-255 arası değer vererek duty cycle ( duty cycle nedir? ) oranını belirliyoruz.Örneğin 127 yazarsak yaklaşık %50 lik bir dalga alırız.
C=Buraya dalganın frekansını yazıyoruz.(Hertz cinsinden)
PIC ile nasıl yapıldığını kod olarak merak edenler için umarım açıklayıcı olmuştur.Sorularınızı yorum yazarak sorabilirsiniz.
Bir dahaki yazımıda buluşmak dileği ile…
Yayın: 6 Kasım 2007
Son Güncelleme: 27 Temmuz 2008
http://www.izoelektronik.com/pwm-pulse-width-modulation-nedir.htm/trackback
Bu yazıya yapılan yorumlar için RSS beslemesi
Kategori: Elektronik, Konu Anlatımı
Etiketler: cycle, duty, modulation, pic, pulse, pwm, teknik, width
Yazar: Alper
Bu yazıyı paylaşın veya arkdaşınıza gönderin. / Share
Bağlantılı Yazılar
Yazar Hakkında:
Genel Editör
Yazıda bulduğunuz bilgi hatalarını, imla yanışlarını, şikayetlerinizi ve varsa diğer hataları bildirmek için tıklayınız.


5 Yorum “PWM (Pulse Width Modulation) Nedir”
1 || kadri kıyam tarfından 27 Şubat 2008
teşekkürler, güzel kaynak olmuş.
bir dahaki yazınızda buluşmak dileği ile…
2 || gokhangokcen tarfından 8 Mart 2008
slm arkadaşlar;
sitede yeni sayılırım gerçekten güzel konular ve güzel yorumlar var kaynak güzel emeğine sağlık dostum.
fakat sizlerden bir ricam olacak bu pwm olayında örneğin bir rgb yapacak olursak bunu nasıl yazıcağım programda bilgisi olan varsa yardımcı olursa sevinirim teşekkürler şimdiden…
iyi paylaşımlar
Saygılar
Gökhan Gökçen
3 || Alper tarfından 8 Mart 2008
Yazının sonlarına istediğiniz kodları anlatan bir iki açıklama ekledim.Anaşılır olmamışsa sorularınızı sorabilirsiniz.
4 || gokhangokcen tarfından 9 Mart 2008
alper yardımların için sağolda hiç kütüphaneden bi komut kullanmadan bir for…next…step ile pwm çıkışı verilebiliyor pic e ben bunu merak etmiştim ama genede yardımların için sağol ben pwm komutu ile yapamadım rgb yi for..next ile denemelere devam ediyorum…
Saygılar
Gökhan Gökçen
5 || 90alper90 tarfından 9 Mart 2008
Zaten PWM komutu da bunu yapar.Örneğin frekansı 50 hz olan duty cycle=50% olan sinyal
DONGU:
HIGH PORTB.7
PAUSE 10
LOW PORTB.7
PAUSE 10
GOTO DONGU
komutu ile de yaklaşık olarak elde edilebilir.Örneğin bunu for ile 50 kere döndürürseniz 1 sn ye boyunca pwm alırsınız.
Mesela servo motorlar da bu yolla çevrilir.Fakat hassas konumlandırma için HPWM daha iyidir.Tabi 10 bitlik kullanmak şartıyla.Default değeri 8 bittir.
Bu arada servo sürmek isteyen arkadaşlara bir ipucu: Servoya pwm sinyalini 0.5 - 1 sn den fazla göndermeyin.Servo sinyali anlayınca sinyal kesile de işine devam edebilir. Sinyalin 20-30 kere gitmesi kafidir.Aksi taktirde servo sürekli bir yere dönmeye çalışır.Servonuza zarar verebilirsiniz.