Elektronik / Elektronik Kaynakları/

PWM tekniği ve MicroC uygulama örneği

Sponsorlu Bağlantılar

Bu yazımda sizlerle giderek kullanımı artmakta olan PWM tekniğinin temel mantığı ve bu işin bir pıc ile nasıl yapılabileceğini aktarmaya çalışacağım.

PWM tekniği:

Kelime anlamı olarak darbe genişlik modülasyou anlamına gelen bu yapı ile birkaç kiloHertz lik frekanslarda bir periyotluk sinyalin on off sürelerinin değiştirilmesi mantığıdır.

Bunu bir şekille açıklamak gerekirse

pwm-tegnigi-periyod-suresi-sureler

Yukarıdaki örnekte Vcc gerilimi 0-5V olan sinyal için ortalama gerilim değeri

%25 için ortalama gerilim 1.25V olur
%50 için 2.5V olur
%75 için 3.75 olur.

Eğer %100 pwm değeri için ortalama gerilim Vcc ye eşit olur 5V olur.

Eğer bu darbe sinyalini PIC ile elde ediyorsak genellikle uğraştığımız Vss=0 Vcc=5 volttur.

İşte biz bu dalganın Vcc de ve Vss kalma süresinin oranını değiştirerek 0-5v arasındaki tüm gerilimleri elde edebiliriz. PWM in en basit açıklaması bu şekildedir

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
  • Çanta tipi kaynak makinalarında

PWM kullanılmaktadır

.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.

Burada elde edilen lojik çıkışı bir transistörle sürmek kaydıyla 0-( 25 30) arası gerilimler elde edebiliriz. Bununlada bir dc motor hız kontrolünü yapabiliriz. Pıc çıkışını mosfet ya da darbe trafolarıyla tetiklenecek ters paralel bağlı Tristörler ile yüz voltlar hatta bin voltlar kontrol edilebilir.

MicroC ile donanımsal pwm özelliği olan PIC16F877A mikro denetleyicisi ile Pwm sinyali elde eden programı hazırladım sizlerle paylaşıyorum.

Basitbir şekilde yazılımını yaptığım proje içerisinde de gerekli açıklamaları ekledin sanıyorum anlaşılmayan noktası yoktur.

Proje yazılımı hex kodu ve proteus simulasyonu dosyada mevcuttur. Uygulama dosyaları: PWM tekniği ve MicroC uygulama örneği

Dosya indirme LINK listesi (TXT formatında) link-9269.zip şifre-pass: 320volt.com

Aytaç DÜRGEN

Kocaeli Üniversitesi

Teknik Eğitim Fakültesi

ELEKTRİK ÖĞRETMENLİĞİ 4

aytacdurgen@gmail.com

Uygulamanın proteus isis devre şeması;

isis-devresi-microc-PWM

Uygulamanın MikroC yazılımı;


/*
Projeyi yazan   : Aytaç Dürgen
Projenin adı    : Pwm modülünün kullnılması
Mikrodenetleyici:PIC16F877A
Proje Tarihi    : şubat 2010
Açıklama        : bu projede Pwm sayaçlarından birisi
PWMin bağımsız gerçekleştiğini göstermek için PortB da gösterildi
*/

unsigned short j,x;

void AnaAyarlar() {
  PORTB = 0;       // portb sıfırlanıyor
  TRISB = 0;       // PORTB cikis olarak ayarlandi

  ADCON1 = 6;      // tum adc girisleri digital olarak ayarlandi
  PORTA = 0xFF;     // PORTA cikisi ff yapıldı
  TRISA = 255;     // PORTA girise ayarlandı

  PORTC = 0xFF;      // PORTC ff yapıldı
  TRISC = 0;         // PORTC çıkış yapıldı
  PWM1_Init(10000);   // PWM1e 10khz  yüklendi
  PWM2_Init(10000);   // PWM2e 10khz  yüklendi
}//~

void main() {
  AnaAyarlar();      // AnaAyarlar ayarlarını uygula
  j   = 0;
  x   = 255;         // j değeri 255 e pwm%100ye ayarlandı
  PWM1_Start();      // PWM1 başlatılıyor ccp2  PWM1 ise ccp1 sürülür
  PWM2_Start();      // PWM2 başlatılıyor ccp2  PWM1 ise ccp1 sürülür

  while (1) {         // sonsouz döngü
    if (Button(&PORTA, 0,1,1)){   // RA0 a basıldımı?
      j++ ;                       //  j +1
      x--;
      }
    if (Button(&PORTA, 1,1,1)){   // RA1 a basıldımı?
      j-- ;                      //   j - 1
      x++ ;
      }
    PWM1_Change_Duty(x);
    PWM2_Change_Duty(j); //   j değeri     PWM2 ye yüklendi
    PORTB = j;         //   j değerini PORTBde göster
    Delay_ms(40);        // bekle
  }
}

  • onur12

    Teşekkürler microc bilmiyorum ama pwm bilgileri iyi oldu

  • muratyamak

    hocam bende pwm kütüphanesinde pwm_change_duty() yok
    micro cde

  • aytacdurgen

    Yeni versiyonda o kullanım deyimi değiştirildi. PWM konusunu derslerde yeni yazımı ile işleyeceğim

  • burak

    verdiğiniz bilgiler için çok teşekkürler..

  • Hulusi Can

    Emeğinize saglık.