Das habe ich leider nicht, daher kann ich Dich da nicht unterstützen.
Hast Du möglicherweise ein 20x4 LCD mit I2C-Schnittstelle rumliegen?
Dann mache ich Dir mal einen Vorschlag basierend auf diesem Beispiel.
Beim DRV8825 habe ich M1 auf HIGH gesetzt für 1/4 Mikroschritt, sonst die Standardbeschaltung. Ich habe Dir zwei Hürden eingebaut:
- Weil ich gleichzeitig die MobaTools auf ESP32 teste (es funktioniert!), mußt Du alle Pindefinitionen auf Dein Shield anpassen.
- Weil Du mittelfristig vier und langfristig sieben Achsen bewegen möchtest, habe ich erst garnicht mit achse_1 angefangen, sondern besser mit achse[ ACHSE_1 ]. Dann kannst Du Dich gleich damit anfreunden

// getestet mit ESP32
/* Beispiel für die Ansteuerung eines bipolaren Steppers über 4 Taster und
ein Poti ( für die Geschwindigkeit )
In diesem Beispiel werden neben der Stepperklasse (MoToStepper), auch die MoToButtons
und der MoToTimebase genutzt.
Der Spulenstrom wird abgeschaltet, wenn der Stepper nicht läuft.
Die Taster müssen gegen Gnd schalten, es sind keine Widerstände notwendig
Button1: Dreht rechts, solange Taster gedrückt
Button2: Dreht links, solange Taster gedrückt
Button3: 1 Umdrehung rechts
Button4: 1 Umdrehung links
*/
#define MAX8BUTTONS // spart Speicher, da nur 4 Taster benötigt werden
#include <MobaTools.h>
// Pindefinitionen - bitte anpassen!
const byte button1Pin = 25;
const byte button2Pin = 26;
const byte button3Pin = 27;
const byte button4Pin = 14;
const int STEPS_REVOLUTION = 800; // 800 Schritte / Umdrehung - 1/4 Microstep
class Achse {
const byte stepPin, dirPin, enaPin; // Treiberpins
public:
MoToStepper Step;
Achse(const byte stepPin, const byte dirPin, const byte enaPin)
: stepPin(stepPin), dirPin(dirPin), enaPin(enaPin), Step( STEPS_REVOLUTION, STEPDIR ) {}
void init() {
Step.attach( stepPin, dirPin );
Step.attachEnable( enaPin, 10, LOW ); // Enable Pin aktivieren ( LOW=aktiv )
Step.setSpeed( 2000 ); // 1/10 U/Min
Step.setRampLen( 50 ); // Rampenlänge 100 Steps bei 20U/min
}
};
Achse achse[] {
//stepPin, dirPin, enaPin; bitte anpassen!
{32, 33, 13}, // Achse 1
//{s, d, e} // Achse n
};
// Taster einrichten
enum { Button1 = 0, Button2, Button3, Button4 } ; // Den Tasternamen die Indizes 0...3 zuordnen
const byte buttonPins[] = { button1Pin, button2Pin, button3Pin, button4Pin }; // muss als byte definiert sein, damit ein enfaches sizeof funktioniert
MoToButtons button( buttonPins, sizeof(buttonPins), 20, 500 );
MoToTimebase speedIntervall; // Zeitinterval zum Auslesen des Speedpotentiometers
// the speed pot ist read only every 'speedintervall' ms
int vspeed = 0; //Steppergeschwindigkeit in U/min*10, könnte variiert werden
void setup()
{
for (Achse &a : achse) a.init();
speedIntervall.setBasetime( 100 ); // 100ms Tickerzeit
}
void loop() {
enum {ACHSE_1};
button.processButtons(); // Taster einlesen und bearbeiten
// Speed alle 100ms neu einlesen und setzen
if ( speedIntervall.tick() ) {
// wird alle 100ms aufgerufen ( Tickerzeit = 100ms im setup() )
vspeed = 1023; //map((analogRead(potPin)), 0, 1023, 20, 1800); //Poti mappen auf 2 ... 180 Umdr/Min
//min speed =2 and max speed =180 rpm
achse[ACHSE_1].Step.setSpeed( vspeed );
}
// Drehen rechtsrum
if (button.pressed(Button1) ) {
//Taster1 gedrückt
achse[ACHSE_1].Step.rotate( 1 ); // Stepper dreht vorwärts
}
if ( button.released(Button1) ) {
//Taster1 losgelassen
achse[ACHSE_1].Step.rotate(0); // Stepper stoppt
}
//Drehen linksrum
if (button.pressed(Button2) ) {
//Taster2 gedrückt
achse[ACHSE_1].Step.rotate( -1 ); // Stepper dreht rückwärts
}
if ( button.released(Button2) ) {
//Taster2 losgelassen
achse[ACHSE_1].Step.rotate(0); // Stepper stoppt
}
// 1 Umdrehung rechts {
if (button.pressed(Button3) ) {
//Taster3 wurde gedrückt
achse[ACHSE_1].Step.doSteps(STEPS_REVOLUTION);
}
// 1 Umdrehung links
if (button.pressed(Button4) ) {
//Taster4 wurde gedrückt
achse[ACHSE_1].Step.doSteps(-STEPS_REVOLUTION);
}
}
Folgende Schritte nun für Dich:
- Eine Achse auf dem Shield aussuchen und die zugehörigen Pins ermitteln.
- Pinzuordnung mit einer LED mit Vorwiderstand und Blinkprogramm überprüfen.
- Im Programm die Pinzuordnung anpassen.
- Programm auf dem Mega2560 laden.
- Treiber auf das Shield stecken.
- Motor anschließen.
- Motorspannung am Shield anschließen.
- Funktion testen.
Bitte berichte!