Teknomerkez
TR EN ES
Konular

Pic Basic ve PWM (darbe genişlik modülasyonu)

Yazar: Aykut Yılmaz
Tarih: 05.04.2007
Türkçe

PWM, Pulse width modulation. PWM, darbe genişlik modülasyonu. PWM üretilecek olan darbelerin genişliklerini kontrol eder. PWM çıkışta analog sinyalin oluşmasına neden olur.

PWM ile bir çok uygulama yapılır. Hız kontrol ünitesi, lamba ve led’in parlaklığını arttırıp, azaltma yapılır. Birçok entegrede PWM işlemi yapılabilir Örneğin 555 entegresinin 3 nolu çıkışından kare dalga üretilir. Ayrıca Mikroişlemcilerlede PWM uygulamaları yapılır ancak işlemcinin PWM’i destekleyen pini olması gerekir. 16f84 işlemcisinde PWM pini yoktur. 16F877, 16F628 işlemcisinde pwm pini mevcuttur.

16F877 işlemcisinin genel görünümü:


16F628 işlemcisinin genel görünümü:


16F628 işlemcisinin 9 nolu pini RB3/CCP1 pwm çıkışıdır. 16f877 16. ve 17. pini pwm çıkışıdır 17. pini RC2/CCP1 10 bit çözünürlükte pwm çıkışı olarak kullanılır.

Burada kullanacağımız programlama dili PICBASIC PRO. Şimdi pwm ve hpwm komtunu açıklayalım ve nasıl kullanıldığını görelim.

PWM
AÇIKLAMA: PWM PİN,İŞ_SÜRESİ,SAYKIL_ADEDİ

Belirlenen bir pin üzerinden genişliği değişebilen pwm göndermek için kullanılır.

PWM saykılın İŞ_SÜRESİ 0 (%0), 50(%127),255(%100) saykıl adedince belirlenen işlem takrar edilir

PWM de porttan gelen dijital veri pwm komutuyla ve RC devresiyle analog çıkışa çevrilir.

PIC16F877 için PORTC.1 ve PORTC.2 PWM çıkışıdır.

PIC16F628 için PORTB.3 PWM çıkışıdır.

İS_SÜRESİ %50 DECİMAL 127

İS_SÜRESİ %25 DECİMAL 64

İS_SÜRESİ %75 DECİMAL 191

Yani iş süresi ile oynayarak sinyal şekli değişebilir.

PWM komutu ile üretilen kare dalganın filtrelenmesi için gerekli devre:



Yukarıdaki devrenin amacı kare dalganın daha temiz ve pürüzsüz çıkması içindir. Bu devre kullanılmadığında sinyal düzgün çıkmayabilir.

PICBASIC PRO kodu:
PWM PORTB.3,127,100 ‘%50 iş süresi olan 100 pwm palsini PORTB.3’den gönder.

HPWM
AÇIKLAMA: KANAL(PİN), DUTYCYLE(İŞ_SÜRESİ), FREKANS(SAYKIL_ADEDİ)

Dutycyle:çıkış sinyalinin gerilimidir. 8 bitlik bir değer olup 0*255 arasındadır. Buda gerilim olarak 0*5V arasındadır.

16F877’de PORTC.1 ve PORTC.2 CCP1, CCP2 uçlarında HPWM komutu kullanılarak bir ledin parlaklığı ve bir motorun sağa ve sola dönüşü yapılabilir.

PIC16F877 için PORTC.1 VE PORTC.2 PWM çıkışıdır.
PIC16F628 için PORTB.3 PWM çıkışıdır.

Yapacağınız programın başına define tanımlamalarını yapmanız gerekmektedir:

DEFINE CCP1_REG PORTC       	 'HPWM PORTC.1
DEFINE CCP2_REG PORTC       	 'HPWM PORTC.2
DEFINE CCP1_BIT 2           	 'CCP1 PİNİ PORTC.2
DEFINE CCP2_BIT 1           	 'CCP1 PİNİ PORTC.1

ÖRNEĞİN: HPWM 1,127,1000
%50 İŞ SÜRESİ OLAN VE 1000 PWM SİNYALİNİ PORTC.2’DEN GÖNDER

%25 İŞ SÜRESİ YAKLAŞIK 1.25V DECİMAL 64
%50 İŞ SÜRESİ YAKLAŞIK 2.5V DECİMAL 127
%75 İŞ SÜRESİ YAKLAŞIK 3.75V DECİMAL 192
%100 İŞ SÜRESİ YAKLAŞIK 5V DECİMAL 255

16f628 işlemcisinde tek kanal pwm olduğundan HPWM komtu şu şekilde yazılır:
HPWM 0,255,2000
(0 olan yerde PORTB.3 vardır PORTB.3’den %100 iş süresi olan 2kHz’lik frekans gönder.)

HPWM komutuna basit bir örnek 16f628 için:

Ledleri yavaş yavaş parlak hale getirmek için döngü kullan;

Duty var byte				
Cmcon=7			‘komparatör pinlerinin hepsi giriş veya çıkış
FOR DUTY = 0 to 255  	‘duty değerini 0…255’e kadar arttır
HPWM 0,DUTY,5000 	
PAUSE 100 
NEXT 

Bu komut ledleri 100 ms'lik aralıklarla birer birer artış sağlayarak voltajı artıracaktır. Aynı şekilde söndürmek için;

FOR DUTY=255 to 0 step -1 
HPWM 0,DUTY,5000 
PAUSE 100 
NEXT 

Yukarda yazan step -1 komutu 255’den her seferinde bir çıkart demek istiyor

HERKESE KOLAY GELSİN, BOLBOL YAZILIMLI GÜNLER DİLEĞİYLE.

Etiketler: Pic Basic Pwm

Yorumlarınız

Sedat ELCİVAN - 17.04.2007
Hep söylediğimiz gibi, okul bir şeyleri başlatır fakat hiçbir şeyi bitiremez.Öğrenme hayat boyu sürer. Önemli olan sürekli gelişen bir çizgide olmak. Çalışmalarının devam etmesini mesleki bilgi konusunda daha da iyi noktalara gelmeni temenni ediyorum. Ülkene, çevrene, kendine faydalı bir insan ol.
Başarılar dilerim.
abdullah - 23.05.2007
bilgi paylaşıldıkça çoğalır.bu bilgileri bizlerle paylaştığınnız için teşekkürler.saygılar
ŞAMİL ASLAN - 25.06.2007
ANLATILANLARDAN YOLA ÇIKARAK PWM KULLANARAK 16F77 İLE HIZ KONTROL YAPMAK İSTEDİM PEK ÇALIŞDI DİYEMEM.KEYPEDDEN GİRDİĞİM DEĞERLERLE NASIL BİR HIZ KONTROL YAPABİLİRİM YANİ KEYPEDDEN 100 GİRİNCE MESALA MOTOR 100 DEVİRLE DÖNMESİNİ NASIL SAĞLARIM
Cenap Çevli - 13.09.2008
Bilgi için teşekkürler yalnız hatırlatmadan geçemedim. Okuyucuların kafasında yanlış yerleşmesini istemem. Konu başlığınızda tercüme hatası olduğunu hatırlatmak istedim. PWM yani pulse width modulation darbe genlik değil darbe GENİŞLİK modülasyonudur. Genlik modülasyonu denince sinyalin yüksekliğinin değiştirildiği amplutude modulasyonu kastedilmiş olur ki bu AM radyoların modulasyon şeklidir. Halbuki burada amplitudu yani tepe nokta genişliği sabit bir kare dalganın duty cycle'ı nı değiştiren bir modulasyon şekli söz konusu yani sinyalin bir periyodu içinde açık kalma süresi yani oranı değiştirilmekte. DARBE GENİŞLİK MODÜLASYONU şeklinde başlığı değiştirmenizi öneririm. saygılarımla.
nuri - 23.11.2008
basic kullanıcıları için çok güzel bir açıklama. teşekkür ederim
Hasan Bilgin - 16.08.2009
877 veya 876 da yada herhangi birisinde PWM Pinlerinden birini kullandığımızda sorunyok istenilen özellikleri taşıyor yalnız ikinciyde kullanmaya kaltrığımızda diğerinin değerini etkiliyor. Bu bazı yabancı programlama sitelerindede hatırlatılıyor. Çift ayrı ayrı ayarlanabilen bir güç kaynağı tasarladım ve bir kanalın gerelimini ayarlayınca güzel ama diğerinide ayarlamaya kalkınca diğeri kararsızlık gösteriyordu. Tersini yapınca diğeri aynı şeyi yapıyordu. Herhangi biri sıfırda durunca dğeri gayet güzel ayar yapıyor. Bende dünyada araştırdım meğer böyle oluyormuş. Eğersizin denediğiniz yada bildiğiniz bir yol varsa...... Ben bu sorunu Register kullanarak hallettim. Seri çıkış sağlayarak iki kanalında 24 bit bir seride 12 şer bit olarak çıkış sağladım.... Yani şu açıdan yararlı olmak istedimki zamanlayıcıların birdevrede çokça kullanılması ve program akışının uzunluğu ve piclerin hassas çalışmalar için kendi içi donanımlarının tam yeterli olmadığı kanaati. Gerçek zamanlı olmayan otomasyonlar için harika bir sistem ancak gerçek zamanlar çin muhakkak için diğer devre tasarım yöntemlerinden yararlanmanın şimdilik zorunlu olduğunu düşünüyorum......
Hasan Bilgin - 16.08.2009
877 veya 876 da yada herhangi birisinde PWM Pinlerinden birini kullandığımızda sorunyok istenilen özellikleri taşıyor yalnız ikinciyde kullanmaya kaltrığımızda diğerinin değerini etkiliyor. Bu bazı yabancı programlama sitelerindede hatırlatılıyor. Çift ayrı ayrı ayarlanabilen bir güç kaynağı tasarladım ve bir kanalın gerelimini ayarlayınca güzel ama diğerinide ayarlamaya kalkınca diğeri kararsızlık gösteriyordu. Tersini yapınca diğeri aynı şeyi yapıyordu. Herhangi biri sıfırda durunca dğeri gayet güzel ayar yapıyor. Bende dünyada araştırdım meğer böyle oluyormuş. Eğersizin denediğiniz yada bildiğiniz bir yol varsa...... Ben bu sorunu Register kullanarak hallettim. Seri çıkış sağlayarak iki kanalında 24 bit bir seride 12 şer bit olarak çıkış sağladım.... Yani şu açıdan yararlı olmak istedimki zamanlayıcıların birdevrede çokça kullanılması ve program akışının uzunluğu ve piclerin hassas çalışmalar için kendi içi donanımlarının tam yeterli olmadığı kanaati. Gerçek zamanlı olmayan otomasyonlar için harika bir sistem ancak gerçek zamanlar için muhakkak diğer devre tasarım yöntemlerinden yararlanmanın şimdilik zorunlu olduğunu düşünüyorum......

Bir yorum ekleyin

İsim:
E-posta:
Yorumunuz:
Güvenlik Kodu:
 
Tüm alanları doldurmak zorunludur. Yorumunuz kontrol edilince yayınlanacaktır. E-posta adresi yayınlanmaz.
İzin verilen html etiketler (tag): <p><div><b><strong><i><u><del><hr><sup><sub><br>