Projekte und Tutorials für Arduino › Foren › StartHardware-Forum › Mega2560 an DRV8825 und Schrittmotor
- Dieses Thema hat 17 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 2 Jahre, 2 Monaten von Stefan Hermann.
-
AutorBeiträge
-
ClemensGast
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.Franz-PeterGastDann zeige mal deinen Sketch und wie Du das am UNO bzw am Mega angeschlossen hast. Ohne diese Info kann man nicht helfen.
ClemensGast// 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 revolutionvoid 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.ClemensGastIch 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.
Stefan HermannVerwalterHi 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
ClemensGastHallo 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.Franz-PeterGastHallo 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-PeterClemens AndresGastHallo, * Modellhochhaus Aufzug * 23.12.2020
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 ClemensClemens AndresGastAlso das hat nicht geklappt, auch hier brauche ich Bitte einen Tip, wie ihr an das Schema und den Schaltplan kommt, Format *jpg oder *pdf.
Clemens AndresGastHier 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.Franz-PeterGastWie 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
Stefan HermannVerwalterSo, jede Menge Try&Error und wenig Wissenschaft. Aber bei mir funktioniert diese Kombi:
- Library: StepperDriver by Laurentiu Badea (Kannst du über Sketch>Bibliotheken einbinden>Bibliotheken verwalten …) suchen und installieren.
- 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
- 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/
- 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.
ClemensGastHallo 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.Stefan HermannVerwalterHi 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
Stefan HermannVerwalterIch 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/
-
AutorBeiträge