Ana Sayfa PIC|ULAK PIC|ULAK ile PWM Uygulaması

PIC|ULAK ile PWM Uygulaması

6 min read
0
0
648

Merhaba arkadaşlar,

Bu yazımızda, MekatronikLAB firmasının üretmiş olduğu  PIC mikrodenetleyiciler ile proje geliştirme kiti PIC|ULAK ile pwm(Pulse width modulation) darbe genişlik modülasyonu uygulamasını gerçekleştirdik.

PWM (Pulse width modulation) darbe genişlik modülasyonunda üretilen darbelerin zamana göre genişlikleri belirlenerek çıkışa verilen toplam güç ayarlanmış olur. Yani aslında yapılan iş çıkışa doğrudan lojik 1 yada lojik 0 vermek yerine genişliğini bizim belirlediğimiz periyotta sinyalin ne kadar sürede 1 ve ne kadar sürede 0 olarak kalacağını belirlemektir. Bu genişliği maksimum tutarsak çıkışa doğrudan 1 minimum tutarsak da 0 vermiş oluruz. Diğer değerlerde ise yoğunluk ayarı yapmış oluruz.
Pic mikrodenetleyicilerinin pwm fonksiyonu timer2 ile kontrol edilmektedir. Üreteceğimiz pwm frekansını timer2 içerisine atadağımız prescaler ile birlikte kullandığımız kristalin hızı da belirleyecektir.
Frekans belirleme formülü;

Kristal Frekansı(Tosc)
PWM Freq = —————————————–———–
(PR2 + 1) * (Timer2 Prescaler) * 4

ya da pwm periyodu;

PWM period = (PR2+1) x 4 x Tosc x TMR2 prescaler

şeklinde olacaktır.
Burada PR2 sayıcı değeri 0-255 arasında olmalıdır. Timer2 prescaler (TMR2 önbölücü) ise 1,4 veya 16 değerlerini alabilir. Elde etmek istediğimiz frekansı bulmak için PR2 yani timer2′nin saymaya başlayacağı değer ile birlikte prescaler değerini de uygun şekilde seçmemiz gerekir.
Örneğin; 4MHz kristal hızı, presaceler 16 ve PR2 124 için

400000
PWM Freq = ————————– —–= 500 Hz
(124 + 1) * (16) * 4

bulunur.
Bu durumda kullanmamız gereken satır setup_timer_2(T2_DIV_BY_16, 124, 1); olur.
Burada kullandığımız değerlere göre frekans hızı ortaya çıkacaktır. dolayısıyla kristal hızımıza bağlı olarak her frekansı elde edemeyeceğimiz açıktır. Örneğin 4 Mhz kristal için en düşük frekans yaklaşık 244 hertz en yüksek ise 62.5 KHz olacak, kristal hızını artırdıkça da bu değerler artacaktır.
İnceleyeceğimiz ilk en basit pwm uygulaması aşağıda. Burada gerekli ayarlamaları ve tanımlamaları yaptıktan sonra ccp1 ve ccp2(capture,compare,pwm) pinlerini pwm olarak ayarlıyoruz. Daha sonra setup_timer_2(T2_DIV_BY_16, 124, 1); satırı ile pwm frekansını belirliyoruz ve set_pwm1_duty ve set_pwm2_duty satırları ile de pwm kanallarında oluşturulan darbenin genişliğini belirliyoruz. Rakamlara bakacak olursak 124′ün yarısı olan 62′de sinaylin yarısı aktir halde, 31′de ise çeyreği. Yani çıkışlarda lamba olsaydı biri öbürünün yarısı kadar yanmış olacaktı. Buradaki satırlara atadığımız değerler ile çıkış gücünü belirleyeceğiz.

Malzemeler

  • piculak
  • lcd
  • 330Ω direnç
  • led

Bağlantı şeması

??????????????

CCS C Kodları


#include <main.h>
#use delay(clock=4000000) // osilatör frekansı belirleniyor.
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD // sigorta ayarları
#include <lcd420.c> // lcd tanımlanıyor.
int data = 0; // Tamsayı tipinde değişken tanımlanıyor

/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{

lcd_init(); // lcd hazırlanııyor.
printf(lcd_putc,"\fMEKATRONIKLAB");
printf(lcd_putc,"\nROBOTURKA");
printf(lcd_putc,"\nSINAN SOZUGUZEL");
printf(lcd_putc,"\nGAZIOSMANPASA UNI");
delay_ms(1500);

setup_timer_2(t2_div_by_16,254,1); // pwm ayarları yapılıyor.
setup_ccp1(ccp_pwm); // ccp1 aktifleştiriliyor.

while(1)
{
data = data+3; // data değişken değeri işleme tutuluyor.
if(data==255) // data değişken koşulu
{
for(data=255; data>0; data = data-3 )
{
set_pwm1_duty(data);
delay_ms(20);
}
}
set_pwm1_duty(data);
delay_ms(20);
}
}

Devrenin Çalışma Videosu

 

 

Buna Benzer Yazılar Göster !
Daha Fazlasını Yükle - Sinan Sözügüzel
Daha Fazla Göster -  PIC|ULAK

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bak Bakalım ?

PIC|ULAK ile Gece Lambası

Merhaba arkadaşlar, Bu yazımızda, MekatronikLAB firmasının üretmiş olduğu  PIC mikrodenetl…