buton geçişlerinde kilitlenme.

Başlatan myprayer14, 19 Ekim 2016, 22:01:19

myprayer14

herkese hayırlı akşamlar,
motor kontrol devresinde yön değişikliğinde bir yöne geçiş yaparken arada bir kilitlenme oluyor. şöyle açıklayayım geçişleri;

sağ sol =sıkıntı yok

sol stop sağ=sıkıntı yok

sağ stop sol= 3.veya 4. defa denememde sağ buton çalışmıyor.

motor sağa dönmüyor. ama bu halde iken sol sağa yapıyorum veya sol stop sağ. çalışmaya devam ediyor. Ama bi kaç sağ stop sağ stop sağ stop yapınca sağ buton arada çalışmıyor. Motor dönmüyor. Anlamış değilim. sorun ne olabilir???

ete

Sorun yaratabilecek bir sürü şey olabilir. Ama ortada şema veya kod yok iken bir yorum yapmak gerçekten zor.
Ete

myprayer14

#2
Alıntı yapılan: ete - 19 Ekim 2016, 22:15:14
Sorun yaratabilecek bir sürü şey olabilir. Ama ortada şema veya kod yok iken bir yorum yapmak gerçekten zor.
Ete

#include <18F2520.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay (clock=4000000)

int i=50;

void main()
{

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   
   setup_oscillator(OSC_4MHZ);
   
   
   set_tris_a(0x1F);   // RA0 ve RA1 pinleri giriş
   set_tris_b(0x00);
   set_tris_c(0x00);   // portc komple çıkış.
   output_b(0x00);
   output_c(0x00);
  set_pwm1_duty(0);
  set_pwm2_duty(0);
   setup_ccp1(CCP_PWM);  // CCP1 birimi PWM çıkışı için ayarlandı
   setup_ccp2(CCP_PWM);  // CCP2 birimi PWM çıkışı için ayarlandı
   
   setup_timer_2(T2_DIV_BY_1,100,1);
   
   
   

   // TODO: USER CODE!!
   
       while(1) {       
         if(!input(pin_a3)){
         
            delay_ms(25);
            set_pwm1_duty(0);
            output_low(pin_c3);
         
           
            set_pwm2_duty(i);
            output_high(pin_c4) ;
           
            //while(!input(pin_a3));
         }
         
         if(!input(pin_a4)){
         
            delay_ms(25);
            set_pwm2_duty(0);
            output_low(pin_c4);
            delay_ms(100);
           
            output_high(pin_c3) ;
            set_pwm1_duty(i);   
            delay_ms(825);
           
            //while(!input(pin_a4));
         }   
         if(!input(pin_a2)){
         
            delay_ms(25);
            output_high(pin_c3);
            output_high(pin_c4) ;
           
            set_pwm1_duty(0);
            set_pwm2_duty(0);
           
           
            //while(!input(pin_a2));
         }
       
         
         }
         
       

         
         
       
}
         
         
   

     
     

     


buton kısmı



pic kısmı


ete

Kodlarda hata göremedim. Yok derken sağ butonu ile sol butonunun çalışmaları bir birlerinden farklı.
Halbuki iki butonda aynı şekilde görev yapması gerekir. Sağ butonuna (PORTA.4) basılınca ;
-Önce 25 ms gecikme veriyorsun.
- Sonra 2 nolu PWM çıkışını duty değerini sıfırlıyorsun
- Sonra kanala ait led'i low yapıyorsun
- ardından 100 ms bekliyorsun
- sonra 1 nolu PWM kanal ledini HIGH yapıyorsun
- ve sonunda 1 nolu PWM kanalını duty değeri kadar açıyorsun.
- En önemliside 825 ms gecikme veriyorsun.

Benzer işlemleri yapması beklenen SOL (PORTA.3) butonuna basılınca neler yapılıyor birde ona bakalım.
- Önce 25 ms gecikme veriyorsun
-  Sonra 1 nolu PWM çıkışını duty değerini sıfırlıyorsun
- Sonra kanala ait led'i low yapıyorsun
- sonra 2 nolu PWM kanal ledini HIGH yapıyorsun
- ve sonunda 2 nolu PWM kanalını duty değeri kadar açıyorsun.
bu kadar. Bu butonda 25 ms dışında bir gecikmen yok. Diğerinde 100 ms ve sonda 825 ms gecikmen var.
Motorları nasıl sürdüğün şemanda gözükmüyor. Ters EMK devreyi etkiliyor olabilir.
Motor bir yana dönerken DUR emrini verdin ama motor hemen durmaz ekstra fren yapmazsan tabiiki. Bu esnada ters voltaj üretir buna EMK deniyor. Bunu devreye basmaya çalışır. Bu nedenle dur emrinden sonra bana kalırsa 800 ms beklet sonra sağ yada sol komutlarını verdir.

Diğer bir sorun da Duty değerlerinin aldığı değerlerdir. Kontrol edebiliyorsan kilitlenme anında o kanala ait duty değerini bir şekilde izlemeye çalış. Belkide sıfırlanıyordur. Uzak ihtimal ama zaten burada anlamsız bir durum söz konusu her ihtimali değerlendirmek zorundasın.

Bana kalırsa doğru çalışan kanal mantığını diğer kanalada uygula aynı gecikmeleri ver ve izle bakalım değişenbir şey oluyormu. Olmuyor ise devreni donanım olarak kontrol etmen gerekiyor derim.

Ete


myprayer14

#4
Alıntı yapılan: ete - 20 Ekim 2016, 08:24:48
Kodlarda hata göremedim. Yok derken sağ butonu ile sol butonunun çalışmaları bir birlerinden farklı.
Halbuki iki butonda aynı şekilde görev yapması gerekir. Sağ butonuna (PORTA.4) basılınca ;
-Önce 25 ms gecikme veriyorsun.
- Sonra 2 nolu PWM çıkışını duty değerini sıfırlıyorsun
- Sonra kanala ait led'i low yapıyorsun
- ardından 100 ms bekliyorsun
- sonra 1 nolu PWM kanal ledini HIGH yapıyorsun
- ve sonunda 1 nolu PWM kanalını duty değeri kadar açıyorsun.
- En önemliside 825 ms gecikme veriyorsun.

Benzer işlemleri yapması beklenen SOL (PORTA.3) butonuna basılınca neler yapılıyor birde ona bakalım.
- Önce 25 ms gecikme veriyorsun
-  Sonra 1 nolu PWM çıkışını duty değerini sıfırlıyorsun
- Sonra kanala ait led'i low yapıyorsun
- sonra 2 nolu PWM kanal ledini HIGH yapıyorsun
- ve sonunda 2 nolu PWM kanalını duty değeri kadar açıyorsun.
bu kadar. Bu butonda 25 ms dışında bir gecikmen yok. Diğerinde 100 ms ve sonda 825 ms gecikmen var.
Motorları nasıl sürdüğün şemanda gözükmüyor. Ters EMK devreyi etkiliyor olabilir.
Motor bir yana dönerken DUR emrini verdin ama motor hemen durmaz ekstra fren yapmazsan tabiiki. Bu esnada ters voltaj üretir buna EMK deniyor. Bunu devreye basmaya çalışır. Bu nedenle dur emrinden sonra bana kalırsa 800 ms beklet sonra sağ yada sol komutlarını verdir.

Diğer bir sorun da Duty değerlerinin aldığı değerlerdir. Kontrol edebiliyorsan kilitlenme anında o kanala ait duty değerini bir şekilde izlemeye çalış. Belkide sıfırlanıyordur. Uzak ihtimal ama zaten burada anlamsız bir durum söz konusu her ihtimali değerlendirmek zorundasın.

Bana kalırsa doğru çalışan kanal mantığını diğer kanalada uygula aynı gecikmeleri ver ve izle bakalım değişenbir şey oluyormu. Olmuyor ise devreni donanım olarak kontrol etmen gerekiyor derim.

Ete

İlk olarak buton kısımlarının ikisinini de yazılım olarak aynı hale getirdim. Stoptan sonra 100ms ve 800ms koydum yine aynı sonuç oldu. Sağ butona bastığımda yine 2. veya ileriki basışlarda yine aynı sorunlarla karşılaştım.

Ama şöyle bir ayrıntı var. Sağ butona bastığımda bacakların birine 5v diğer bacağa duty %50 de olduğu için 2.5v gözüküyor.Ama motor dönmüyor. Voltajlara bakarken yanlışlıkla 2.5v gelen yer ile 5v gelen bacakların ikisine birden yanlışlıkla prop uçlarını değdirdiğimde buton çalışıyor. Aynı şeyi bilerek tekrar yaptığımda yine aynı sonuç. Belki işe yarar diye yazayım dedim.

ete

Motor uçlarında gördüğün voltajlar doğru. Ama sckop ile bakmak lazım bir parazitik durum varmı diye. Zira dokunma ile motor harekete geçiyorsa sanki GND (PWM den gelen) doğru gelmiyor gibi geldi bana.
Bana kalırsa motor uçlarını ters çevir ve aynı sorunun bu sefer sağ butona basılınca olup olmadığına bir bak istersen.
Tabiiki motorunda sürekli bir yöne dönmüş ise fırçalar yer etmiş olabilir ters tarafa nazlı dönebilir. O tarafıda biraz alıştırmak da gerekebilir. Bu sorun PWM sürme hatası yada motorun bir yöne nazlı kalkması gibi gözüküyor. Sorun olan tarafta PWM yeterince güçlü gelmiyor olabilir. Yani akım yetersizliği olabilir.
Aslında Duty değerini 50 yerine 80 gibi bir değer ver. Sonra yeniden dene yeterli PWM gelince motor nazlanmadan kalkabilir.
Denemelerden sonra neyin kusurlu olduğunu daha kolay anlayabilirsin.
Ete

myprayer14

Alıntı yapılan: ete - 21 Ekim 2016, 07:10:16
Motor uçlarında gördüğün voltajlar doğru. Ama sckop ile bakmak lazım bir parazitik durum varmı diye. Zira dokunma ile motor harekete geçiyorsa sanki GND (PWM den gelen) doğru gelmiyor gibi geldi bana.
Bana kalırsa motor uçlarını ters çevir ve aynı sorunun bu sefer sağ butona basılınca olup olmadığına bir bak istersen.
Tabiiki motorunda sürekli bir yöne dönmüş ise fırçalar yer etmiş olabilir ters tarafa nazlı dönebilir. O tarafıda biraz alıştırmak da gerekebilir. Bu sorun PWM sürme hatası yada motorun bir yöne nazlı kalkması gibi gözüküyor. Sorun olan tarafta PWM yeterince güçlü gelmiyor olabilir. Yani akım yetersizliği olabilir.
Aslında Duty değerini 50 yerine 80 gibi bir değer ver. Sonra yeniden dene yeterli PWM gelince motor nazlanmadan kalkabilir.
Denemelerden sonra neyin kusurlu olduğunu daha kolay anlayabilirsin.
Ete
Pwm den gelen gnd ile ne demek istediğinizi pek anlamadım.  Duty yi yarıda tutmamin sebebi adaptör 24v1a motor 12v 1500devir.  Eğer sıkıntı olmazsa biraz artırabilirim. Ama dediğiniz gibi bi durum kısmen var sanki ama nedenini bilemiyorum. Tutukluluk yapan sağ yöne dönerken sol yöndeki gibi bir hızla başlıyor ama sonra hızı hafif düşüyor. Dediklerinizi akşam uygulayıp size bilgi vereyim.

ete

Motorun iki ucu var birine + (pozitif) diğerine - (negatif) voltaj vermen gerekiyor. Sen devir kontrolü yapabilmekiçin Birine + diğerine ise %50 duty değeri olan PWM sinyali veriyorsun. PWM nin LOW olduğu konumlarda bu uç motora GND uygulayarak motorun dönmesini sağlıyor. PWM nin HIGH uyguladığı konumlarda ise Motora bir yerde fren uygulanıyor. Zira motorun iki ucuna aynı voltajı (+ veya GND) verirsen motor fren yapar DC motor için geçerli bu söylediğim.
Sonuçta bir tarafın PWM sinyali motora güçsüz bir şekilde ulaşıyor ise PWM üzerinden yeterli GND alamayacaktır. Bu konumu tarif etmeye çalışmıştım. Bu nedenle arada mutlaka ya bir röle yada bir transistör kullanıyor olman gerekirki bunlara bakman gerekir diye düşünüyorum. Bu nedenle motor uçlarını ters çevirirsen aynı sorunun bu sefer Durdur+SOL tuş kombinasyonunda meydana geleceğini ama motorun da ters yöne döneceğini düşündüm. Şayet sorun motorun dönüş yönünde değil ise bu konumda aynı sorunu yaşaman gerekir. Ama motor yalnızca SOL yöne nazlı dönüyor ise aynı sorunu bu sefer Durdur+SAĞ tuş kombinasyonunda yaşaman gerek. Bunlar ip uçların. Bu ip ularına göre sorunun kaynağını bulabileceğini düşünüyorum.
Olası sebeplere tekrar bakalım istersen;
- Bir yönde PWM sürücün yeterli akımı (gücü) sağlayamıyor. Bunu motor uçlarını ters çevirerek kolayca tespit edebilirsin. Aynı olay ters yönde de meydana geliyor ise motorun dönüş yönüne bağlı olmadan sadece bir yönde PWM yetersiz kalıyor demektir.
- Motor bir yöne rahat kalkıyor ama diğer yönde kalkışta zorlanıyor. Bunuda benzer şekilde motor uçlarını ters çevirerek anlayabilirsin. Aynı sorun yine aynı yönde ama tuş kombinasyonudan bağımsız meydana geliyor ise bu sorun var demektir. Başka bir motorla deneyebilirsin.

Ete

myprayer14

#8
Alıntı yapılan: ete - 21 Ekim 2016, 08:54:26
Motorun iki ucu var birine + (pozitif) diğerine - (negatif) voltaj vermen gerekiyor. Sen devir kontrolü yapabilmekiçin Birine + diğerine ise %50 duty değeri olan PWM sinyali veriyorsun. PWM nin LOW olduğu konumlarda bu uç motora GND uygulayarak motorun dönmesini sağlıyor. PWM nin HIGH uyguladığı konumlarda ise Motora bir yerde fren uygulanıyor. Zira motorun iki ucuna aynı voltajı (+ veya GND) verirsen motor fren yapar DC motor için geçerli bu söylediğim.
Sonuçta bir tarafın PWM sinyali motora güçsüz bir şekilde ulaşıyor ise PWM üzerinden yeterli GND alamayacaktır. Bu konumu tarif etmeye çalışmıştım. Bu nedenle arada mutlaka ya bir röle yada bir transistör kullanıyor olman gerekirki bunlara bakman gerekir diye düşünüyorum. Bu nedenle motor uçlarını ters çevirirsen aynı sorunun bu sefer Durdur+SOL tuş kombinasyonunda meydana geleceğini ama motorun da ters yöne döneceğini düşündüm. Şayet sorun motorun dönüş yönünde değil ise bu konumda aynı sorunu yaşaman gerekir. Ama motor yalnızca SOL yöne nazlı dönüyor ise aynı sorunu bu sefer Durdur+SAĞ tuş kombinasyonunda yaşaman gerek. Bunlar ip uçların. Bu ip ularına göre sorunun kaynağını bulabileceğini düşünüyorum.
Olası sebeplere tekrar bakalım istersen;
- Bir yönde PWM sürücün yeterli akımı (gücü) sağlayamıyor. Bunu motor uçlarını ters çevirerek kolayca tespit edebilirsin. Aynı olay ters yönde de meydana geliyor ise motorun dönüş yönüne bağlı olmadan sadece bir yönde PWM yetersiz kalıyor demektir.
- Motor bir yöne rahat kalkıyor ama diğer yönde kalkışta zorlanıyor. Bunuda benzer şekilde motor uçlarını ters çevirerek anlayabilirsin. Aynı sorun yine aynı yönde ama tuş kombinasyonudan bağımsız meydana geliyor ise bu sorun var demektir. Başka bir motorla deneyebilirsin.

Ete

Ete bey,
Öncelikle cevaplarınız için çok teşekkür ederim. Dediklerinizi denedim. Başka motorla da denedim sonuç değişmedi. Ama çözüme şöyle gittim kısmen de olsa: durdur komutunu da ki highları lowa çekince motor düzgün çalışıyor.Geçişlerde de sıkıntı yok.Ama ani fren yapmıyor yavaşca duruyor. Bilemiyorum ani fren de neden olmuyor.(Sizce?)
Bir şey daha var, daha önce bahsetmiştim sağ tarafa motor kalktıktan sonra motor hafif yavaşlıyor sol tarafta olmuyor demiştim. Ama farkettim ki bi 10 sn çalıştıktan sonra aynı şey sol tarafa doğru çalışırken de oluyor. Motor çalıştıktan bir süre sonra yavaşlıyor. Bu yavaşlamaların sebebi ne olabilir ki?
Teşekkürler.

ete

Sorularının cevabını vermem zor elimde hiç bir done yok çünki. Ancak mantığa bağlı cevap verebilirim. Motor neden fren yapmaz iki ucuna aynı voltaj gelmiyorsa yapmaz. Bununda sebebi motoru sürdüğün sistem her neyse ondan kaynaklanıyordur.
Aynı şekilde motorun 10 sn sonra yavaşlaması ya programda ona uygun bir komut vardır, yada güç kaynağında düşme oluyordur, yada yine sürücü devren buna sebep oluyordur.

Ete

Powered by EzPortal