pwm-16f628a(motor-kontrol)

Başlatan kareli, 27 Mart 2016, 20:26:47

kareli

arkadaslar kolay gelsın.;
bir uygulama yaptım  cıkısınada led bagladım ledın yanma hızını ben ayarlamak ıstedım fakat sımulasyonda goremedım galıba hep aynı yanıyor gıbı geldı bana bır yazılımıma bakarmısınız kolay gelsın;


#include <.c>  // pic 16f628a   ccp1 giriş  pin b3

#use fast_io(a)
#use fast_io(b)
#define ileri pin_a0
#define geri pin_a1
int i=50;

void main(){

setup_ccp1(ccp_pwm);
setup_timer_2(t2_div_by_6,i,1);
set_pwm1_duty(50);
while(1){
if(input(ileri))

delay_ms(100)
while(input(ileri));
i+=5;
if(i>250)
i=250;
setup_timer_2(t2_div_by_16,i,1)

if(input(geri))

delay_ms(100)
while(input(geri));
i-=5;
if(i<60)
i=60;
setup_timer_2(t2_div_by_16,i,1)


}


}

'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

vitruvius

setup_timer2 fonksiyonu ile oynama. set_pmw_duty fonksiyonundaki değeri değiştir.

ahmetbudak

#2
R4 VE R5 Dirençlerini ne için devrene ekledin anlamadım bu durumda butonlara bastığında ilgili pinlere giriş voltajı olmuyor yani lojik 1 olmuyor gibi  R4 ve r5 dirençlerini devreden kaldır yni butondan grounda direk geç bir de R2(2) etiketli kaynağın DC 5 voltmu?

kareli

Doluluk suresini duty cycle biraz artirayim hocam olacak mi bi bakayim ben. Hocam r4 r5 kaldirirsam buton her iki durumda da ground olmazmi.r2 r3 demek istedn galiba
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

ahmetbudak

Alıntı yapılan: kareli - 27 Mart 2016, 22:16:07

Doluluk suresini duty cycle biraz artirayim hocam olacak mi bi bakayim ben. Hocam r4 r5 kaldirirsam buton her iki durumda da ground olmazmi.r2 r3 demek istedn galiba
Eksik anlattım..  Butonlarını r4 ve r5 yerine koy r2 ve r3 dursun

dursuncemal

#5
r2 ve r3 u kaldir. oraya girdigin voltaji iptal et (r2(2)yazanyeri)   butonlarin birlestigi ucu +5 volta bagla. noktalama ve parantez hatalari olabilir.!!

#include <.c>  // pic 16f628a   ccp1 giriş  pin b3

#use fast_io(a)
#use fast_io(b)
#define ileri pin_a0
#define geri pin_a1
int i=50;

void main(){

setup_ccp1(ccp_pwm);
setup_timer_2(t2_div_by_16,255,1);
set_pwm1_duty(0);
 while(1){

if(input(ileri) &&  i < 250 ){ delay_ms(100);  i+=5; }      //eger  ileri 1 ise ve i kucukse 250 den 200 ms bekle > i yi 5 ile topla;

if(input(geri) && i > 0){i = i-5; delay_ms(100);}    // eger geri 1 ise ve i buyukse 0 dan i den 5 cikart


set_pwm1_duty(i);//





}


}
:=

kareli

Tamam abilerim anladim.Birde son olarak buton arklarini onlemek icin ne yapmamiz gerekiyor.
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

a.zorba

 pratik olanı pic e en yakin yerden 100n .
Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

yasin_arsln

#8
Resimdeki  gibi kullanabilirsin.



kareli

#9
Tamam hocalarim saolun

mesaj birleştirme:: 28 Mart 2016, 12:19:39

Dursun hocam ben senin yazdigin programi yeni inceledim sen periyodu sabit tutmus ve duty cycle i degiskenini atamissin burada motor calismada kalma suresine ayarlamisbolmuyormusun sonucta frekans sabit kaliyorda.
Off ulan kendimden etkilendim  :)
'Bırakın bugün onların olsun: ama uğrunda çok uğraştığım gelecek, benimdir' Nikola Tesla.

dursuncemal

evet frekans sabit kalacak sadece periyodun aktif(on),pasif(off) kisimlari degisecek.bu degeri de set_pwm1_duty(0); fonksiyonuna koydugun deger ile degistireceksin.bu arada motorun calismada kalma suresi diye bir sure ayarlamadik.(bu on off sureleri senin gozle algılayacagın sureler degil) duty degeri 0 dan baslayarak belli bir sure sonra motorun yavas yavas doner.duty degeri artikca senin motorunun donme hizi artar.
motor hic bir zaman durmaz.motoru durdurmak icin duty = 0;olmali.birde 100 ms araliklarla okudugun buton icin cok fazla buton arki sikintisi olmaz.buton arki sikintisi daha cok seri buton okumalarinda neydana gelir. yani butonu  saniyede 1000 kere okuyos isen bu durumdan etkilenirsin.
:=