PWM kullanımı hakkındaki makaleye buraya tıklayarak ulaşabilirsiniz.
Bu uygulamamızda pwm modülü ile DC motor hız ayarı yaptık. 2 adet buton ile hız arttırma veya azaltma modumuz mevcut. Uygulama devresi simüle amaçlı olup, gerçek hayat için pic ile motor arasında yüksek frekanslı anahtarlama özelliğine sahip mosfet veya ileri transistörler kullanılması önemle duyurulur.
Uygulamayı buraya tıklayarak indirebilirsiniz. Arşiv şifresi isterse elektrocavus.com giriniz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <16f628A.h> #fuses XT, NOWDT #use delay(clock=4M) unsigned int8 duty_oran=0; // pwm duty oran değişkeni unsigned int8 hassasiyet=10; // 1 en yüksek çözünürlükte Void buton_kontrol(){ if(input(pin_a0)){while(input(pin_a0)); delay_ms(30); if(duty_oran<250)duty_oran+=hassasiyet; } if(input(pin_a1)){while(input(pin_a1)); delay_ms(30); if(duty_oran>0)duty_oran-=hassasiyet; } set_pwm1_duty(duty_oran); // butondan sonraki duty_oranını aktif ediyoruz. } Void main(){ setup_timer_1(T1_DISABLED); // timer 1 modülü devredışı setup_timer_2(T2_DIV_BY_16,254,1); // pwm periyodunu 4.08ms olarak ayarladık. setup_CCP1(CCP_PWM); // pwm modülü aktif ettik set_pwm1_duty(duty_oran); // başlangıç için pwm duty oranını ayarladık for(;;){ // sonsuz döngü buton_kontrol(); } } /* Timer 2 periyot hesaplaması. Osilatör frekansımız 4MHz denetleyicinin kullandığı hız, 4Mhz/4 = 1MHz (komut) 1/1MHz = komut periyot pwm periyot = (1/1000000)*(pr2(254 Olarak ayarladık)+1)*bölme oranı 4.08ms = 0.000001 * 255 * 16 ilk başta duty oranımız 0, yani duty oranı 0 olduğu sürece pwm çıkışı 4.08ms boyunca sürekli lojik 1 de kalacak. Duty oranımızı 25 defa arttırdığımızı düşünelim yani duty oranımız 25 olsun. Basit bir orantı ile; 254 iken 4.08ms lojik 1'de kalıyorsa 25 iken kaç ms 1 de kalır? _____________içler dışlar çarpımı ile doğru orantı 25*4.08/254= 0,40157480314960629921259842519685 ms Yani duty oranımız 25 iken %100 4,08ms x 0,40157480314960629921259842519685 ms _______doğru orantı 100*0,40157480314960629921259842519685/4,08 = %9,84 'ü kadar lojik 1 de kalacak arta kalan süre lojik 0 olacak. */ |