step motor etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
step motor etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

30 Ocak 2017 Pazartesi

ARDUINO UNO VE L298 İLE STEP MOTOR SÜRME

Bildiğiniz gibi bipolar step motorlarda 4 adet kablo bulunmaktadır. Genellikle bu kablo renkleri sabit olmakla birlikte eğer farklı renklerde kabloları olan bir step motora sahipseniz motor datasheetinden fazlara karşılık gelen kablo renklerini bulmanız mümkün. Bizim kullandığımız step motor 1.8 derece adım açısına sahip 12V ve anma akımı 330 mA olan bir servo motor...

Şimdi bağlantıları nasıl yapacağımıza bakalım:

Kablo Rengi
Kablo Harf Karşılığı
Motor Sürücü Pini
Kırmızı
A
OUT1
Yeşil
C
OUT2
Sarı
B
OUT3
Mavi
D
OUT4

Tablodaki şekilde motor kablolarını DC motor sürücümüzün çıkışlarına bağladıktan sonra, motor için gerekli beslemeyi de harici olarak pil ya da benzeri bir kaynaktan alabilirsiniz. Burada dikkat etmeniz gereken motor beslemesini Arduino'dan almamanız aksi takdirde kartınızı yakabilirsiniz.

Bağlantıları yaptıktan sonra aşağıdaki programı yükleyerek motorunuzun dönüşünü izleyebilirsiniz.

#include <Stepper.h>
#define STEPS 200  // motor 1.8 derece oldugundan 360/1.8
Stepper stepper(STEPS, 12, 13);  // yon pinleri dc motor surucude 12 ve 13. pinler
void setup() {
  // motor surucu pwm pinleri enable olarak kullanilacak
  pinMode(3,OUTPUT);
  pinMode(11,OUTPUT);
  stepper.setSpeed(30);
  digitalWrite(3,HIGH);
  digitalWrite(11,HIGH);
}

void loop() {
  // motor 200 adim ileri (1 tur)
  stepper.step(200);
  delay(1000);
  // motor 200 adim geri (1 tur)
  stepper.step(-200);
  delay(1000);
}

Kodda görüldüğü gibi Arduino Step motor kütüphanesini kullandık, kullandığımız motor sürücü de L298'in input pinleri 2 adet dijital pin ile kontrol edildiğinden Stepper stepper(STEPS,12,13); şeklinde sadece iki adet yön pini kullandık.

Anma gerilimi 5V dan düşük olan motorlarınız için başka step motor sürücüleri kullanmanızı öneririm. L298 lojik besleme gerilimden daha yüksek bir motor besleme gerilimi ile çalıştığından bu tip durumlarda size sıkıntı çıkartabilir.

ARDUINO UNO VE A4983 İLE STEP MOTOR KONTROLÜ

Bu projemizde 12V 330mA'lik bir bipolar step motoru A4983 step motor sürücü kullanarak kontrol edeceğiz. Kontrol ederken motor yönü için iki adet buton kullanacağız. Kısaca sistemin yapacağı butona basılı tutuldukça motoru döndürmek olacak. Diğer butona basıldığında da motor diğer yöne dönecek. Basit şekilde A4983 bağlantılarına bakacak olursak,


VMOT ve GND pinleri motor besleme pinleridir. Bizim motorumuz 12V olduğu için besleme olarak 12V kullanacağız. Motor çıkışları 1A,1B,2A,2B şeklinde gösterilmiş. Aşağıdaki şekil ile karşılaştıracak olursa ;
1A --> Faz A Kırmızı Kablo
1B --> Faz C Yeşil Kablo
2A --> Faz B Sarı Kablo
2B --> Faz D Mavi Kabloya bağlanacak.

Motor kablolarının altındaki GND pini de Arduino GND pinine bağlamamız gerekiyor. Bu şekilde Arduino, Motor Sürücü ve Besleme Kaynağı arasındaki GND birleştirmesi oluşmuş olacak. Bu motor sürücü üzerinde regülatör olduğundan A4983 ve Arduino için gerekli olan 5V beslemeyi motor sürücüden alabiliriz. Bununu için aşağıdaki resimde bulunan 5V besleme jumper'ını kısa devre etmemiz gerekiyor.


Şekildeki gibi kartın sol üst köşesindeki GND ve 5V pinlerini Arduino'nun 5V ve GND pinlerine bağlayarak Arduino için gerekli beslemeyi de sağlamış olduk. Enable pinini Arduino UNO'nun dijital 4. pinine, STEP pinini dijital 3. pine, DIR pinini de dijital 2. pine bağladıktan sonra motorumuzu sürmek için gerekli bağlantıları tamamlamış olduk. Micro step adımlama kullanmak isteyenler bu pinleri de dijital pinlere bağlamalılar. Motor kontrol için kullanacağımız iki adet butonu da Arduino UNO'nun dijital 7 ve 8. pinlerine bağlayarak bağlantılarımızı bitirmiş olduk.


Arduino Kodu : 

int yon = 2;  // DIR
int ste = 3; // STEP
int en = 4; // ENABLE
int button_up = 7; // BUTTON 1
int button_down = 8; // BUTTON 2

void setup(){
  pinMode(en,OUTPUT);
  pinMode(yon,OUTPUT);
  pinMode(ste,OUTPUT);
  pinMode(button_up,INPUT);
  pinMode(button_down,INPUT);
  digitalWrite(en,LOW); // ENABLE PINI LOW AKTIF
}

void loop(){
  // BUTTON 1 E BASILI TUTULDUGU SURECE ILERI DOGRU DON
  if(digitalRead(button_up) == HIGH){
    delay(50);
    if(digitalRead(button_up) == HIGH){
      digitalWrite(yon,HIGH);  // YON ILERI
      while(digitalRead(button_up) == HIGH){
        digitalWrite(ste,HIGH);
        delayMicroseconds(1000);  // BU DEGERLER DEGISTIRILEREK MOTOR HIZI AYARLANABILIR
        digitalWrite(ste,LOW);
        delayMicroseconds(1000);  // BU DEGERLER DEGISTIRILEREK MOTOR HIZI AYARLANABILIR
      } 
    }
  }
  // BUTTON 2 YE BASILI TUTULDUGU SURECE GERI DOGRU DON
  if(digitalRead(button_down) == HIGH){
    delay(50);
    if(digitalRead(button_down) == HIGH){
      digitalWrite(yon,LOW);  // YON GERI
      while(digitalRead(button_down) == HIGH){
        digitalWrite(ste,HIGH);
        delayMicroseconds(1000);  // BU DEGERLER DEGISTIRILEREK MOTOR HIZI AYARLANABILIR
        digitalWrite(ste,LOW);
        delayMicroseconds(1000);  // BU DEGERLER DEGISTIRILEREK MOTOR HIZI AYARLANABILIR
      }
    }
  }
}