Arduino ve Microstep Sürücü
  • Merhaba, Step sürücüyle sürdüğüm step motoru sensörden gelen siyal ile kesik çalıştırmak istiyorum.
    Bir matkap ucuna "D" harfi şeklinde hız algılama sensörü arasından geçirmek için siyah bir parça yaptım. Ortasından deldim. Yarım balta şekilde dönüyor. Yani bir turda bir dolu (1), bir boş(0). Ben sensörden aldığım sinyali interrup ile direkt sürücünün EN+ ucuna göndererek sürücüyü boşa düşürüyorum. Böylece gördüğü kadar çalışıyor görmediği kadar çalışmıyor. Bu interrup çözümü üst devirlerde motorun çok küçük adım atmasına sebep oluyor. Böylece her sinyalde kararsız bir yapı oluşuyor hatta son devirde(3000d/dk) stepmotor resmen duruyor.
    Step motoru ayarlı ve belirli bir açı ile dönderebilmemiz mümkün mü? Mesela; sensörden gelen her bir pulse ile örneğin 20 derece dönsün veya 25 adım atsın şeklinde yapabilir miyiz? ilgilenenlere teşekkür ediyorum.

    Şema şu şekilde: https://s15.postimg.cc/5ugrxjwgr/asw.jpg

    İnterrup Kodu:

    const int buttonPin = 2;
    const int pwm = 3;
    const int dirPin = 4;
    constint buttonState = 0;
    const int fre = 5;

    void setup() {
    pinMode(pwm,OUTPUT);
    pinMode(fre,OUTPUT);
    pinMode(buttonPin, INPUT);

    pinMode(dirPin,OUTPUT);
    digitalWrite(dirPin,HIGH);
    }
    void loop() {
    buttonState = digitalRead(buttonPin);
    if (buttonState == HIGH) {
    digitalWrite(fre, HIGH);
    }
    else {
    digitalWrite(fre, LOW);
    digitalWrite(pwm, HIGH);
    delayMicroseconds(100);
    digitalWrite(pwm, LOW);
    delayMicroseconds(1000 - 100);
    }
    }
  • Potansiyometre ile hız ayarlı kod;

    const int stepPin = 9;
    const int dirPin = 8;
    const int buttonPin = 2;
    const int sens = 10;
    int buttonState = 0;
    int customDelay,customDelayMapped;

    void setup() {
    pinMode(sens, OUTPUT);
    pinMode(buttonPin, INPUT);
    pinMode(stepPin,OUTPUT);
    pinMode(dirPin,OUTPUT);

    digitalWrite(dirPin,HIGH);
    }
    void loop() {
    buttonState = digitalRead(buttonPin);
    if (buttonState == LOW) {
    digitalWrite(sens, HIGH);


    customDelayMapped = speedUp();
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(customDelayMapped);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(customDelayMapped);
    }
    else {
    digitalWrite(sens, LOW);
    }
    }

    int speedUp() {
    int customDelay = analogRead(A0);
    int newCustom = map(customDelay, 0, 1023, 1,1023);
    return newCustom;
    }
  • step motoru belirli bir hızdan yukarı döndüremezsiniz sinyal darbeleri çok hızlı olunca adımı tamamlamadan yeni sinyal geldiği için adımlar yarım veya kararsız olur

    istediğin kadar adım döndürmek için motor kodlarını for döngüsü içine al bu sayede belirlediğin kadar adım atar, fakat adımları atarken sensörü de eş zamanlı okuyamaz başka yöntemler de bulmak gerekir

    int adimsayisi = 25;
    for(int x = 0; x < adimsayisi; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(customDelayMapped);
    digitalWrite(stepPin, LOW);
    delayMicroseconds(customDelayMapped);
    }
  • Cevap için teşekkür ederim. Önerinizi deneyeceğim...
  • eş zamanlı adım atması gerekiyorsa şöyle bir yol deneyebilirsin. her pulse da değilde, 10 pulse da bir adım at yapabilirsin. 10 dedim ama bu temsili bir rakam.

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook

Tagged

Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.