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

PWM dalga yapısı

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.

Değişik duty cycle oranına sahip dalgalar

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…



Bağlantılı Yazılar

5 Yorum Yapılmış

  • kadri kıyam diyor ki:

    teşekkürler, güzel kaynak olmuş.

    bir dahaki yazınızda buluşmak dileği ile…

  • gokhangokcen diyor ki:

    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

  • Alper diyor ki:

    Yazının sonlarına istediğiniz kodları anlatan bir iki açıklama ekledim.Anaşılır olmamışsa sorularınızı sorabilirsiniz.

  • gokhangokcen diyor ki:

    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

  • 90alper90 diyor ki:

    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.

Yazıyı paylaşın. | Yazı ile ilgili sorun bildirin.

Yorum Yapın ya da Soru Sorun

Yorum yapabilmeniz ya da soru sorabilmeniz için giriş yapmanız gerekmektedir.
Hoşgeldiniz, Ziyaretçi.Lütfen giriş yapın veya kayıt olun.
E-posta adresinize aktivasyon iletisi gelmediyse lütfen buraya tıklayın.

Arama Yap
Üye Alanı
 
 
Kayıt Ol || Aktivasyon Kodu İste
Teknik Yardım
6 tane konu henüz çözüme ulaşmamış. Belki siz yardımıcı olabilirsiniz ya da sorunlarınızı çözmenize başkaları yardım edebilir. Teknik Yardım bölümüne buradan ulaşabilirsiniz.
Destek İçin
İzoelektronik Facebook Sayfası
İzoelektronik'e Facebook sayfamıza katılarak destek olabilir, eklenecek yeni yazıları ve gelişmeleri Facebook üzerinden de takip edebilirsiniz.
Güncel Kalın

Eklenen Yazılar E-posta Adresinize Gönderilsin

Bizi RSS ile de takip edebilirsiniz.

Translate
Son Yorumlar
  • 90alper90: Merhaba Ozan Bey, Ölçümleri aldıktan sonra aynı anda göstermekte bir sıkıntı yok. Önemli olan 3 ölçümü de alabilmek. Bir önceki...
  • ozigeldi: alper teşekkür ederim bu arada ben ozan memnun oldum ben bu 3 ölçümü aynı lcd ekranda gösterebilimiyim pıc’e yeni başladım ve bu...
  • botan: meraba malzemeleri tedarik ettim motor olarak step motor aldım sizin yüklediğiniz programın aynısını yüklesem sorun yaşarmıyım acaba, yeni...
  • kuvvetkmc: Şöyle söyleyim; Anakart üzerinde ki; R1-R2-R3-R4-R4-R5-R6-R7-R8-R9- R10-R11-R12-R13-R14-R15-R16-R1 7-R18-R19 C1-C2-C3-C4 Q1;...
  • İzoelektronik: @kuvvetkmc Sorun çıkaran dirençleri daha net olarak belirtebilirseniz daha kolay yardımcı olunabilir. @botan Belirttiğiniz devreler...
drupal statistics module