arkadaşlar pwm ile dc motor kontrolü yapıyorum ancak problem var

Başlatan zamzam23, 05 Ağustos 2010, 16:57:38

zamzam23

şimdi, elimde bir adet dc motor ve bir adet encoder var. motoru h-bridge ile pwm kontrollü sürüyorum.encoderle de yön tayini mesafe ölçümü yapıcam bağlamalarım sorunsuz.palsları da dıs kesme yardımıyla sayıyorum ancak problem şu:normalde devirde 40 puls saymam gerek encoderın çözünürlüğü bu, ancak ben 1500 lü bişi sayıyorum.Bu  pwm darbelerinin aynıları enkoder uçlarında da görünüyor. Bu da şöyle bir problem yaratıyor. 40Khz lik PWM darbesi derseniz 1/40000 tanelik hatalı darbe geliyor benım işlemcime. Böylelikle siz dakikada 40 d/d ile dönen motoru bir anda 1400 d/d ile dönüyormuş gibi görebiliyorsunuz.böyle bişi gelmişmiydi basınıza? bu sorunu nasıl aşabilirim?

parda

Kullandığınız işlemciden, enkoder çıkışını saymak için yazdığınız koddan, enkoder çıkışını işlemciye nasıl bağladığınızdan ve mesela motor çalışmazken enkoderi doğru sayıyor motor çalışınca bozuluyor gibi sonuçlarınızdan vs, vs, birazdaha detaylı bahsetmediğiniz için;

bağlamalarınızda problem var diyebilirim.

Bildiğim tek şey, hiç bir şey bilmediğimdir.

Erol YILMAZ

Benim anladığım kadarı ile, Besleme bağlantıların çok zayıf,,,

En basit birşeyden etkilenecek kadar zayıf,

Şaseyi kuvvetlendir, Mevcut halinin 10 katı fln yap.
(+) hattını da kalınlaştır,

+ ile - arasına 2200 uF'lık bir kapasite bağla !

Birçok problemin otomatikman düzelecek...

zamzam23

kullandığım işlemci 16f876,20mhz. encoderin bir ucunu rb0 a diğerini baska birpine direk bağladım.ccs kodu da su sekılde:
#int_ext
void harici_kesme () {
   if(input(pin_c5))
      pals--;
   else
      pals++;
      lcd_gotoxy(1,1);
      printf(lcd_putc,"Pulse:%Ld   ", pals);
}

-----
az:
         if(pals>=40)
         {
              output_bit( PIN_C3, 0);//ENABLE
             output_bit( PIN_C0, 0);//MOTOR SAĞ
                  output_bit( PIN_A5, 0);//MOTOR SOL
                  lcd_gotoxy(1,1);
      printf(lcd_putc,"Pulse:%Ld   ", pals);
         az1:
         goto az1;
         
         }
         else
         {


goto az;
}
-----
bu şekil tam bir tur dönmesi sonra durması gerekiyor ama olmuyor.pwm frekansını değiştiriyorum ona göre daha az veya daha cok donuyor.

ayrıca sunu da farkettım pwm i acmasam da motoru elle de döndürsem yine yanlış sayıyor.devre breadboard üzerinde kurulu.+ ile - arasına 2200uf bağladım ama sorun devam ediyor.

picmanya

pwm kapalı iken motoru elle döndürüncede enkoder yanlış sayıyor demişsin ya birde enkoderi imkan varsa motordan ayırıp motoru döndürmeden yalnızca enkoderi yine pwm kapalı iken elle döndürüp sonuca bakarmısın?
devren sade ise delikli karta falan toplasaydın keşke bredbord denilince benim huzurum iştahım kaçıyor.

parda

Evvela kesme rutininden lcd ye yazma işlerini çıkart kesme rutini sadece sayma işini yapmalı.
daha sonra sayma işinin yapıldığından emin ol yani motoru elle çok yavaş bir şekilde çevirerek izle imkanın varsa skop bağla ve gözle gelen sinyalle sayıcı sonucunu karşılaştır daha iyisi rb0 tetiklendiği kenara göre bir buton bağla ve butona bastıkça saydığı sayıyı izle (buttonu bağlarken kondansatör eklemeyi unutma) kısaca devrenizin gelen pals leri doğru saydığından %100 emin olun.



Bildiğim tek şey, hiç bir şey bilmediğimdir.

zamzam23

lcd rutinini kesmeden cıkardım, encoderi motordan ayırdım.elle cevırınce kesme ile ileri geri dogru sayıyor problem yok ama motora bağladıgımda motoru kontrol ettiğim pwm le bırlıkte sayma sonucu da değişiyor. motor hızlı donerken baska, yavas donerken baska sayıyor.2200uf da care olamadı. encoderi devremden ızole etmelıyım sanırım ama nasıl? optocoupler kulansam faydası olurmu? sizin tavsiyeleriniz nedir?

picmanya

sizin işlemcide quadrature encoder interface portu yok bildiğim kadarı ile enkoderi siz yalıtmak istiyorsunuz
zaten enkoder 0V/+5V. çıkışlıdır diye düşünüyorum bu güne kadar gördüklerim hep böyle idi yapısı gereği enkoder çıkışı optik izoleli olmak zorunda siz enkoderin index,A ve B uçlarına (index'i kullanmıyorda olabilirsiniz) pic pin leri ile 470R bir direnci araya seri bağlayın bu dirençlerin enkoder tarafları ile toprak arasına 1nF. seramik kapasite bağlayın ve 470R lerin pic'e giren taraflarınıda 33k direçlerle toprağa ayrı ayrı çekin bu işinizi görmeli ama illa araya opto girecekseniz opto çıkışını +5V ile işlemcide değerlendirmeniz gerektiğini unutmayın. 

zamzam23

optocoupler e ihtiyac kalmadı dediğiniz yöntemle izole ettim.şimdi duzgun calısıyor tesekkür ederim.