DENEY 10-A : PIC 16F877 ile DARBE GENİŞLİK MODÜLASYONU (PWM) SİNYAL KONTROL UYGULAMASI AMAÇ: 1. Mikrodenetleyici kullanarak Darbe Genişlik Modülasyonu (PWM) sinyal üretilmesini öğrenmek 2. EasyPIC7 setinde POT kullanılarak analog giriş yaptırılması 3. ADC ve PWM bilgilerinin LCD de görüntülenmesi GEREKLİ MALZEME 1- EasyPIC7 uygulama seti 2-2x16 LCD Giriş Darbe Genlik Modülasyonu (PWM); dijital sistem çıkışları ile analog devrelerin ve elemanların kontrolünde kullanılan güçlü bir tekniktir. PWM yöntemi; ölçümden iletişime ve güç kontrolünden güç dönüşümüne kadar çok sayıda uygulamada kullanılmaktadır. Analog devreler: Analog sinyaller; genlik ve zaman parametrelerinin sonsuz çözünürlüğü olan, değişken sinyallerdir. Örneğin 9 Volt luk bir batarya, basit bir analog devre örneğidir. Bataryanın terminal voltajı zamanla değişken, tam 9 volt olmayan ancak ölçüldüğü anda reel bir büyüklük veren bir analog parametredir. Benzer şekilde bataryadan çekilen akım, yüke bağlı değişken bir değer alan, diğer bir analog parametredir. Analog sinyaller bu özelliği ile sayısal sinyallerden kolayca ayrılır, zira sayısal sinyaller sadece önden belirlenmiş kısıtlı seviyeleri alabilirler; örneğin {0 V, 5 V} seti gibi. Analog voltaj ve akım, analog cihazların kontrol edilmesinde direk kullanılır, örneğin bir araba radyosunun ses genliği gibi. Basit bir analog radyoda, ses düğmesi değişken bir dirence bağlanmıştır. Düğmeyi döndürdükçe, direnç aşağı (yukarı) gider. Bu işlem sonucunda dirençten geçen akım artar (azalır). Bu akım aynı zamanda hoparlörleri süren akımdır, dolayısıyla ses genliği artar (azalır). Analog devreler, radyo örneğinde olduğu gibi, çıkışı girişi ile doğrusal değişen devrelerdir. Bu temel özellikleri ile analog devrelerin kontrolü açık ve basit görünse de çoğu zaman ekonomik veya pratik değildir. Öncelikle, analog sinyaller zamanla ve sıcaklıkla kayma özelliğine sahiptirler ki, bu da devrenin akordunu zorlaştırır. Bu sorunları düzenleyen analog devreler ise fiziksel olarak oldukça büyük ve pahalıdır (örnek olarak eski ev stereo sistemlerini gösterebiliriz). Analog devreler ayrıca oldukça fazla ısı yayar; zira yayılan güç aktif devre elemanları üstündeki gerilim ile onlardan geçen akımın çarpımına eşittir. Analog devreler ayrıca gürültüye karşı hassastır, sinyal genliğinin sonsuz çözünürlüğünden dolayı, küçük genlikli gürültü sinyalleri bile analog sinyalin değişimine sebep olur. Sayısal (dijital) kontrol: Analog devreleri sayısal olarak kontrol ederek, sistem güç gereksinimi ve kontrol sistem fiyatı oldukça düşürülebilir. Ayrıca birçok Mikrodenetleyici nin veya DSP entegresinin yonga üzerinde konuşlandırılmış PWM devreleri vardır ki bu da uygulamaları çok basite indirgemektedir. Kabaca PWM, analog sinyal seviyesinin sayısal olarak kodlanması anlamına gelir. Yüksek çözünürlüklü sayıcılar kullanarak kare dalga sinyalin Sinyal-Boşluk Oranı (SBO) (Duty Cycle) bir analog sinyalin spesifik değeri için modüle edilir. PWM sinyali hala sayısaldır, zira herhangi bir t0 anında, DC Güç tam değerinde, ama ya on ya off dur. Böylece bu yöntemde analog yüke uygulanan voltaj veya akım bir seri kare dalga darbelerdir. Onzamanı DC Gücün yüke tam olarak uygulandığı, off-zamanı ise DC Güç kaynağının 10A-1
kapatıldığı zaman periyodudur. Yeterli bir bant genişliği verilerek, herhangi bir analog değer PWM metodu ile kontrol edilebilir. Şekil 10.1 de üç ayrı PWM sinyali gösterilmiştir. Şekil 10.1a da; (SBO) %10 olan bir PWM çıkış gösterilmiştir. Yani bu örnekte sinyal periyodun %10 diliminde On, %90 diliminde ise Off dur. Şekil 10.1b de ve 1c de PWM çıkışları %50 ve %90 SBO (duty cycle) olan PWM sinyalleri örneklenmiştir. Bu 3 değişik PWM çıkışları 3 ayrı analog sinyal seviyesini, tam gücün %,10, %,50 ve %90 değerine kodlamaktadır. Örneğin, analog voltajın tam değeri 9 V ise, %10 SBO, 0.9 V analog sinyal seviyesini üretir. Şekil 10.1 Değişik Sinyal boşluk oranlı sinyal görüntüleri Şekil 10.2 de PWM ile sürülebilen, çok basit bir analog devre gösterilmiştir. Devrede, 9 V batarya Flaman lı bir ampulü yakmaktadır. Eğer anahtarı 50 ms süre ile kapatırsak, ampul bu süre zarfında 9 V alacaktır. Daha sonra 50 ms süre ile anahtarı açarsak, ampul bu sürede 0 V alacaktır. Bu işlemi saniyede 10 kere tekrarlarsak, ampul sanki bir 4.5 V bataryaya bağlanmış kadar parlak yanacaktır. (%50X9 V=4.5 V). Bu uygulamada SBO %50, modülasyon frekansı ise 10 Hz dir. Şekil 10.2 Basit bir PWM devresi Pratikte endüktif ve kapasitif yükler, 10 Hz den çok daha yüksek modülasyon frekansı gerektirir. Düşünelim ki bir önceki örneğimizde ampul 5 saniye yansın, 5 saniye sönsün, tekrar 5 saniye yansın. Bu durumda da SBO %50dir, ancak ampul ilk 5 saniye süresince parlak yanacak, ikinci 5 saniye süresince ise sönük kalacaktır. Ampulün 4.5 volt bir güç görebilmesi için, frekansın yükün reaksiyon zamanına göre hızlı olması gerekir. İstenen dimmer seviyesine ulaşmak (ancak ampul sürekli yanık olacak) için, modülasyon frekansını arttırmak gerekir. Bu temel özellik diğer tüm PWM uygulamaları için de geçerlidir. Genelde birçok uygulama için modülasyon frekansı 1 khz den 200 khz e kadar değişmektedir. 10A-2
ADC GİRİŞLERİ EasyPic 7 Deney seti üzerinde 0-5V arasındaki analog girişleri modelleyecek iki adet potansiyometreye sahiptir. Potansiyometre bağlantılarını J15 ve J16 jumperları kontrol eder. J15 jumperı ile P1 potansiyometresi aktif olur ve analog sinyali MCU nun RA0 dan RA5 e kadar olan pinlerine ulaştırır. Benzer şekilde J16 jumperı ile P2 potansiyometresi aktif olur ve analog sinyali MCU nun RB0 dan RB5 e kadar olan pinlerine ulaştırır. Şekil 10.3 te potansiyometrelerin bağlantısı ve deney seti üzerindeki görüntüsü verilmiştir. Şekil 10.3 EasyPic7 üzerindeki potansiyometre ve ADC bağlantısı Örnek program: #include <16f877.h> #fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD #device ADC=10 #use delay (clock=4000000) #use fast_io(a) #use fast_io(b) #include <lcd_easy7.h> int i=2, z=2; unsigned long int bilgi; 10A-3
float voltaj; void main ( ) { setup_psp(psp_disabled); setup_timer_1(t1_disabled); setup_timer_2(t2_disabled,0,1); set_tris_a(0xff); set_tris_b(0x00); set_tris_c(0x00); setup_ccp1(ccp_pwm); setup_ccp2(ccp_pwm); setup_timer_2(t2_div_by_16,105,1); setup_adc(adc_clock_div_32); setup_adc_ports(all_analog); set_pwm1_duty(i); set_pwm2_duty(z); lcd_init(); printf(lcd_putc,"\fadc="); lcd_gotoxy(1,10); printf(lcd_putc,"i="); lcd_gotoxy(2,1); printf(lcd_putc,"v="); lcd_gotoxy(2,10); printf(lcd_putc,"z="); while(1) { 10A-4
set_adc_channel(0); delay_us(20); bilgi=read_adc(); voltaj=(0.0048828125*bilgi); i=bilgi/10; z=i/2; if (i>=105) i=105; if (i<=2) i=2; if (z>=100) z=100; if (z<=2) z=2; set_pwm1_duty(i); set_pwm2_duty(z); lcd_gotoxy(1,5); printf(lcd_putc,"%4lu",bilgi); lcd_gotoxy(1,12); printf(lcd_putc,"%3d",i); lcd_gotoxy(2,3); printf(lcd_putc,"%5.2fv",voltaj); lcd_gotoxy(2,12); printf(lcd_putc,"%3d",z); 10A-5
} } Yukarıdaki program kodu CCS-C ile yazılıp derlendikten sonra EasyPIC7 uygulama setine yüklendiğinde RA0 analog girişine bağlı potansiyometreden okunulan analog bilgi LCD ekranda hem ADC bilgisi olarak hem de okunan analog değer Voltaj bilgisi olarak gösterilmektedir. Ayrıca CCP1 çıkışı için i, CCP2 çıkışı için ise z olarak adlandırılan değişkenlerin PWM değerine göre RC1 ve RC2 deki LED ler yakılıp söndürülmektedir. Yöntem 1. EasyPIC 7 anakartı üzerindeki ADC INPUT bölümündeki J15 jumper ını RA0 konumuna getiriniz. 2. EasyPIC 7 üzerinde J17 jumper ını VCC konumuna, SW3.3 Switch ini ve SW4.6 Switch ini ON olarak ayarlayınız. 3. EasyPIC7 ile birlikte gelen LCD yi, kartın gücünü keserek, yerine dikkatlice takınız. 4. EasyPIC 7 kartını, USB kablo ile bilgisayarınıza bağlayın. 5. Yazdığınız programa ait oluşturduğunuz HEX dosyasını mikroprog Suite for PIC programına yükleyiniz. 6. MikroProg Suite for PIC programının WRITE komutunu kullanarak bu dosyayı EasyPIC7 anakartı üzerindeki Mikrodenetleyici ye transfer ediniz. Transfer ve doğrulama (Verify) işlemi biter bitmez program işlemeye başlayacaktır. 7. Ekranda oluşan görüntünün parlaklığı ve görünebilir olması için P4 LCD CONTRAST trimpotunu uygun pozisyona getiriniz. ÖDEV Yukarıda verilen örnek programdaki satırların yanına yaptıkları işlemleri sırasıyla yazınız. Mikrodenetleyicinin CCP1 çıkışındaki PWM sinyalin doluluk oranının RA0 daki butona her basıldığında belirli bir oranda arttırılmasını, RA1 deki butona basıldığında ise yine belirli oranlarla azaltılmasını sağlayacak uygulamayı CCS programında yazarak deney setinde uygulayınız. 10A-6