Buton ile motor yön kontrol

Başlatan ahmet910, 08 Ekim 2020, 23:53:26

ahmet910

Arkadaşlar merhaba
İki adet dc motor ile bir araba yapmaya çalışıyorum.Devrede 16f84 e bağlı 4 adet buton ve L298 motor sürücü entegresi var.
İleri butonuna basıldığında iki motorda ileri
Geri butonuna basıldığında iki motorda geri
Sağ butonuna basıldığında bir motor ileri bir motor geriye dönecek
Sol butonuna basıldığında bir motor geriye bir motor ileriye dönecek.

Yazdığım programda C ve D bölümleri(veya A ve B bölümleri) eklendiğinde motorların hızları yarıya düşüyor.Yardımcı olursanız sevinirim.



#include <16f8f84 araba kod.h>

#fuses XT,NOWDT,NOPROTECT
#use delay (clock=4000000) 
#define butonileri pin_a0
#define butongeri pin_a1
#define butonsag pin_a2
#define butonsol pin_a4

#define sol clock pin_b0
#define sol anti clock pin_b1
#define sag anti clock pin_b2
#define sag clock pin_b3

int1 a;
int1 b;
int1 c;
int1 d;

void main()
   {

   set_tris_a(0b11111111);
   set_tris_b(0b00000000);
   output_b(0x00);
   
   basla:    

 a=(input(pin_a0)==0); // ileri
   
   output_bit(pin_b1,a);// sol anti clock
   output_bit(pin_b3,a);// sag clock
    
  
 b=(input(pin_a1)==0); // geri
   
   output_bit(pin_b0,b);// sol clock
   output_bit(pin_b2,b);// sag anti clock
   
 
 c=(input(pin_a2)==0); // sag
  
   output_bit(pin_b0,c);// sol clock
   output_bit(pin_b2,c);// sag anti clock
   
 
 d=(input(pin_a3)==0); // sol
   
   output_bit(pin_b1,d);// sol anti clock
   output_bit(pin_b3,d);// sag clock
   

   goto basla;
   
   }
   



ete

L298 'i yeterince kontrol edemediğini düşünüyorum.
Buton pinlerinin Lojik değerlerini L298 in kontrol girişlerine vermişsin. Bence yanlış. Fikir olarak doğru olabilir ama eksik kalan komutlar var. Adım adım gidecek olursak;
MOTOR_A nın saat yönünde dönmesi için ne gerekiyor bir bakalım.
IN1=1 ve IN2=0 olması gerek.
Senin programa bakalım şimdi
A0 butonuna bastık.
   output_bit(pin_b1,a);// sol anti clock            IN2=0 IN1=1
   output_bit(pin_b3,a);// sag clock                 IN4=0 IN3=1
böylece sağ ve Sol motor saat yönünde start aldı.
Peki aynı zamanda D kontrolüne bir bakalım istersen.
   output_bit(pin_b1,d);// sol anti clock             IN2=1
   output_bit(pin_b3,d);// sag clock                  IN4=1
Burada A3 butonuna basılmadığı için D=1 dir. Bu nedenle PinB1=1 yani IN2=1, PinB3=1 yani IN4=1 olmaya zorlanıyor. Halbuki A kontrolüne aynı pinleri LOW yapmaya çalışıyorsun. Dolayısıyla çakışma var.
İşin doğrusu IF komutu kullanarak bu işi yapmalısın. Amacını anlıyorum IF kullanmadan işi otomatize edeyim demişsin ama olmamış. Yada biraz daha düşün bir iki ilave ile bu kontrolü yine yapabilirsin. Mesela D kontrolü A=1 ise yapılsın değilse yapılmasın. Benzer şekilde A kontrolü D=0 ise yapılmasın gibi.
Ete

ahmet910

Teşekkür ederim,en kısa zamanda deneyip başka arkadaşlarında yararlanması için sizinle paylaşacağım.

ahmet910

Merhabalar
Programı dediğiniz gibi if else komutları ile düzenledim,şimdi motorlar güçten düşmüyor,istediğim gibi çalışıyor .
Yardımınız için teşekkür ederim.

#include <L298 dc motor driver.h>
#fuses XT,NOWDT,NOPROTECT
#use delay (clock=4000000)

#define butonileri pin_a0
#define butongeri pin_a1
#define butonsag pin_a2
#define butonsol pin_a3

//#define sol clock pin_b0
//#define sol anti clock pin_b1
//#define sag anti clock pin_b2
//#define sag clock pin_b3

void main()
{
  set_tris_a(0b11111111);
  set_tris_b(0b00000000);
  output_b(0x00);

  while(TRUE)
    {
    
  if(input(butonileri)==0)
    {
    output_B(0x0A);
    }
    else
        if(input(butongeri)==0)
          {
          output_B(0x05);
          }
          else
            if(input(butonsag)==0)
              {
              output_B(0x06);
              }
              else
                if(input(butonsol)==0)
                  {
                  output_B(0x09);
                  }
                  else
                    {
                    output_B(0x00);
                    }
      
        }      
  }


Powered by EzPortal