Hardware - Steppermotor mit A4988
Für kleinere Steppermotoren wie den NEMA17 kann auch ein kleines Treibermodul verwendet werden. ALLERDINGS nur bis max. 1 Ampere Leistungsaufnahme des Motors - besser allerdings nur bis max. 0.50-0.75 A - da sonst der Treiber sehr schnell sehr heiss wird....
Der Steppermotortreiber A4988 wird als Modulplatine angeboten. Die Platine hat die Grösse einer "Briefmarke" - i.d. Regel wird ein kleiner Kühlkörper mitgeliefert, den Ihr auf den Prozessor klebt ( macht es - es wird schnell heiss ).

Die Einrichtung ist etwas "tricky" - es gibt aber im WEB viele Anleitungen..
Die Platine "übersetzt" die Steuerbefehle des Computers in Ansteuerungsbefehle des Motors und versorgt diesen gleichzeitig mit Strom.
Wie dies im Prinzip erfolgt, siehe...
Es wird dringend empfohlen, auf die Eingangspins der Stromversorgung des Motors (VMOT und GND) einen Elktrolyt-Kondensator mit mind. 100 müF zu löten, um Spannungsspitzen zu vermeiden. ( die Teile findet Ihr oft auf alten Leiterplatinen - werft Eure kaputten Computer etc. also nicht immer gleich weg ).
Die Polung des Kondensators müsst Ihr beachten - es ist i.d. Regel immer eine Längs-Markierung drauf, das ist dann der negative Pol (GND)

Die Platine hat folgende Anschlüsse:
VMOT und GND | für die Stromversorgung des Motors ( 8-35V ), muss immer extern durch ein Netzteil o.ä. umgesetzt werden (nicht zu schwach - mind. 1-2 A) |
VDD und GND | für die Stromversorgung der Regel-Elektronik (3.5-5.0V), kann auch extern umgesetzt werden, ggf. auch vom Computer geliefert - GND mit GND des Computers verbinden !!! |
STEP und DIRECTION | beide werden mit einem Steuerpin am Computer verbunden, DIRECTION steuert die Drehrichtung und STEP steuert die Drehzahl des Motors.. Es gibt immer eine Verzögerung zwischen Steuerbefehlen, damit kann die Motordrehzahl variiert werden - allerdings gibt es Mindestwerte in Abhängigkeit von den MODI... |
1A,1B,2A,2B | diese PINS werden mit dem STEPPER-Motor verbunden, dabei muss die Pinbelegung am Motor ( 2 Spulen = 1AB und 2AB ) beachtet werden => Handbücher wälzen !! |
MS1-MS3 | es gibt verschiedene MODI für die Ansteuerung des Motors - von GROB bis FEIN => Handbücher wälzen !! Die PIN's werden entsprechend mit VDD per Drahtbrücke verbunden. |
ENABLE | hier könnt Ihr den Motor an-/ausschalten (sonst brummt der immer..) |
SLEEP und RESET | diese PIN's habe ich noch nicht genutzt => Handbücher wälzen !! Ich verbinde sie i.d. Regel mit einer Drahtbrücke untereinander. |
WICHTIG:
- den Kondensator nicht vergessen..
- immer erst den Motor (VMOT/GND) mit Strom versorgen, dann die Regel-Elektronik anschliessen ( sonst kann das Modul zerstört werden ), umgekehrt dann sinngemäss...
- die Anschlüsse VMOT und GND sind sehr nah beeinander und da fliesst ggf. schon etwas mehr Strom - also sorgfältig löten und Kurzschluss vermeiden (ggf. eine Sicherung mit einbauen)...
- ihr müsst das Modul ZUERST auf den Motor "kalibrieren" , sprich die gelieferte Leistung (Ampere) auf die Nennleistung des Motors einstellen. Ist aber nicht schwer - Ihr braucht jedoch ein Messgerät mit der Funktion Amperemessung => Handbuch wälzen !!

Hier ein kleines Programm für den ESP32....
(Achtung - der Text [code].....[/code] gehört NICHT zum Programm..)
[code]
// der Steppermotor ( max 1A sonst brennt der Treiberchip durch )
// wird (bei mir) an den Pin's 18 und 19 angetrieben. Er wird durch
// den ESP in den Ruhestand versetzt bzw. aufgeweckt (bei mir) mit
// PIN 17...( so verdrahtet.. )
// PIN 19 wird DIRECTION und PIN 18 wird STEP....( so verdrahtet.. )
// ACHTUNG:
// erst den Stepper mit 8-12 V versorgen, dann die Steuerungsspannungen
// 3-5 V anlegen/einschalten - sonst ist der Treiber ebenfalls Schrott..
// umgekehr sinngemäss...erst kleinen Strom weg, dann grossen Strom weg...
// Es gibt 2 Programm-Modi...
// 1. Stepper einstellen - für die Konfiguration des max. Stroms, hier
// wird lediglich der PIN 18 auf HIGH geschaltet - aber nicht gepulst..
// Dies dient der Justierung - dazu muss ein Amperemeter in einem Spulenkreis
// in Reihe geschaltet werden - und dann mit dem kleinen Potentiometer der
// max. Strom für den Motor justiert werden...
// 2. Regelbetrieb - dies sind die notwendigen Anweisungen für die normale
// Motorsteuerung
// Bibliotheken
// keine...
// Definitionen......
uint8_t STEP_Pin = 18;
uint8_t DIR_Pin = 19;
uint8_t ENA_Pin = 19;
// hier jetzt Modus 1/4-Schritt ( MS2 ist HIGH )
// andere Modi haben eine andere Schrittzahl !!! siehe Handbuch...
int Anz_STEP_360 = 800;
// dies ist die minimale Verzögerungszeit
// die Umdrehung/min kann man über die mues_Delay einstellen...
// hier jetzt Modus 1/4-Schritt ( MS2 ist HIGH )
// andere Modi brauchen eine andere Verzögerung !!! siehe Handbuch...
int mues_Delay = 450; // für aktuellen Modus geht auch 250 noch...
// Der Motor braucht im Vollschrittmodus 200 Steuersequenzen / 360 Grad
// er löst also 1.8 Grad je Steuersequenz auf.. d.h. 5 Sequenzen sind 9 Grad
// und 10 Sequenzen sind 18 Grad etc...
// in anderen Modi muss das dann entsprechend angepasst werden...
// erste Einstellungen....
void setup() {
Serial.begin(115200); // Verbindung zum seriellen Monitor
// der Arduino-Oberfläche - der Wert muss passen)
pinMode(STEP_Pin, OUTPUT); // Modus der PIN's einstellen
pinMode(DIR_Pin, OUTPUT);
pinMode(ENA_Pin, OUTPUT);
// aktuell ist DIR und ENABLED verbunden
// ENA_PIN ON = Motor OFF !!!
digitalWrite(STEP_Pin, LOW); // generell immer erst mal Status definieren
digitalWrite(DIR_Pin, LOW); // damit die Pin's nicht im "Leeren" hängen...
digitalWrite(ENA_Pin, HIGH); // der Motor ist erst mal OFF
} // Ende Setup
// Dauerschleife.....
void loop() {
digitalWrite(ENA_Pin, LOW); // den Motor anschalten...
// Jetzt ALTERNATIV auswählen !!!
// Block deaktivieren mit /*...Block...*/
// Status 1 - Einstellen !!!
/* digitalWrite(DIR_Pin, LOW); // Drehrichtung festlegen */
// aktiv ist Status 2 - Lösung mit definiertem Durchlauf-eine Umdrehung
for (int i=0 ; i<= Anz_STEP_360 ; i++) {
digitalWrite(STEP_Pin, HIGH);
delayMicroseconds (mues_Delay);
digitalWrite(STEP_Pin, LOW);
delayMicroseconds (mues_Delay);
} // i<...
digitalWrite(ENA_Pin, HIGH); // den Motor ausschalten...
delay(5000); // gewünschte Wartezeit...
} // Ende Loop
[/code]
Probiert es doch einfach aus....