Şimdi Ara

pic pwm yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
12
Cevap
0
Favori
504
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar meraba dünden beri uğraşıp yapamadığım pwm olayını soracaktım isiste yaptığım çalışmada motorları istediğim gibi çalıştırabiliyom ancak hızlarını ayalamak için pwm lazım olduğunu öğrendim ancak kullandığım pic16f877a ile bunu nasıl yaparım sürücüde devreye yerleştridim ancak programlarken bunu nasıl yapıcam yardımcı olabilecek olan arkadaşlar lütfen yardım



  • mustafa690 kullanıcısına yanıt
    picin pwm cıkıslarını kullanabilirsin. bunun için picin datasheetinden pwm cıkısları nasıl ayarlanıyor öğrenmen lazım.

    yada pwm cıkıslarını kullanmak istemezsen herhangi bir cıkısını ac kapa sürelerini değiştirerek pwm yapabilirsin. tabi bu pwm cıkıslarını direk motara vermiyorsunda orası sonraki konu once senin picle pwm sinyali olusturmayı öğrenmen lazım.
  • hocam aç kapa şeklinde oluşturdum ancak voltaj 0 ile 5v arasında gidip geliyor "delay_ms(1);" motoru sekte yapacak fazla pwm bunu daha doğrusal yapabilir kodu ve isis tablosu gibi bir örnek atsanız çok yardımcı olur
  • mustafa690 kullanıcısına yanıt
    pwm dediğimiz seyde o zaten voltajın sıfırla 5 volt arasında olması. değişen sey hızı ayarlayabilmen için ne kadar 5 voltta durdugu ne kadar 0 voltta durdugu.
    motoru sekte yapmaz sanırım 10 khzlik bir sinyal.


    50 us 5volt 50 us 0 volt. bu şekilde yaparsan moturun 5volt verdiğinde atıyorum 3000 rpm le donuyorsa bu şekilde yaptıgında 1500 rpmle doner gibi.



    10 us 5 volt 90 us 0 volt yaparsan 300 rpm le doner. 20 us 5 volt 80 us 0 volt yaparsan 600 rpm le doner gibi. pwm dediğimiz sey işte bu 100 us sinyalin 5 volt ve 0 volt sürelerini değiştirmemiz. soyle bişey yapabilirsiniz. bir tane buton yapın o butana her bastıgınızda motorunuz bir kademe hızlansın mesela.

    pwm sayıcı(){
    if {pin2==1;
    butana bastıgınız kadar us ++;}

    motor pwm() {

    pin1 =1; delay(butana bastıgınız kadar us);
    pin1=0; delay(100-butana bastıgınız kadar us);
    }


    while(){
    motor pwm();
    pwm sayıcı();

    }

    kodları oylesine yazdım. hata olabilir sadece mantıgını anlatmaya calıstım.



    < Bu mesaj bu kişi tarafından değiştirildi toyer -- 27 Nisan 2014; 14:52:12 >




  • hocam benim yaptığım şekilde yapsam bi zararım olurmu


    "output_high(pin_b1);
    delay_ms(i);
    output_low(pin_b1);
    delay_ms(20); "


    ben bu şekilde yaptım kullandığım pic16f877a sürücü l298

    bana bunu nasıl yapmam gerektiğini belirtirseniz sevirim eğer bu şekilde dezavantajım olursa pwm i doğru kodlarıyla örneklerseniz bende çalıştırıp öğrenmiş olurum



    < Bu mesaj bu kişi tarafından değiştirildi mustafa690 -- 27 Nisan 2014; 15:26:04 >
  • mustafa690 kullanıcısına yanıt
    ben kodlarıyla yazmam , balık vermem balık tutman için elimden geleni yaparım. mili saniye değil us delay fonksiyonu kullan. suan 20 ms delay kullanıyorsun ki buda 50 hz e denk gelir. motorun kesik kesik çalısır.

    aşağıda ki i yi nasıl belirliyorsun bilmiyorum ama delay fonksiyonunu micro saniye delay verecek sekilde kullan. yani micro saniye delay yapan fonksiyon kullan. portlardan birine bitane buton bağlayıp mı i yi belirliyorsun yoksa kodun içine direk mi yazıyorsun "i" yi?


    init i=0;




    while(){
    output_high(pin_b1);
    delay_us(i);
    output_low(pin_b1);
    delay_us(100-i);
    pwm sayıcı();
    }

    pwm sayivci fonksiyonunda i yi artırıp azaltabileceğin bir kod yazmaya calış. mesela picin boş herhangi 2 bacagına butonlar bagla. bir buton i yi artırmak, 1 buton i yi azaltmak için. "i" en basta sıfır olsun. butonlardan birine bastıkça artsın diğerine bastıkça azalsın.


    bastın bastın bastın diyelim i =20 oldu bu durumda output_high(pin_b1); b1 5 volt olacak 20 us bekleyecek sonra 0 olacak (100-20=80 us bekleyecek sonra tekrar 5 olacak. dongu devam edecek.




  • hocam i yanlış oldu başka bir kodla karıştı kod bu şekildeydi
    "
    output_high(pin_b1);
    delay_ms(1);
    output_low(pin_b1);
    delay_ms(1)"






    ama zannediyosam ben milisaniyede açıp kapatıyom siz daha az bir zamanda açıp kapatmak için us kullanıyosunuz bu şekilde daha hızlı kaparım doğrumuyum ?



    < Bu mesaj bu kişi tarafından değiştirildi mustafa690 -- 27 Nisan 2014; 16:25:18 >
  • mustafa690 kullanıcısına yanıt
    1 ms kullanıyorsanız toplam 2 ms eder. buda 1/0.002saniye = 500 hz eder ki bundada motorun kesik kesik çalısabilir.


    eger bu süreleri dahada düşürürseniz mesela 0.1 ms olursa o zaman 1/0.0002saniye=5000 hz eder. 0.01 kullanırsanız 50000 hz eder gibi.


    daha dusuk kullanırsanız kesik kesik calışma varsa motorda bu düzelir.




    pwm kontrol içinde bu girmis oldugunuz süreleri değiştirebileceğiniz bir sistem lazım.


    butonlarla veya picin analog girişlerini kullanarak pot baglamakla gibi.
  • iyi ama nasıl
  • quote:

    Orijinalden alıntı: mustafa690

    iyi ama nasıl

    okuyup arastırıp deneyerek.

    dediğim gibi hazır kod yazıp veremem.
  • hocam 2 gündür bakıyom hiç bişey anlamadım hepsi ya farklı bir compiler kullanıyor yada farklı bir entegre sizden olduğu gibi istemiyom verdiğim kodu pwm e yorumlayın yeter bu kadar basit e alınan bişey i neden kimse doğru düzgün anlatmıyor
  • quote:

    Orijinalden alıntı: mustafa690

    hocam 2 gündür bakıyom hiç bişey anlamadım hepsi ya farklı bir compiler kullanıyor yada farklı bir entegre sizden olduğu gibi istemiyom verdiğim kodu pwm e yorumlayın yeter bu kadar basit e alınan bişey i neden kimse doğru düzgün anlatmıyor

    kod yazmak o 2 gunde halledilecek birşey değil zaten.
    o yuzden uzerinde ugras bu senin iyiliğin için. verdiğin kodu pwm e yorumladım zaten.


    oncelikle motorunu kac khz de sureceksin ona karar ver. diyelim 20 khz. buda sana 1/20000 =50 us yapar. sonra yapacagın sey 50 us toplam olmak üzere

    picin pinini istediğin hıza göre pin high veya pin low yapmak. 10 us high 40 us low,20 us high 30 us low gibi. ama her zaman toplamları 50 us olacak sekilde.

    pice bahsettiğim 20 , 30 us gibi süreleri girmek sana kalıyor. ister 2 tane pine buton baglar butonların birini artırmaya birini düşürmeye kullanırsın,

    istersende sürelerle ugrasmayıp picin pwm cıkıslarını kullanırsın. bunun için pwm cıkıslarını nasıl kullanabileceğini picin datasheetinden okursun. sonra yine

    datasheetten analog girişlerini nasıl kullanabileceğine bakar analog girişlerinden birine potansiyometre takar ordan hız kontrolü yaparsın.

    bunlar yazılım bilgisi ve pici bilmeni gerektirir. insanlar senelerini harcıyor yazılım üzerine. 1-2 gün zaman harcamıssın cok değil.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.