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/ (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.
.
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.
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)
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.
@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.
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.