Esp32UnoBoard mit StepperMotorDriver DRV8825
Quellen
Mouser :
Datasheet DRV8825
starthardware.org :
StepperMotor mit dem DRV8825 steuern
Übersicht
Mit dem an das Esp32UnoBoard angeschlossene StepperMotorDriver-Modul DRV8825 und einem
nachgeschalteten StepperMotor (typisch: NEMA17) kann der Benutzer eben diesen Schrittmotor
mit folgenden Eigenschaften ansteuern:
• Schrittfrequenz im Rahmen der MotorParameter wählbar
• Direction Positive oder Negative wählbar
• Strombegrenzung (400mA/1A/..) mit Potentiometer einstellbar
• Wahl zwischen Vollschritt-Auflösung: - Full - Half - Quarter
• und zwischen Feinschritt-Auflösung: - Eight - Sixteen - ThirtyTwo
DRV8255-Modul mit Step-Sequence und -Direction
(Edited) DRV8255-Modul mit Step-Sequence und -Direction
Hardware
Auf der Treiber-Platine DRV8825 findet sich das StepperMotor-IC.
Auf dieses kann der Benutzer bei Bedarf einen typisch mitgelieferten Kühlkörper aufkleben.
Mit dem "CurrentLimitation"-Poti muss der Benutzer den maximal zulässigen Strom in
Abhängigkeit des verwendeten StepperMotors einstellen.
StepperMotorDriver DRV8255
Wiring
Die Verdrahtung von PC(VSCode), ESP32UnoBoard mit DRV8825-Modul und StepperMotor zeigt
das folgenden Schaltbild:
PC(VSCode), ESP32UnoBoard mit DRV8255-Modul und StepperMotor
Hier wird der StepperMotor mit 9V0 und einem maximal über das Poti eingestellten Strom von 400mA
betrieben.
Die Standard-Farben der vier Motorkabel sind:
• Blau und Rot für Motor-SpuleB
• Grün und Schwarz für Motor-SpuleA
Auf keinen Fall darf die gemeinsame Digitale Masse "0V0 DGND" bei allen Modulen vergessen werden!!!
Software
Das Demo-Programm "Esp32StepperMotorDRV8825" steuert den StepperMotorDriver DRV8825 mit
unterschiedlicher Schritt-Auflösung und in beiden Richtungen an in unendlicher Folge an.
#include "Define.h"
//
#include "StepperDRV8825.h"
//
CStepperDRV8825 StepperDRV8825(PIN_MOTOR_STEP,
PIN_MOTOR_DIRECTION,
PIN_MOTOR_PRECISIONM0,
PIN_MOTOR_PRECISIONM1,
PIN_MOTOR_PRECISIONM2,
PIN_MOTOR_ENABLEN);
//
enum EMainAction
{
maIdle = 0,
maFullPositive = 1,
maFullNegative = 2,
maHalfPositive = 3,
maHalfNegative = 4,
maQuarterPositive = 5,
maQuarterNegative = 6,
maEightPositive = 7,
maEightNegative = 8,
maSixteenPositive = 9,
maSixteenNegative = 10,
maThirtyTwoPositive = 11,
maThirtyTwoNegative = 12
};
//
EMainAction MainAction = maFullPositive;
long unsigned MillisPreset;
//
//---------------------------------------------------
// Setup
//---------------------------------------------------
void setup()
{
SerialPC.begin(115200);
delay(333);
SerialPC.println("");
SerialPC.println("***************************");
SerialPC.println("**** Esp32StepperMotor ****");
SerialPC.println("* Version....: 01V11 *");
SerialPC.println("* DateTime...: 2207191213 *");
SerialPC.println("* Author.....: OMdevelop *");
SerialPC.println("***************************");
//
StepperDRV8825.Open();
SerialPC.println("Initialisation done");
MainAction = maIdle;
SerialPC.println("MotorState: --- Idle ---");
}
//
//---------------------------------------------------
// MainLoop
//---------------------------------------------------
void loop()
{
StepperDRV8825.Execute();
//
if (ssIdle == StepperDRV8825.GetStateStep())
{
switch (MainAction)
{
case maIdle:
if (MILLIS_IDLE <= (millis() - MillisPreset))
{
StepperDRV8825.Disable();
MainAction = maFullPositive;
SerialPC.println("MotorState: FullPositive");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdPositive, srFull, STEPPERIOD_US, STEPCOUNT);
}
break;
case maFullPositive:
StepperDRV8825.Disable();
MainAction = maFullNegative;
SerialPC.println("MotorState: FullNegative");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdNegative, srFull, STEPPERIOD_US, STEPCOUNT);
break;
case maFullNegative:
StepperDRV8825.Disable();
MainAction = maHalfPositive;
SerialPC.println("MotorState: HalfPositive");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdPositive, srHalf, STEPPERIOD_US, STEPCOUNT);
break;
case maHalfPositive:
StepperDRV8825.Disable();
MainAction = maHalfNegative;
SerialPC.println("MotorState: HalfNegative");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdNegative, srHalf, STEPPERIOD_US, STEPCOUNT);
break;
case maHalfNegative:
StepperDRV8825.Disable();
MainAction = maQuarterPositive;
SerialPC.println("MotorState: QuarterPositive");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdPositive, srQuarter, STEPPERIOD_US, STEPCOUNT);
break;
case maQuarterPositive:
StepperDRV8825.Disable();
MainAction = maQuarterNegative;
SerialPC.println("MotorState: QuarterNegative");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdNegative, srQuarter, STEPPERIOD_US, STEPCOUNT);
break;
case maQuarterNegative:
StepperDRV8825.Disable();
MainAction = maEightPositive;
SerialPC.println("MotorState: EightPositive");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdPositive, srEight, STEPPERIOD_US, STEPCOUNT);
break;
case maEightPositive:
StepperDRV8825.Disable();
MainAction = maEightNegative;
SerialPC.println("MotorState: EightNegative");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdNegative, srEight, STEPPERIOD_US, STEPCOUNT);
break;
case maEightNegative:
StepperDRV8825.Disable();
MainAction = maSixteenPositive;
SerialPC.println("MotorState: SixteenPositive");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdPositive, srSixteen, STEPPERIOD_US, STEPCOUNT);
break;
case maSixteenPositive:
StepperDRV8825.Disable();
MainAction = maSixteenNegative;
SerialPC.println("MotorState: SixteenNegative");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdNegative, srSixteen, STEPPERIOD_US, STEPCOUNT);
break;
case maSixteenNegative:
StepperDRV8825.Disable();
MainAction = maThirtyTwoPositive;
SerialPC.println("MotorState: ThirtyTwoPositive");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdPositive, srThirtyTwo, STEPPERIOD_US, STEPCOUNT);
break;
case maThirtyTwoPositive:
StepperDRV8825.Disable();
MainAction = maThirtyTwoNegative;
SerialPC.println("MotorState: ThirtyTwoNegative");
StepperDRV8825.Enable();
StepperDRV8825.Move(sdNegative, srThirtyTwo, STEPPERIOD_US, STEPCOUNT);
break;
case maThirtyTwoNegative:
StepperDRV8825.Disable();
MainAction = maIdle;
SerialPC.println("MotorState: --- Idle ---");
MillisPreset = millis();
break;
}
}
}
Download des VSCode-Projekts: 2207191213_Esp32StepperMotorDRV8825_01V11.zip
Programm-Terminal-Ausgabe: 2207191213_Esp32StepperMotorDRV8825_01V11
WebSites
Module
Elektronik