STEP Motor Sürücü Kontrolü

Başlatan SB7, 17 Eylül 2024, 16:04:53

SB7

Selamlar,

STEP Motorlar için TB6600-DM556 gibi sürücüleri kullanmak istiyorum. Malesef veri sayfaları çok özensiz hazırlanmış.

Aşağıdaki sitede basit bir örnek buldum.

https://mytectutor.com/tb6600-stepper-motor-driver-with-arduino/

const int stepPin = 5; 
const int dirPin = 2; 
const int enPin = 8;

void setup() {
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
  pinMode(enPin,OUTPUT);
  digitalWrite(enPin,LOW);
  
}

void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  for(int x = 0; x < 800; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  digitalWrite(dirPin,LOW); //Changes the direction of rotation
  for(int x = 0; x < 800; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000); 
}

Anladığım kadarıyla yön seçilip döngüye yazılan sayı kadar pulse verilerek hareket sağlanıyor. Ancak anlamadığım kısım motorun hızının ayarlanması.

Yukarıdaki örnekte pulse genişlik süreleri 500us ayarlanmış. Bunun kaç d/dk olduğunu hesaplamak için bir yöntem var mıdır?

İlave olarak veri sayfasında microstep çözünürlük değerlerleri: 400,800,1600,3200,6400,12800... bu değer seçilirken neye dikkat edilmesi
gerekiyor?

Yardımcı olursanız sevinirim. Teşekkürler.
-SB7

Mr.Thinking

#1
.
ego=1/Knowledge

MCansız

#2
merhaba
https://www.pjrc.com/teensy/td_libs_AccelStepper.html burada kullanılan accel stepper kütüphanesini kullanabilirsiniz.

microstep, sizin motora uygulayacagınız tam turda gönderilecek step sayısıdır.

TB6600 micro step 6400 seçilmiş ise motor 6400 pulse gönderilirse motor tam tur atar. bu sizin motoru minim açıda döndermek için kullanılıyor.

örnek olarak

motor atım açısı 1.8 derece olursa hesabımız

sürücü motor kullanmadığımzı düşünelim
360 / (motor açısı ) = 360 / 1.8 = 200 yapar yani motora 200 adet pulse verirsem motor 360 derece döner.

şayet motor daha küçük adımlarla döndürülmek isteniyorsa mikro step kullanılarak adım derecesi düşürülebilinir.

örnek olarak 6400 mikro step seçilirse

360 / (1.8 / 32(mikrostep sürücüsü seçim arayüz)) = 6400 pulse yapar. motora 6400 pulse verirsem motor 360 derece döner.

kütüphanede

stepper.setMaxSpeed(6400); ile motorun saniyece kaç pulse verileceği yani max hız belirlenir. 6400 verilerek motor saniyede 360 derece atar.

stepper.moveTo(12800); komutu ile motor 720 derece döndürülür.
stepper.runSpeedToPosition(); motorun döndüren fonksiyon

ayrıca bu kütüphane loop döngüsünde gecikme yapılmamalıdır. (delay vs)
kütüphane örneklerini inceleyiniz.

SB7

Cevap için çok teşekkür ederim @MCansız hocam,

Şu kısım biraz karıştı bende:

Alıntı yapılan: MCansız - 17 Eylül 2024, 16:36:33360 / (1.8 / 32(mikrostep sürücüsü seçim arayüz)) = 6400 pulse yapar. motora 6400 pulse verirsem motor 360 derece döner.

kütüphanede

stepper.setMaxSpeed(6400); ile motorun saniyece kaç pulse verileceği yani max hız belirlenir. 6400 verilerek motor saniyede 360 tur atar.



6400 pulse verilirse 1 tur yani 360 derece döneceğini yazmışsınız. Sonra da 1sn içinde 6400 pulse verilirse saniyede 360 tur atacağını yazmışsınız. Bu kısmı açıklayabilir misiniz?

Elimdeki sürücü donanımsal olarak 1600 mikrostep için ayarlanmış. O halde 32 yerine mikrostep değeri 8. (Sizin hesabınızdan yola çıkarak 360/(1,8/8)=1600 oluyor.)
 
stepper.setMaxSpeed(1600); yazdığımı varsayalım motor 1 sn de kaç tur atacak? (Motor mekanik bir sisteme bağlı sökemiyorum deneme şansım olsa uğraştırmazdım hocam, anlayışınız için teşekkürler)
-SB7

MCansız

Alıntı yapılan: SB7 - 17 Eylül 2024, 20:18:58Cevap için çok teşekkür ederim @MCansız hocam,

Şu kısım biraz karıştı bende:

1sn içinde 6400 pulse verilirse saniyede 360 tur atacağını yazmışsınız.



Evet burada tur yerine derece olacak yani 6400 girildiğinde 1sn 360 derece döner yani 1 tam tur atar. Bu şekilde düzeltelim.

Alıntı yapılan: SB7 - 17 Eylül 2024, 20:18:58O halde 32 yerine mikrostep değeri 8. (Sizin hesabınızdan yola çıkarak 360/(1,8/8)=1600 oluyor.)
 
stepper.setMaxSpeed(1600); yazdığımı varsayalım motor 1 sn de kaç tur atacak? (Motor mekanik bir sisteme bağlı sökemiyorum deneme şansım olsa uğraştırmazdım hocam, anlayışınız için teşekkürler)

sorunuza gelecek olursak mikro step 8 olarak seçersek hesabınız doğrudur. stepper.setMaxSpeed(1600) ile  Motor 1 sn 1 tur atar.

sizin için söyle bir simülasyon hazırladım.

motorun 1 saniyede tam tur dönecek şekilde sürekli dönsün yani bu motor 60RPM de döner.
https://wokwi.com/projects/409349648215525377

bu linkte motor 1 saniyede tam tur atıp dursun
https://wokwi.com/projects/409349919409886209

bu linklerde kütüphaneyi test edebilirsiniz. Ayrıca diagram.jyson sekmesinden "gearRatio": "8:1" ile mikro step ayarının 8 olarak girdiğine dikkat edin bu ayarı değiştirebilirsiniz.



SB7

@MCansız  hocam çok teşekkür ederim simülasyona kadar yapmışsınız, sağ olun çok yardımcı oldunuz. Böyle bir platformdan da haberdar değildim çok işime yarayacak.
-SB7

MCansız

Alıntı yapılan: SB7 - 18 Eylül 2024, 13:02:34@MCansız  hocam çok teşekkür ederim simülasyona kadar yapmışsınız, sağ olun çok yardımcı oldunuz. Böyle bir platformdan da haberdar değildim çok işime yarayacak.

Rica ederim.
Sonuçta picproje öğretir uygulatır ciddi derecede bağımlılık yapar.