Step Motor ve Delay Problemi?

Kodla Büyü

kaanrevan

Seçkin Üye
Seçkin Üye
Mesajlar
293
Arkadaşlar aşağıdaki gibi bir fonksiyonum var. Amacım şu aslında. Bu robot kolun ileri ya da geri hareketi için kullanılacak. Ancak bunun belirli bir süre içinde yapmasını istiyorum. Örneğin ileri 1 sn. geri 1 sn. gibi....
loop içerisindeki aşağıdaki gibi kullanmak istiyorum ancak motorlar kitleniyor. Nedeni sanırım step motorun ilgili fonksiyonunun içerisindeki delay(3) satırı. Bunu millis ile mi ayarlamam gerekiyor? Açıkcası timer kullanımına baktım ama biraz zorlandım bu kodları timer' a çevirirken. Bu durumu nasıl aşabilirim?

geri();
delay(1000);
ileri();
delay(1000);

Kod:
void geri()
{
 
   switch(step1) {
    case 0:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, LOW);
      break;
    case 1:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, HIGH);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, LOW);
      break;
    case 2:
      digitalWrite(Pin0, LOW);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, HIGH);
      digitalWrite(Pin3, HIGH);
      break;
    case 3:
      digitalWrite(Pin0, HIGH);
      digitalWrite(Pin1, LOW);
      digitalWrite(Pin2, LOW);
      digitalWrite(Pin3, HIGH);
      break;
  }
   step1++;
  if(step1>3) step1=0;
  if(step1<0) step1=3;
  delay(3);
}
 
Step motor adım motordur ve adım adım gider.
Pin0 High
Pin1 low
Pin2 low
Pin3 low olacak şekilde düzenleyin

Pin0 low
Pin1 high
Pin2 low
Pin3 low. Diğerlerini de kaydırarak yazin
 
Step motor adım motordur ve adım adım gider.
Pin0 High
Pin1 low
Pin2 low
Pin3 low olacak şekilde düzenleyin

Pin0 low
Pin1 high
Pin2 low
Pin3 low. Diğerlerini de kaydırarak yazin

Onu biliyorum hocam. Aslında bu kod, uln2003 motor sürücü ile step motoru tam tork ile sürmek için gerekli kod. Söylediğiniz şekilde ne yazık ki robot kol hareket etmiyor. Tam tork istiyor. Ancak bunu benim belli bir süre yapmam gerekiyor.
 
step motorlarda özelliğine göre bir tam tur 32 adım 64 adım gibi bi durum vardı. mesela 16 adım döndürdüğümde 90 derece dönüyordu. unutmuşum biraz :rolleyes:
 
Onu biliyorum hocam. Aslında bu kod, uln2003 motor sürücü ile step motoru tam tork ile sürmek için gerekli kod. Söylediğiniz şekilde ne yazık ki robot kol hareket etmiyor. Tam tork istiyor. Ancak bunu benim belli bir süre yapmam gerekiyor.


Besleme kaynaginiz nedir. Yeterli akımı sağlayabiliyor mu?
 
Sonradan yaptığım araştırmalarda problemin arduino 'nun saat frekansının yeterli gelmediğini öğrendim. Bizim gibi rastgele program yazan adamlar elbette bu durumları aşamıyor. Ancak accelstepper adında bir kütüphane ile çok daha iyi bir yazılım oluşturdum. Şimdilik sıkıntım kalmadı gibi birşey. Tek problem robot kolun tutucusundaki servo motor biraz işleri bozuyor. Onu da bir buton ile çözüme ulaştırmayı planlıyorum. Sonucu buradan paylaşırım.
 
@kaanrevan hocam bunu biliyorum demişsin ama yazdığın kodlarda 2 pin birden aktif edilmiş. örneğin case0 da pin0 ve pin1 aktif bunlarsan sadece biri aktif olacak. @cakin 54 ün yazdığı gibi yani.
Hocam bu motorlar sanırım unipolar. Ben tam torq ihtiyacım olduğunu düşündüğüm için bir kod aradım ve bunu buldum. Açıkcası çok fark ediyor. Step motoru çift pine high verdiğinizde tek high ile verdiğinizden daha kuvvetli hale getiriyor. Elimle gücü kontrol etmiştim. Sanırım bunun bir mekanik ve elektronik açıklaması vardır.
 
Geri
Üst