Zum Inhalt springen

Mega2560 an DRV8825 und Schrittmotor

Projekte und Tutorials für Arduino Foren StartHardware-Forum Mega2560 an DRV8825 und Schrittmotor

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 18)
  • Autor
    Beiträge
  • #8568 Antworten
    Clemens
    Gast

    Hallo Arduinobastler,
    ich habe ein Problem, trotz großer Sorgfalt und akribischer Recherchen bekomme ich meinen Schrittmotor mit dem Mega2590 und dem DRV8825 nicht zum Laufen. Der DRV8825 ist sorgfältig eingestellt, der Kühlkörper wird noch mittels Lüfter gekühlt, die Einstellungen auf der IDE sind sorgfältig und Fehlerfrei. Wer hat einen Tip? Auch helfen eingebundene Bibliotheken, wie <Stepper.h> nicht. Mit dem Arduino UNO und diversen MotorShields gibts keine Probleme. Wer kann mir hier ein fröhliches Weihnachten machen?
    Ich danke – allen gesunde und frohe Tage
    Clemens.

    #8569 Antworten
    Franz-Peter
    Gast

    Dann zeige mal deinen Sketch und wie Du das am UNO bzw am Mega angeschlossen hast. Ohne diese Info kann man nicht helfen.

    #8572 Antworten
    Clemens
    Gast

    // OriginalCode der o.g.Internetseite
    const int DirPin = 4; // this pin defines direction CW or CCW
    const int StepPin = 5; // pulse this pin to move one step
    const int SPR = 200; // Steps per revolution

    void setup()
    {
    // Make pins as Outputs
    pinMode(StepPin, OUTPUT);
    pinMode(DirPin, OUTPUT);
    }
    void loop()
    {
    // First let us rotate shaft clockwise
    digitalWrite(DirPin, HIGH); // defines the direction to clockwise

    // Pulse the step pin
    for(int x = 0; x < SPR; x++)
    {
    digitalWrite(StepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(StepPin, LOW);
    delayMicroseconds(1000);
    }
    delay(1000); // Short delay of one second

    // Now rotate shaft counterclockwise
    digitalWrite(DirPin, LOW);

    // Again pulse the step pin
    for(int x = 0; x < SPR; x++)
    {
    digitalWrite(StepPin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(StepPin, LOW);
    delayMicroseconds(1000);
    }
    delay(1000); // Short delay of one second
    }

    Ich schicke den Vorgang gebündelt an euere E-MailAdresse: hallo@starthardware.org
    Danke für Eure Bemühungen.

    #8573 Antworten
    Clemens
    Gast

    Ich sehe gerade die bekannte E-MailAdresse hallo@starthardware.org ist bestimmt nicht die, wo du meine Information errreichen kannst. Aber ich versuche es, HomeOffice hat vielleicht längere Arme, wie ich denke.

    Danke Clemens.

    #8575 Antworten
    Stefan Hermann
    Administrator

    Hi Clemens,

    ich hab deine Daten bekommen, kann da aber leider nicht weiterhelfen. Vielleicht hat Franz-Peter eine Idee. Er ist aber nicht über diese Email erreichbar. Was für einen Stepper-Motor verwendest du und welche Daten hat das externe Netzteil?

    Liebe Grüße

    Stefan

    #8577 Antworten
    Clemens
    Gast

    Hallo Stefan und Franz-Peter,
    Danke für Eure fachliche Anteilnahme an meinem Arduino Problem. Ich habe heute verschiedenste Arduinocods (AccelStepper, Stepper und ohne Bibliotheken) probiert, diesen auf den MEGA 2560 aufgespielt und probiert. Der Schrittmotor macht keinen Zuck, Led’s kann ich durch die 54 zur Verfügung stehende PINS ansprechen und schalten. Ich habe jetzt eine LED an den Richtungs- und Taktausgang des MEGA2560 angeschlossen. Diese gehen zwar an und aus, aber nicht in einem zu erwartenden Verhältnis, wie ein Motor bestromt wird. Über die nächste Zeit will ich mir einen LED-Adapter zusammen löten, die ich an die jeweiligen Ausgänge des MEGA’s anschließe. So möchte ich ergründen, ob es an dem MEGA oder DRV8825 liegt oder ob die Fehlerquelle am Mikroprozessor liegt. Als Vergleich habe ich einen UNO, da funktioniert ja fast alles einiger Maßen.
    Schrittmotortyp: 17HD40005-22B und Ausbautypen von Druckern, Scannern etc. . Das externe Netzteil ist ein VOLTCRAFT VLP 2403 mit zwei getrennten Ausgängen. Einen benutze ich für einen kleinen Lüfter 5V für den DRV8825 mit Temperaturanzeige und Abschalteinheit, den anderen Kanal für die externe Einspeisung für die Motore. Hier sind 3 A Belastung machbar.
    Ich verstehe nicht warum das mit dem MEGA 2560 nicht geht. Aber kommt Zeit, kommt auch Erfahrung. Ich brenne für meinen Hochhausaufzug, das muß werden. Den GND habe ich zwischen den Komponenten ordentlich durchgeschliffen.
    Danke euch, nette Grüße Clemens.

    #8578 Antworten
    Franz-Peter
    Gast

    Hallo Clemens,
    damit man dir helfen kann, müsstest Du mal ein jeweils komplettes Schaltbild posten, wie Du es am UNO und wie am Mega angeschlossen hast.
    Franz-Peter

    #8584 Antworten
    Clemens Andres
    Gast

    Hallo, * Modellhochhaus Aufzug * 23.12.2020MEGA2560 an Stepper über DRV8825

    wie ich Skizzen bzw. Fotos übermittle ist mir nicht klar, ich versuche es. Anbei das Anschlußschema und der letzte Arduinocode [2_11] , wo ich nur eins möchte – eine Drehbewegung der Stepperwelle, alles andere versuche ich selber, wenn dieser Schritt positiv verläuft.
    Danke nochmals für die nette Unterstützung. Gebt bitte Nachricht ob alles angekommen ist oder eine separate MailAdresse.
    MfG Clemens

    #8585 Antworten
    Clemens Andres
    Gast

    Also das hat nicht geklappt, auch hier brauche ich Bitte einen Tip, wie ihr an das Schema und den Schaltplan kommt, Format *jpg oder *pdf.

    #8586 Antworten
    Clemens Andres
    Gast

    Hier der allgemein gültige Code, an dem ich versuche den Schrittmotor
    ein paar Umdrehungen abzuringen, bisher erfolglos.

    /* Hier der einfache StepperMotor Code
    * aus dem Internet
    * Datum 23.12.2020
    * IDE gespeichert unter 2_11
    * Ergebnis: “funzt wie erwartet gar nicht”
    */

    const int stepPin = 3;
    const int dirPin = 4;
    void setup() {

    pinMode(stepPin,OUTPUT);
    pinMode(dirPin,OUTPUT);
    }
    void loop()
    {
    digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
    // Makes 200 pulses for making one full cycle rotation
    for(int x = 0; x < 200; x++)
    {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
    }
    delay(1000);
    digitalWrite(dirPin,LOW); //Changes the rotations direction
    // Makes 400 pulses for making two full cycle rotation
    for(int x = 0; x < 200; x++)
    {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
    }
    //delay(100); // vorher war der Wert 1000 eingesetzt
    delayMicroseconds(50); //unklar
    }

    Code wird vom IDE System angenommen, bei delay kommt es nach einiger Zeit zu einer Meldung wegen
    Zeitüberschreitung.

    #8587 Antworten
    Franz-Peter
    Gast

    Wie hast Du den bei deinem DRV8825 die Microschritte eingestellt? Im Fullstepmode und ohne Beschleunigungs- und Bremsrampen dürfte die Steprate zu hoch sein. Vergrößer da mal die 500 Microsekunden delays

    #8588 Antworten
    Stefan Hermann
    Administrator

    So, jede Menge Try&Error und wenig Wissenschaft. Aber bei mir funktioniert diese Kombi:

    1. Library: StepperDriver by Laurentiu Badea (Kannst du über Sketch>Bibliotheken einbinden>Bibliotheken verwalten …) suchen und installieren.
    2. Schaltung:
      Ist im Grunde die, die du geschickt hattest, nur dass Pin 13 am Sleep hängt

      • Pin 13 -> SLEEP
      • Pin 9 -> DIR
      • Pin 8 -> STEP
      • GND -> GND
      • 5V+ -> RESET
    3. Strom habe ich per Poti auf 1,6A -> Zum Einstellen (Nur zum Einstellen! Der Code funktioniert bei mir nicht.) habe ich diese Anleitung verwendet: https://www.makerguides.com/drv8825-stepper-motor-driver-arduino-tutorial/
    4. Code ist aus dem Beispiel der Library Datei>Beispiele>StepperDriver>AccelTest. Da musst du noch den richtigen Treiber einkommentieren oder du nimmst den Code hier:
    /*
     * Using accelerated motion ("linear speed") in nonblocking mode
     *
     * Copyright (C)2015-2017 Laurentiu Badea
     *
     * This file may be redistributed under the terms of the MIT license.
     * A copy of this license has been included with this distribution in the file LICENSE.
     */
    #include <Arduino.h>
    
    // Motor steps per revolution. Most steppers are 200 steps or 1.8 degrees/step
    #define MOTOR_STEPS 200
    // Target RPM for cruise speed
    #define RPM 120
    // Acceleration and deceleration values are always in FULL steps / s^2
    #define MOTOR_ACCEL 2000
    #define MOTOR_DECEL 1000
    
    // Microstepping mode. If you hardwired it to save pins, set to the same value here.
    #define MICROSTEPS 16
    
    #define DIR 8
    #define STEP 9
    #define SLEEP 13 // optional (just delete SLEEP from everywhere if not used)
    
    /*
     * Choose one of the sections below that match your board
     */
    
    //#include "DRV8834.h"
    //#define M0 10
    //#define M1 11
    //DRV8834 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, M0, M1);
    
    // #include "A4988.h"
    // #define MS1 10
    // #define MS2 11
    // #define MS3 12
    // A4988 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, MS1, MS2, MS3);
    
    #include "DRV8825.h"
    #define MODE0 10
    #define MODE1 11
    #define MODE2 12
    DRV8825 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, MODE0, MODE1, MODE2);
    
    // #include "DRV8880.h"
    // #define M0 10
    // #define M1 11
    // #define TRQ0 6
    // #define TRQ1 7
    // DRV8880 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, M0, M1, TRQ0, TRQ1);
    
    // #include "BasicStepperDriver.h" // generic
    // BasicStepperDriver stepper(DIR, STEP);
    
    void setup() {
        Serial.begin(115200);
    
        stepper.begin(RPM, MICROSTEPS);
        // if using enable/disable on ENABLE pin (active LOW) instead of SLEEP uncomment next line
        // stepper.setEnableActiveState(LOW);
        stepper.enable();
        // set current level (for DRV8880 only). Valid percent values are 25, 50, 75 or 100.
        // stepper.setCurrent(100);
    
        /*
         * Set LINEAR_SPEED (accelerated) profile.
         */
        stepper.setSpeedProfile(stepper.LINEAR_SPEED, MOTOR_ACCEL, MOTOR_DECEL);
    
        Serial.println("START");
        /*
         * Using non-blocking mode to print out the step intervals.
         * We could have just as easily replace everything below this line with 
         * stepper.rotate(360);
         */
         stepper.startRotate(360);
    }
    
    void loop() {
        static int step = 0;
        unsigned wait_time = stepper.nextAction();
        if (wait_time){
            Serial.print("  step="); Serial.print(step++);
            Serial.print("  dt="); Serial.print(wait_time);
            Serial.print("  rpm="); Serial.print(stepper.getCurrentRPM());
            Serial.println();
        } else {
            stepper.disable();
            Serial.println("END");
            delay(3600000);
        }
    }

    Hoffe, das klappt auch bei dir.

    #8591 Antworten
    Clemens
    Gast

    Hallo Stefan, 24.12.2020
    wenn das klappt ist das ein riesiges Weihnachtsgeschenk und ich bin ganz glücklich. Die Bastlergene sind nicht zu leugnen und es gibt nichts schöneres, wenn eigene Projekte (Modellhochhaus mit autarkem Aufzug) gewisse Erfolge haben. Ein ganz großes Dankeschön zu nächst an dieser Stelle. Jetzt habe ich Zeit alles auszuprobieren. Ich informiere, wie es gelaufen ist. Deine Hinweise sehen doch zuversichtlicher aus, wie meine bisherigen Recherchen. In dem Sinne, eurem Team gesunde und frohe Weihnachten 2020 aus Thüringen.
    Dankbare Bastlergrüße von Clemens.

    #8606 Antworten
    Stefan Hermann
    Administrator

    Hi Clemens,

    na ich hoffe, dass es auch bei dir funktioniert. Ansonsten schreib wieder. Das bekommen wir schon hin.

    Schöne Weihnachten und liebe Grüße

    Stefan

    #8613 Antworten
    Stefan Hermann
    Administrator

    Ich hatte noch etwas Zeit und hab das noch mal ordentlich zusammen geschrieben. Die DRV8825 und NEMA17-Variante findest du nun unten im Beitrag :-) https://starthardware.org/automatischer-arduino-aufzug-fuer-ein-hochhausmodell/

Ansicht von 15 Beiträgen - 1 bis 15 (von insgesamt 18)
Antwort auf: Antwort #8584 in Mega2560 an DRV8825 und Schrittmotor
Deine Information: