Daha önce çift H köprülü L298N motor denetleyicinin çalışma ilkesinden bahsetmiştik. Bu yazımızda Atmega 168 diğer adıyla Arduino mikrodenetleyici ve L298N ile çift kutuplu adım motorunun denetimini anlatacağız. Kullanılacak motor L298N entegresinin sınır değerleri olan 46 V gerilim ve 4 A akım ile çalışmalıdır.

ENA ve ENB ayrı
ENA, ENB Ayrı 

Motor geriliminin iki katına çıkacağına dikkat ediniz. Örneğin tek kutuplu bir motor 5 V ile çalışıyorsa, çift kutuplu olması durumunda, seri olan sargılardan dolayı 10 V ile çalışır.

Arduino mikrodenetleyici serisi mikrodenetleyici ile arayüz oluşturma ve programlamanın temellerini öğrenme açısından hem öğrenciler hem de hobi olarak elektronikle ilgilenenler için çok faydalıdır. Bu çalışma da donanım ve yazılımıyla beraber, adım motorun L298N ile sürülmesinin anlatılması açısından böyle bir fayda sağlamaktadır.

Çalışmada kullanılan adım motorun adımı 7.5 derecedir ve 360 derece dönmek için 48 adım atmalıdır. Adım motorlar çok doğru çalıştığı için konum geri beslemesine ihtiyaç yoktur.

Çift kutuplu adım motorun yalnızca iki sargısı vardır ve ters kutuplanarak yönü değiştirilir. Tek kutuplu adım motorun yönü dört sargıyı anahtarlayarak değiştirilir.

ENA ve ENB Birleşik; Arduino İle Üç Uçlu Bağlantı
ENA ve ENB Birleşik; Arduino İle Üç Uçlu Bağlantı

İkinci devrede adım motoru çalıştırmak için Arduino denetleyiciyle sadece 3 bağlantı var. Etkinleştirme uçları ENA ve ENB’yi birbirine bağlayıp 74LS04 entegresinden iki evirici kullandık. İstenirse yine ENA ve ENB ayrılabilir. Programdan ENB, yellow ve black içeren ifadelerini silersek üç sayısal uç D10, D12, D13 boşa çıkmış olur. Ayrıca “#define orange 11” ifadesi yerine “#define orange 10” yazıp D10 ucunu In3 ucuna bağlayabiliriz.

KOD:

#define CW 2
#define CCW 3

#define ENA 8
#define ENB 13

#define black 9  // In1
#define brown 10  // In2
#define orange 11  // In3
#define yellow 12  // In4



void setup()  {

  DDRB = 0x3f; // Sayısal uçlar 8-13 çıkış
  PORTB = 0x00; // tüm çıkışlar Dp8-13 sıfır
  
  pinMode(CW, INPUT);
  pinMode(CCW, INPUT);

  digitalWrite(CW, 1); // pull up on giriş olarak ayarlanan pinden sinyal 
  digitalWrite(CCW,1); // pull up on gelmediğinde giriş high
 
  
}



void loop() {

  if (!digitalRead(CW)) forward(480, 0);
  if (!digitalRead(CCW)) reverse(480, 0);


} // döngüyü sonlandır


void reverse(int i, int j) {

  // Pin 8 Enable A Pin 13 Enable B on
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);

  j = j + 10;
  while (1)   {

    digitalWrite(black, 0);
    digitalWrite(brown, 1);
    digitalWrite(orange, 1);
    digitalWrite(yellow, 0);
    delay(j);  
    i--;
    if (i < 1) break;


    digitalWrite(black, 0);
    digitalWrite(brown, 1);
    digitalWrite(orange, 0);
    digitalWrite(yellow, 1);
    delay(j);
    i--;
    if (i < 1) break;


    digitalWrite(black, 1);
    digitalWrite(brown, 0);
    digitalWrite(orange, 0);
    digitalWrite(yellow, 1);
    delay(j);  
    i--;
    if (i < 1) break;

    digitalWrite(black, 1);
    digitalWrite(brown, 0);
    digitalWrite(orange, 1);
    digitalWrite(yellow, 0);
    delay(j);
    i--;
    if (i < 1) break;
  }

  // adım motora tüm çıkışlar 0
  digitalWrite(ENA, LOW);
  digitalWrite(ENB, LOW);

}  //ters dönme sonu()



void forward(int i, int j) {

  // Pin 8 Enable A Pin 13 Enable B on
  digitalWrite(ENA, HIGH);
  digitalWrite(ENB, HIGH);

  j = j + 10;
  while (1)   {

    digitalWrite(black, 1);
    digitalWrite(brown, 0);
    digitalWrite(orange, 1);
    digitalWrite(yellow, 0);
    delay(j);
    i--;
    if (i < 1) break; 



    digitalWrite(black, 1);
    digitalWrite(brown, 0);
    digitalWrite(orange, 0);
    digitalWrite(yellow, 1);
    delay(j);  
    i--;
    if (i < 1) break;

    digitalWrite(black, 0);
    digitalWrite(brown, 1);
    digitalWrite(orange, 0);
    digitalWrite(yellow, 1);
    delay(j);
    i--;
    if (i < 1) break;

    digitalWrite(black, 0);
    digitalWrite(brown, 1);
    digitalWrite(orange, 1);
    digitalWrite(yellow, 0);
    delay(j);  
    i--;
    if (i < 1) break;


  }

  // adım motora tüm çıkışlar 0
  digitalWrite(ENA, LOW);
  digitalWrite(ENB, LOW);

}  // ileri dönme sonu()

 

Kaynak: http://www.bristolwatch.com/L298N/L298N_arduino.htm

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz