-         
Ergebnis 1 bis 7 von 7

Thema: Arduino soll Schrittmotor NEMA 17 ansteuern; Driver: DRV8825

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2017
    Beiträge
    5

    Arduino soll Schrittmotor NEMA 17 ansteuern; Driver: DRV8825

    Anzeige

    Hallo,

    ich möchte gerne mit einem Arduino NANO, einem NEMA 17 (Busheng 17HD40005 22-B) Motor und einer Driver-Karte DRV8825 einen Fenster öffner bauen.

    Ich habe das vor:

    der Setpper soll eine Gewindestange antreiben. An dieser ist ein Hebelmechanismus montiert. Der Setpper wird über ein DRV8825-Modul angesteuert. Der Strom für den Stepper kommt derzeit von einem Labor-Netzteil (12V). Ein Arduino soll die Steuerung übernehmen. Ãœber 2 Tasten (Auf und Zu) soll der Motor so lange laufen, bis die gewünschte Position erreicht ist. So die Beschreibung in Kurzform.

    Software:
    Ich habe erst mal ein Code "aufgespielt", der nur mal den Motor bewegt, damit ich sehen kann, ob der Stepper mal grundsätzlich funktioniert.


    Problem:
    Sobald ich Strom drauf gebe, brummt der Motor, bewegt sich aber nicht von der Stelle.


    Lösungsversuch:
    ich habe schon die PIN-Belegung des Steppers geprüft. Auf der Unterseite des Treibers sind noch mal die Belegungen zu sehen. Ich versicherte mich mittels Multimeters, dass die PINs richtig sind A 1/2 gehört zur einen "Motor-Spule" und B 1/2 gehört zur Anderen. Ich habe das auch über die Herstellerseite des Steppers verifiziert. Mittels Poti auf der Treiber-Platine stellte ich einen Wert von 0,720 v ein. Das ist der Wert, an dem sich der Motor nicht so quält. Ich denke, dass 12 Volt am Motor auch richtig ist. Ich habe alles noch mal geprüft und sogar den Code ausgetauscht.

    Ich habe auch schon einen anderen Stepper und Treiber verwendet. Hier ist das gleiche Resultat zu sehen....

    Was kann das nur sein? Im Internet habe ich nicht viel darüber gefunden. Es gibt wohl dieses Problem, doch eine Lösung konnte ich noch nicht finden.

    Hier der simple Code:
    Code:
    int steps=2;
    int dir =3;
    int stepTime=100;
    
    
    
    void setup() {
      
      pinMode(steps, OUTPUT);
      pinMode(dir, OUTPUT);
    }
    
    
    void loop() {
      digitalWrite(dir, HIGH);
      digitalWrite(steps, HIGH);   
      delay(stepTime);                      
      digitalWrite(steps, LOW);    
      delay(stepTime);                       
    }
    Die Verkabelung und einige Bilder habe ich in einer PDF zusammengefasst.

    Vielleicht hilft das schon mal für die ersten Ideen.

    Vielen Dank noch mal für die Hilfe.
    Angehängte Dateien Angehängte Dateien
    Geändert von VolkerPI (13.06.2018 um 22:45 Uhr)

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    70
    Beiträge
    1.379
    das sieht danach aus, das der Stepper der vorgegeben schrittfolge nicht nachkommen kann? Nur eine vermutung...

    "Well, I think you should leave the delays in your code, to make sure the A4988 recognizes the step pulses. To be on the safe side, I'd put at least a 10 microsecond delay betweeen the step pin state changes. Actually, a long delay at the end of the loop (say half a second or so) will allow you to see each step the motor takes (just like in your previous setup)."
    gruß inka

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.809
    Das sieht nach der Minimalverkabelung von der Pololu Seite aus.
    https://www.pololu.com/product/2133

    Will man auf Nummer Sicher gehen, kann man RESET; SLEEP; FAULT und ENABLE (alle Low schaltenden Eingänge die mit einem Strich über dem Text markiert sind) mit der Logikspannug versorgen.

    Die Chinesen schreiben Nennspannung 2,4V. 12V wäre da der auf Dauer tödlich für den Motor.
    https://detail.1688.com/offer/42108925825.html
    Auf der Webseite die Zeichen links von 2.4 (V) einfach mal in den Google Translator kopieren, da kommt dann "Nennspannung" raus.

    Die Motorspule interessiert am Ende die Leistung als Produkt aus Spannung und Strom.
    Wenn der Motor läuft, kann man schauen wie es mit einer Spannungsanhebung und der Erwärmung aussieht.
    Zum Anfang sollte man erst mal mit den Herstellervorgaben beginnen und sich rantasten.
    Geändert von i_make_it (14.06.2018 um 10:12 Uhr)

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2017
    Beiträge
    5
    Hallo,

    das mit den Herstellerangaben hat auch nicht funktioniert. Der Stepper macht kein mucks. Das ist richtig, ich habe die Minimal-Ausstattung benutzt

    Ein zweiter Stepper verhält sich ähnlich. Das Teil bleibt einfach stehen. Ich habe diesen benutzt: 17HS4401, der sollte eigentlich 12 Volt supporten.

    Diesen hatte ich bestellt:
    https://www.amazon.de/gp/product/B07...?ie=UTF8&psc=1

    Ich habe mal diesen Code eingespielt:

    Code:
    // testing a Stepper motor
    // on an Uno the onboard led will flash with each step
    // this version uses delay() to manage timing
    
    byte directionPin = 3;
    byte stepPin = 2;
    int numberOfSteps = 100;
    byte ledPin = 13;
    int pulseWidthMicros = 20;  // microseconds
    int millisbetweenSteps = 250; // milliseconds - or try 1000 for slower steps
    
    
    void setup() { 
    
      Serial.begin(9600);
      Serial.println("Starting StepperTest");
      digitalWrite(ledPin, LOW);
      
      delay(2000);
    
      pinMode(directionPin, OUTPUT);
      pinMode(stepPin, OUTPUT);
      pinMode(ledPin, OUTPUT);
      
     
      digitalWrite(directionPin, HIGH);
      for(int n = 0; n < numberOfSteps; n++) {
        digitalWrite(stepPin, HIGH);
        delayMicroseconds(pulseWidthMicros); // this line is probably unnecessary
        digitalWrite(stepPin, LOW);
        
        delay(millisbetweenSteps);
        
        digitalWrite(ledPin, !digitalRead(ledPin));
      }
      
      delay(3000);
      
    
      digitalWrite(directionPin, LOW);
      for(int n = 0; n < numberOfSteps; n++) {
        digitalWrite(stepPin, HIGH);
        // delayMicroseconds(pulseWidthMicros); // probably not needed
        digitalWrite(stepPin, LOW);
        
        delay(millisbetweenSteps);
        
        digitalWrite(ledPin, !digitalRead(ledPin));
      }
    }
    
    void loop() { 
    }
    Hier ist der Code her: http://forum.arduino.cc/index.php?topic=277692.0

    Ich bin ein wenig ratlos...

    grüße
    Volker

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    49
    Beiträge
    2.809
    Was für Meßmittel stehen Dir denn zur Verfügung?

    Hast Du zwei Multimeter?
    Damit Du mal an beiden Motorspulen die Spannung messen kannst?

    Dann einfach mal DIR auf GND legen und ein Programm, das nur Pin 2 mit einem Delay im Sekunden Takt toggled.

    Code:
    byte stepPin = 2;
    
    void setup() {
      pinMode(stepPin, OUTPUT);
    }
    
    void loop() { 
    digitalWrite(stepPin, LOW);
      delay(1000);
    digitalWrite(stepPin, HIGH);
      delay(1000);
    }
    Wenn das dazu Führt, das der Stepper jede Sekunde einen Schritt macht, dann mal die beiden Delays verkleinern (beide sollen den gleichen Wert haben).
    Z.B.: 500, dann 200, 100, 50, 30, 20, 10, 5.
    Dabei ggf. auf dem Treiber das Poti für den Strom nachstellen.

    Wenn das klappt, ist der Code die Ursache.

    Wenn es nicht klappt mal mit dem delay(1000) die Spannung an beiden Spulen messen. die sollte sich ja ändern. (Achtung: Bipolar Motor = AC).
    Dabei mit Spannung und Strom Arbeiten damit man in den Wertebereich für den Motor kommt.

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    30
    Beiträge
    4.674
    Die Spannung die du an den Treiber anschließt kann und sollte auch höher sein als die Nennspannung des Motors. Die Spannung sollte so hoch als möglich sein (im Bereich des erlaubeten => Datenblatt lesen).
    Die Motortreiber regeln den Strom (den man richtig einstellen muss), somit hast du ein gleichmäßiges Drehmoment über einen weiten Drehzahlbereich (ansonsten würde das Drehmoment mit höherer Drehzahl abnehmen).

    Das Problem sind vermutlich Schrittverluste (hat inka schon geschrieben). Du darfst nicht direkt eine hohe Frequenz vorgeben, sondern musst in einer Rampe hochfahren. Außerdem muss der Motorstrom richtig eingestellt sein.

    MfG Hannes

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    177
    Hi,
    womit betreibst Du den Arduino? Kann es sein, dass der einsetzende Motorstrom auf die Arduino-Betriebspannung rückwirkt?
    Evtl. falsche Masselegung? Der Motorstrom sollte nicht über die GND-Verbindung zwischen DRV8825 und Arduino fliessen.
    mfg
    Achim

Ähnliche Themen

  1. Arduino und Win 10 USB Driver
    Von oderlachs im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 04.07.2016, 06:54
  2. Antworten: 2
    Letzter Beitrag: 03.04.2016, 21:01
  3. [ERLEDIGT] Arduino Uno und GRBL Nema 17 Schrittmotor ansteuern
    Von Sigma1990 im Forum Motoren
    Antworten: 2
    Letzter Beitrag: 12.01.2016, 14:01
  4. Antworten: 0
    Letzter Beitrag: 29.08.2015, 07:34
  5. Antworten: 9
    Letzter Beitrag: 20.02.2015, 18:59

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •