PWM Nedir?
Pulse-width modulation (PWM, Darbe genişlik modülasyonu), üretilecek olan darbelerin, genişliklerini kontrol ederek, çıkışta üretilmek istenen analog elektriksel değerin veya sinyalin elde edilmesi tekniğidir.
PWM elektrik ve elektronikte birçok alanda, farklı amaçlar için kullanılmaktadır. Telekomünikasyon, güç, voltaj düzenleyiciler, ses üreteçleri veya yükselteçler gibi çeşitli uygulama alanları ve farklı uygulamaları bulunmaktadır.
Heralde günümüzde PWM'in en çok duyulduğu yer, güç kaynaklarıdır. SMPS (Switched mode power supply) güç kaynakları, düzenlenecek olan çıkış voltajlarını bu teknikten yararlanarak elde etmektedirler. Bu sayede, yüksek akım ve düşük voltajlı güç elde edinimleri için, transformatörlerden çok daha etkini ve çok daha küçüklerdir. Bilgisayarınızın kasasındaki güç kaynağını düşündüğünüzde, 350Wattlık çıkış gücüne sahip olan bir güç kaynağının nasıl bu kadar küçük ve etkin tasarlandığının cevabı SMPS olmasıdır.
Temelleri
Üretilen kare dalga darbe sinyallerinin genişliklerinin oratalaması, çıkışta üretilecek olan analog değerin elde edilmesini sağlar.
En iyi açıklama sanırım aşağıdaki şekil üzerinden yapılabilir.
Kare dalganın frekasına f(t), en düşün genlik değerine ymin, en yüksek genlik değerine ymax ve sinyal oranına (duty cycle) D diyelim, ortalama sinyal,
f(t) kare dalga olduğundan, f(t), ymax için ve ymin için değerlerini alabilir.
Buradan,
elde edilir.
Yukarıda verilen formül genellikle ymin = 0 iken olarak kullanılır. Görüldüğü gibi elde edilecek ortalama değer direk sinyal oranına (duty cycle) bağlıdır.
Sayısal Kontrol
PWM tekniği, motor sürücülerinde, voltaj düzenleyicilerde, telekomünikasyonda kodlama ve çözme teknikleri gibi bir çok alanda kullanılmaktadır.
PWM analog devrelerin sayılsal çıkışlarla kontrol edilmesinde kullanılan en güçlü tekniktir. Piyasada bulunan bir çok mikro denetleyici PWM modülü içermektedir. Bu PWM modülü, frekansının ve sinyal oranı programlanarak çalıştırılabilir. Burada üretilecek olan kare sinyalin kontrolü bir devreye bağlanmış seri bir anahtar ile modellenebilir.
Burada anahatar belirli oranlarla açılıp kapandığında, lambanın ışık şiddeti değişecektir. PWM ile üretilebilecek olan çeşitli oranlar aşağıda verilmiştir.
Burada, en üstte verilen grafik, Duty Cycle %10, ortadaki %50, alttaki ise %90 için çizilmiştir. Bu oranlarla üretilecek olan analog sinyal değeri, %10 için 0.9V, %50 için 4.5V ve %90 için 8.1V olacaktır.
Bu modelde kullanılan basit anahtar yerine rahatlıkla transistör kullanılabilir. Bu transistörde mikro denetleyici tarafından kontrol edilebilir. Bu sayede mikro denetleyici tarafından kontrol edilen basit bir analog sistem elde edilmiş olur.
Elbette üretilen siyalin frekansıda göz ardı edilmemelidir. Çok düşük bir frekans ile üretilen darbe sinyalleri ve bunlarla kontrol edilen bir anahtar ile kontrol edilen bir lambada, lambanın yanma ve sönme zamanları hissedilebilecektir. Bu durum size ışığın şiddetinin değişikliğinde öte, titreme şeklinde görünecektir.
Bunu engellemek için anahtarlama frekansı yükseltilmelidir. Genellikle uygulamalarda, 1kHz – 200kHz arasındaki frekanslarda çalışılır.
Donanım Kontrolörleri
Yukarıda da bahsettiğim gibi birçok mikro denetleyici dahili PWM modülüne sahiptir. Örneğin, PIC16C67 veya 16F628 içerisinde dahili PWM modülleri bulunmaktadır.
PWM uygulamalarına başlamadan önce, datasheet'lerde aşağıdakilerin gerçekleştirilmesi gerekmektedir.
– Dahili sayaçlar ayarlanarak, kare dalganın modülasyonunda kullanılacak çalışma periyodu ayarlanmalıdır,
– PWM kontrol yazmaçları ayarlanmalıdır,
– PWM çıkışının sağlanacağı Pin ayarları yapılmalıdır,
– Sayaç başlatılmalıdır,
– PWM kontrolü aktif hale getirilmelidir.
Haberleşme ve Kontrol
PWM'in en önemli avantajlarından biri sayılsal'dan analog'a dönüştürme işlemini oldukça basit bir yapı ile sağlamasıdır. Sinyalin sadece 1 ve 0'larının orantıları belirlenerek, üretilecek olan analog sinyal elde edilir.
Ancak, analog sinyalin üretiminde oluşacak olan gürültü bir dezavantajdır. Sayısal olarak üretilen sinyal analoga çevirilmeden önce, gerektiği durumlarda RC veya LC filtreler kullanılarak oluşan bu gürültü önlenebilir.
Microchip Pic Mikrodenetleyiciler ve PWM
Microchip firmasına ait 16F628 mikro denetleyicisi dahili PWM modülüne sahiptir. Bu modül Capture, Compare, PWM (CCP) modülü olarak adlandırılmıştır. Bu modül ile maksimum 10bit çözünürlüklü PWM sinyalleri elde edilebilir.
Şimdi kısaca modülün kullanımı için gerekli bilgilerin açıklanmasına başlayalım.
Timer 2 Modülü
Timer 2 8 bitlik prescaler ve postscaler'a sahip bir sayaçdır. CCP modülünün PWM sinyal üretiminde kullanılır. TMR2 yazmacı okunabilir ve yazılabilir bir yazmaçtır ve cihaz RESET edildiğinde temizlenir.
Prescale ayarları (zaman bölmesi) 1:1, 1:4 veya 1:16 oranında ayarlanabilir. Bu sayede cihazın çalışma frekansına göre, sayacın sayma hızının ayarlanması sağlanır. Prescale ayarlama bitleri T2CON yazmacının 0 ve 1.bitleridir.
Timer 2 modülü 8 bitlik bir periyod yazmacına sahiptir (PR2). Timer 2 sayacı 0016'dan başlayarak artarak FF16'e kadar sayar ve tekrar sıfırlanarak saymaya devam eder. PR2 yazılabilir ve okunabilir bir yazmaçdır. TMR2'nin postscalerı PWM modülünün kullanımında kullanılmaz.
TMR2 sayacı TMR2ON kontrol bitinin 0'lanması ile durdulur ve güç tüketimi mininmuma indirilir.
Aşağıda TMR2'nin kontrol yazmacı verilmiştir.
Burada,
Bit 6, 5, 4, 3 à Postscaler ayarlanması
0000 = 1:1 Postscaler
0001 = 1:2 Postscaler
……
Bit 2 à Timer2'nin açılması veya kapanması
0 = TMR2 Kapalı
1 = TMR2 Açık
Bit 1,0 à Prescaler ayarlanmasında kullanılır.
00 = 1:1 Prescaler
01 = 1:4 Prescaler
1x
= 1:16 Prescaler
Timer2'nin prescaler'ı ve postscaler'ı aşağıdaki durumlarda değişir.
– TMR2 yazmacına herhangi bir değer yazıldığında,
– T2CON yazmacına herhangi bir değer yazıldırğında,
– Cihaz herhangi bir şekilde (Power on reset, MCLR, Watchdog timer reset, Brown out reset) yeniden başladığında.
Capture/Compare/PWM Modülü (CCP)
CCP modülü 16 bitlik bir yazmaca sahiptir. Bu yazmaç Capture yazmacı, Compare yazmacı veya PWM master/slave sinyal oranı (duty cycle) yazmacı olarak kullanılır. Bu 16 bitlik yazmaç iki adet 8 bitlik yazmaçdan oluşur (CCPR1L ve CCPR1H). CCP1CON yazmacı CCP modülünün kontrol edilmesinde kullanılır.
Bit 5,4 CCP1X:CCP1Y = PWM'in en düşük bitleri
Capture modda kullanılmaz
Compare modda kullanılmaz
PWM Modda PWM Duty cycle için en düşük 2 biti ayarlamak üzere kullanılır. Diğer 8 bit CCPRxL'dir.
Bit 3..0 CCP1M3:CCP1M0 = CCPx mod seçim bitleri
0000 = Capture/Compare/PWM kapalı
0100 = Capture mod, her düşen kenarda
0101 = Capture mod, her yükselen kenarda
0110 = Capture mod, her yükselen 4üncü kenarda
0111 = Capture mod, her yükselen 16ıncı kenarda
1000 = Compare mod, eşleşmede çıkışı ayarlarma
1001 = Compare mod, eşleşmede çıkışı temizleme
1010 = Compare mod, eşleşmede yazılım kesmesi yaratma
1011 = Compare mod, tetikleme özel olayı
11xx = PWM Modu
PWM Modülü
PWM modunda CCP1 pini en çok 10bite kadar çözünürlükte PWM çıkışı üretebilir. CCP1 pini mikro denetleyicide PORTB'nin 3üncü pinine ait işlevlerini yerine getirmek üzere
ayarlanmıştır. PWM modunda çıkışın sağlanabilmesi için CCP1 çıkış olarak ayarlanmalıdır (TRISB.3 =0).
Aşağıda CCP modülünün blok diyagramı verilmiştir.
Bir PWM çıkışı, belirli bir periyotta gerçekleşen, mantıksal 1 ve mantıksal 0'lardan oluşur. PWM çıkışında frekans periyodun tersidir (1/periyot).
Aşağıda PWM çıkışı görüşmektedir.
PWM Periyodu
PWM'de periyot, PR2 yazmacı tarafından belirlenir. PWM periyodu aşağıda verilen formülle hesaplanabilir.
PWM'in frekansı 1/[PWM Periot] ile hesaplanır.
PWM Duty Cycle (sinyal oranı)
PWM'in Duty cycle değeri (sinyal oranı, mantıksal 1'in mantıksal 0'a oranı) CCP1L yazmacına ve CCP1CON yazmacının 5inci ve 4üncü bitlerine girilern toplam 10'bitlik değer ile belirlenir.
PWM'in Duty cycle değeri aşağıda verilen formül ile hesaplanır.
CCP1L ve CCP1CON yazmaçlarının 5inci ve 4üncü bitleri çalışma sırasında istenildiği zaman yazılabilir. PWM modunda CCPR1H yazmacı sadece okunabilir.
Maksimum PWM çözünürlüğü aşağıda verilen formülle hesaplanabilir.
Not: Eğer PWM Duty Cycle değeri PWM periyodundan daha büyük olursa, CCP1 pini temizlenmeyecektir.
PWM periyodu ve PWM Duty cycle değeri hesaplama için Refrence Manual (DS33023) dökümanını inceleyebilirsiniz.
Aşağıda 20Mhz'lik bir kristal ile çalışan Pic Mikro denetleyicisi için örnek PWM frekansları ve çözünürlüklerine ait tablo verilmiştir.
Gerçek Zamanlı Simülasyonu
Pic 16F628A ile gerçekleştirdiğim PWM uygulamasının Proteus ISIS'de hazırlanmış simülasyon dosyasına tolgatastan.DSN dosyasından ulaşabilirsiniz.
Pic16F628'in içerisine yüklenecek olan HEX dosyasına main.HEX dosyasından ulaşabilirsiniz.
Programı çalıştırarak ilgili dosyayı açtığınızda aşağıdaki ekran görüntüsü görüntülenecektir.
Bu uygulamada, PWM frekansı 4000Hz ve PWM Duty Cycle oranı %40 olarak ayarlanmıştır. Simülasyon çalıştırıldığında osiloskopta yukarıdaki gibi bir görüntü gözlenmektedir.
Yukarıda verilen UP ve DOWN düğmeleri ile Duty Cycle oranı değiştirilmektedir. UP düğmesine her basılışta %10 0ranında artış, DOWN düğmesine her basılışta %10 azalma gerçekleşecektir.
Kod ile ilgili detaylı açıklama ve CC5X'de hazırlanmış PWM kütüphanesi aşağıdadır.
CC5X için Pic ile PWM kodu (PWM.c)
Void set_pwm(uns16 dcycle) fonksiyonu
Bu fonksiyon Pic'in PWM üretimi için gereken prosedürlerin işletilmesini sağlamaktadır.
Dcycle değeri yukarıdaki formüllere göre üretilen CCPR1L yazmacına ve T2CON yazmacının 5inci ve 4üncü bitlerine girilecek olan, yani Duty cycle için gereken 10bitlik değerdir.
Diğer değişkenler ve anlamları kod içerisinde açıklanmıştır.
void set_pwm (uns16 dcycle)
{
//PWM period = [(pr2)+1]x4xToscxTMR2prescalevalue
//PR2 yazmacını yazarak PWM periyodunu ayarlama
//PWM Frekansı — 4000Hz (PR2=61.5 Timer prescaler = 1:4 Max Res=10)
//PWM Period – 0.25 ms
//PR2 = (0.25ms / (4×2.5×10-7×4))-1 =61.5 = 61 = 0xFF
//TMR2 Prescaler Value = 1/4
T2CON.0=1;
T2CON.1=0;
PR2=61;
// PWM duty cycle'ı CCPR1L yazmacı ve CCP1CON<5:4> bitlerine ekleme
//CCP1CON — __ __ CCP1X CCP1Y CCP1M3 CCP1M2 CCP1M1 CCP1M0
//CCP1x CCP1y = PWM Duty cycle'ın en düşük 2 biti
//CCP1M.. = Mod seçim bitleri, PWM için 11xx
//CCP1CON=0b00001100;
//CCPR1L, 10 bitlik duty cycyle'ın en yüksek 8 bitini içerir.
//PWM dutycycle = (CCPR1L:CCP1CON<5:4>)xToscxTMR2Prescalervalue
// Periyodun %40 ‘ı 0.00025 %40 = 0.0001
//CCPR1L:CCPR1Con<5.4> = 1^-4 / (2.5×10^-7×4) = 100
uns16 duty_cycle_val;
duty_cycle_val=dcycle;
CCP1X=duty_cycle_val.1; //Bit 1
CCP1Y=duty_cycle_val.0; //Bit 0
duty_cycle_val=duty_cycle_val/4;
CCPR1L=duty_cycle_val.low8;
// CCP1 pinini çıkış olarak ayarlama
TRISB.3=0;
//T2CON — TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0 TMR2ON T2CKPS1 T2CKPS0
// TMR2 prescaler değerini ayarlama ve TMR2'yi aktif hale getirme
T2CON=0b00000101; //Prescaler değerini 1:4'e ayarlama ve TMR2'yi açma
//CCP modülünü PWM uygulamasına ayarlama
CCP1CON = CCP1CON & 0b00110000;
CCP1CON = CCP1CON ^ 0b00001111;
}
CC5X'de hazırlanmış PWM uygulaması kaynak kodu (main.c)
#pragma config |= 0x3F18
#pr
agma resetVector 0x0000
#pragma bit UP_BUTTON @ PORTA.0
#pragma bit DOWN_BUTTON @ PORTA.1
#pragma bit TrisUP_BUTTON @ TRISA.0
#pragma bit TrisDOWN_BUTTON @ TRISA.1
#include "Delay4.c"
#include "PWM.c"
void main( void )
{
#asm
//CMCON — C2OUT C1OUT C2INV C1INV CIS CM2 CM1 CM0
movlw 7
movwf CMCON ; CMCON=7 set comperators off
/*
; —————-
; INITIALIZE PORTS
; —————- */
movlw b'00000000'
movwf PORTA
movlw b'00000000'
movwf PORTB
bsf STATUS,RP0
movlw b'00000000'
movwf TRISA
movlw b'00000000'
movwf TRISB
#endasm
TrisUP_BUTTON = 1;
TrisDOWN_BUTTON = 1;
uns16 pwm_temp;
pwm_temp=100;
set_pwm(pwm_temp);
while(1)
{
if(UP_BUTTON==0)
{
pwm_temp=pwm_temp+30;
set_pwm(pwm_temp);
Delay1ms(250);
}
if(DOWN_BUTTON==0)
{
pwm_temp=pwm_temp-30;
set_pwm(pwm_temp);
Delay1ms(250);
}
nop();
}
}
//// MAIN SECTION
Yorumlar
Bu uygulamanın da ardından artık SMPS veya Switch mode regulator yapabilmemiz için gerekli olan her şeyi açıklamış olduk. Kasım 2006'da yayınlanan ADC uygulaması ve bu ay yayınlanan PWM uygulamasını birleştirdiğinizde, hem voltaj ve akım ölçen hem de voltaj ve akım oluşturan bir devreye sahip olabilirsiniz. Bunun anlamı SMPS…(sonraki aylarda…)
PWM uygulaması için indirilebilecek dosyalar
Proteus ISIS Simülasyon Dosyası | tolgatastan.DSN |
Pic 16F628 Kaynak Dosyası | main.HEX |
CC5X Pic C Compiler'ı | C Compiler |
PWM uygulaması ana dosyası | main.C |
PWM uygulaması PWM kütüphanesi | PWM.C |
Delay fonksiyonu kütüphanesi | Delay4.C |
CC5X User Manual | cc5x-33.pdf |
Kaynakça
PWM, Pulse width modulation priciples, http://en.wikipedia.org/wiki/Pulse-width_modulation
PWM applications and operations, http://www.netrino.com/Publications/Glossary/PWM.html
Microchip Pic16F628A mirocontrollers datasheet, PWM module using, http://ww1.microchip.com/downloads/en/DeviceDoc/40044E.pdf
PWM Module using at Microchip Pic Microcontrollers http://forum.allaboutcircuits.com/showthread.php?t=2177&page=4
CC5x User manual, http://www.bknd.com/doc/cc5x-33.PDF
Tolga TAŞTAN
tolga@aadf.net