A4988 Çift yön

erdemtr55

Aktif Üye
Katılım
3 Mart 2025
Mesajlar
190
Kolay gelsin herkese,
A4988 için genişletilmiş kart yaptım.STEP pin doğru çalışıyor, ama arduino Dır pinin high yapamıyor.Arduino üzerinden 5v bağladığım ters yöne dönüş yapıyor. Gnd çektiğimde normal dönüyor.Fakat yazılım üzerinden bir saat yönü bir tersini döndüremiyorum.

C++:
#define dirPin 3
#define stepPin 4
#define stepsPerRevolution 3200

void setup() {
    // Declare pins as output:
    pinMode(stepPin, OUTPUT);
    pinMode(dirPin, OUTPUT);
}

void loop() {
    digitalWrite(dirPin,0);

    for (int i = 0; i < stepsPerRevolution; i++) {
        // These four lines result in 1 step:
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(50);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(50);
    }

    delay(1000);

    digitalWrite(dirPin, 1);

    for (int i = 0; i < stepsPerRevolution; i++) {
        // These four lines result in 1 step:
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(50);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(50);
    }

    delay(1000);
}


1760190198406.png
 
seçtiğin donanımda kullandığın pin output olabiliyor mu ? bazı pinler sadece input ya da open collector olabilir.
 
bunun tek bir açıklaması var DIR pini fazla akım çekiyor. bu pine giden akımı araya bir multimetre bağlayarak ölçebilirsin. normalde GND veya VCC mikroamper seviyesinde akım çekmesi gerekir. fazla akım çekiyor ise elindeki kartta bir arıza olabilir. A4988 yüksek voltaj veya pinlerden birine yanlış voltaj gidince çok kolay arızalanıyor.
 
bunun tek bir açıklaması var DIR pini fazla akım çekiyor. bu pine giden akımı araya bir multimetre bağlayarak ölçebilirsin. normalde GND veya VCC mikroamper seviyesinde akım çekmesi gerekir. fazla akım çekiyor ise elindeki kartta bir arıza olabilir. A4988 yüksek voltaj veya pinlerden birine yanlış voltaj gidince çok kolay arızalanıyor.
dediğin doğru, ilk bağladığımda yanlış yaptık
 
bu tip entegrelerin lojik girişlerinde statik elektriğe karşı vcc ve gnd'ye giden diyotlar bulunur yanlış bir bağlantıda ilk olarak bu diyotlar hasar alır. bazen tamamen kısa devre olur bazen de böyle yüksek sızıntı akımına sebep olur. muhtemelen o entegre çalışırken de aşırı ısınacaktır.
 
Bu konuda yaptığım bazı denemelerde karşılaştığım problemleri çözmek için kullandığım yöntemleri paylaşmak istedim.
1- Arduino ve motoru aynı güç kaynağından Vin pini ile besliyorsanız , ( Örnek : 12V güç kaynağı ) Arduninoyu ana güç hattından ayırmak için araya bir voltaj regülatörü ekleyip onun çıkışını arduinoya verin. Yada Vin pini girişine hızlı bir diyot ekleyerek te yapabilirsiniz. Bu yöntem sayesinde motor güç kısmı arduinodan akım çekemez, Bir nevi devreyi diyot ileri yönüne göre ayarlamış olursunuz. Bu konu çok önemli ve mutlaka yapılmalıdır. Aksi durumda USB ile bilgisayara bağlı Arduno Bilgisayarın USB portuna dahil zarar verebilir.
2- Arduino bir pini Logic HIGH veya LOW yapabilmek için belirli bir süre geçmesi gerekiyor. Örneğin 2 us ( Buna kullandığınız MCU ya uygun datasheet dosyalarından bakılması gerekiyor.
Aynı şey A4988 içinde geçerlidir. Aşağıdaki tablo tamda bunu söylüyor.

https://cdn.sparkfun.com/datasheets/Robotics/A4988-Datasheet.pdf
A4988_2.jpg

C++:
#define dirPin 3
#define stepPin 4
#define stepsPerRevolution 3200

void setup() {
    // Declare pins as output:
    pinMode(stepPin, OUTPUT);
    pinMode(dirPin, OUTPUT);
}

void loop() {
    digitalWrite(dirPin,0);
    //Bu tür noktalara bir miktar bekleme eklemek faydalıdır
    delayMicroseconds(16);

    for (int i = 0; i < stepsPerRevolution; i++) {
        // These four lines result in 1 step:
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(50);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(50);
    }

    delay(1000);

    digitalWrite(dirPin, 1);
    //Bu tür noktalara bir miktar bekleme eklemek faydalıdır
    delayMicroseconds(16);
  

    for (int i = 0; i < stepsPerRevolution; i++) {
        // These four lines result in 1 step:
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(50);
        digitalWrite(stepPin, LOW);
        delayMicroseconds(50);
    }

    delay(1000);
}



3- Başka bir problem pinlerde oluşan dalgalanmalar. Bunu çözmek içinde ilgili pine Vcc +5V 'den gelen 10k direnç ekleyerek ,yani PULL UP yapılarak pin durumunu stabil hale getirilebiliyor. Bunu yapmadan önce datasheet dosyasını iyice okumanız faydalı olacaktır.

4- Enable pini mutlaka +5V --> 10K ile PULL UP yapılmalı.

5- MS1 - MS2 - MS3 bu pinlerin durumları kontrol edilmelidir. Devre yüksek gürültü oluşturuyorsa bunları boş bırakmak pek iyi sonuçlar vermeyebilir.

Ben bu yöntemleri kullanarak problemsiz bir şekilde step motor kullanabildim.
Umarım sizlerin de işine yarar.
 

Forum istatistikleri

Konular
8,400
Mesajlar
137,945
Üyeler
3,322
Son üye
asmukami

Son kaynaklar

Son profil mesajları

mechanic ayhanarican mechanic wrote on ayhanarican's profile.
https://www.allmystery.de almanca biliyorsan burada araştır. Yapay zekada çeviriyor gerçi.
Almanların matematik bilgisi daha iyi oluyor.
“Kendi yolunu çizen kişi, kimsenin izinden gitmez.” – Nietzsche
Kim İslâm’da güzel bir çığır açarsa (güzel bir alışkanlık başlatırsa), onun sevabı ve kendisinden sonra ona uyanların sevapları, onların sevaplarından hiçbir şey eksilmeksizin ona da yazılır.
erdemtr55 taydin erdemtr55 wrote on taydin's profile.
Merhaba Taydin bey,
Gruba spms serisi yapıcak mısınız?
ben 3 sargılı toroid ile 2 adet flyback sürücek bir devre yapmayı düşünüyorum.size soracak sorularım vardı?
Mutluluğun resmi illa güzel çizilmiş tablo olmak zorunda değil.Bazen basit bir çizgi,doğru bir renk,yada küçük bir detay
Back
Top