- 12V Akku mit 280 Ah bauen         
Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 32

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

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

    Arduino soll Schrittmotor NEMA 17 ansteuern; Driver: DRV8825

    Anzeige

    Praxistest und DIY Projekte
    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 23:45 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von inka
    Registriert seit
    29.10.2006
    Ort
    nahe Dresden
    Alter
    77
    Beiträge
    2.180
    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
    56
    Beiträge
    2.814
    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 11:12 Uhr)

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2017
    Beiträge
    16
    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
    56
    Beiträge
    2.814
    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 Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    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 Begeisterter Techniker
    Registriert seit
    21.06.2011
    Ort
    Dresden
    Beiträge
    219
    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

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    25.07.2017
    Beiträge
    16
    Hallo,

    ok, ich flashe das obige Programm, lege DIR auf GND, trenne GND zwischen Modul und dem Arduino, dann lege ich also 12 Volt auf VMOT und messe auf den Spulen max 2.4 V oder?

    ...habe ich also gemacht. Der Motor brummt, bewegt sich aber nicht. An der einen Spule liegt 1.1 V und auf der Anderen 1.5 V an.

    Wo kann ich das erhöhen? sind 12 Volt zu wenig? irgendwie hört sich das brummen nicht "gesund" an.

    Woher habe ich mein letzten Quellen?
    ich bin auf Thomas Sturm gestoßen. Er hat auf seiner Seite noch ein paar Tipps veröffentlich --> http://sturm.selfhost.eu/wordpress/p...utomat-teil-3/

    Er hat die Grundschaltung etwas geändert und ein Code veröffentlicht:

    Code:
    /*
    Schrittmotor
    alle 200ms ein Schritt in eine Richtung.
    
    This example code is in the public domain.
    */
    
    void setup() { 
    // setzen der Digitalpins 1 und 2 als Ausgang.
    pinMode(5, OUTPUT);
    pinMode(2, OUTPUT); 
    }
    
    void loop() {
    digitalWrite(5, HIGH); // DIR an Pin D5
    digitalWrite(2, HIGH); // STEP an Pin D2
    delay(100); // warte eine zehntel Sekunde
    digitalWrite(2, LOW); // Gnd an Pin D2
    delay(100); // warte eine zehntel Sekunde
    }
    Auch hier ist das Resultat ernüchternd. Der Motor brummt, bewegt sich nicht. Das Multimeter zeigt 0,79 V und 0,5 V an.

    Vielleicht hat noch jemand eine Idee.

    Grüße
    Volker
    Geändert von VolkerPI (20.06.2018 um 19:48 Uhr)

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.04.2013
    Beiträge
    526
    Lass doch den Arduino erstmal weg. Den Stepper-Treiber (DIR und STEP) kannst du auch mit einem Schalter und einem Taster belegen, damit kannst du dann Einzelschritte fahren. Das erstmal testen, und wenn das schon nicht geht, kann es mit dem Arduino auch nicht gehen.

    Gibt es evtl. noch einen ENABLE-Pin, der angesteuert werden muss?

    Gibtst du das richtige Signal? Es gibt Treiber, die wollen als Signal ein "High" haben, andere ein "Low", wobei letzteres dann nicht einfach "Leer", sondern "GND", also gesteuert 0 V sein muss. Hier würde ich das Manual noch mal genau studieren. Was an den Pins tatsächlich ankommt, kannst du ja mit dem Multimeter messen. Du könntest im Programm ja erstmal eine ganz kleine Drehzahl einstellen (ein Schritt alle 5 Sekunden oder so), dann hast du Zeit, dir das in Ruhe anzugucken und mitzumessen.

    Es ist manchmal schlecht, nicht verwendete Eingänge unbeschaltet zu lassen, die haben dann kein definiertes Potential. Besser ist es, jeden definiert auf GND oder HIGH zu legen, im einfachsten Fall per Drahtbrücke oder einem Vorwiderstand. Es sei denn, es sind Pull-Up bzw Pull-Down-Widerstände auf dem Treiber verbaut (Datenblatt checken9.

    Viel Erfolg!
    Nils

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von i_make_it
    Registriert seit
    29.07.2008
    Ort
    Raum DA
    Alter
    56
    Beiträge
    2.814
    Zitat Zitat von VolkerPI Beitrag anzeigen
    dann lege ich also 12 Volt auf VMOT
    ......
    Der Motor brummt, bewegt sich nicht. Das Multimeter zeigt 0,79 V und 0,5 V an.
    Und nach was riecht der Motor?
    Und nach was riechen die Motortreiber?

    Watt gleich Volt mal Ampere.

    Wenn du 12V bereitstellst und nur 0,5V misst, dürfte ein um den Faktor 24 größer Strom fließen wie bei 12V vorgesehen (Kurzschlußstrom, bzw. nahe dran).

    Je nach Dauer die Motor und Treiber das mitgemacht haben, könnte bereis etwas kaputt sein.

    Vortielhaft wäre mal Strom und Spannung zu messen um festzustellen ob der Strom abgeregelt wird oder voll durchschlägt.

    Beim Arduino kann man mal schauen ob das Rechtecksignal rauskommt oder ob z.B. durch de nTreiber bereits eine Deformierung stattfindet.
    Also unbelastet (Leitung offen ein Rechtecksignal) und belastet (mit dem Motortreiber verbunden) eine niedrigere Spannung.
    die 0,1s dürften zu kurz sein um mit einem einfachen Multimeter was sinnvolles messen zu können.
    Pass mal die beiden Delays wie in meinem Code, auf 1 Sekunde an. Da kannst Du sehen welche Spannung im ON Zustand ansteht.

Seite 1 von 4 123 ... LetzteLetzte

Ähnliche Themen

  1. Arduino und Win 10 USB Driver
    Von oderlachs im Forum Arduino -Plattform
    Antworten: 2
    Letzter Beitrag: 04.07.2016, 07:54
  2. Antworten: 2
    Letzter Beitrag: 03.04.2016, 22:01
  3. Antworten: 2
    Letzter Beitrag: 12.01.2016, 15:01
  4. Antworten: 0
    Letzter Beitrag: 29.08.2015, 08:34
  5. Antworten: 9
    Letzter Beitrag: 20.02.2015, 19:59

Stichworte

Berechtigungen

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

12V Akku bauen