Arduino Stepper Motor mit TMC2208 ansteuern?
Hallo,
ich versuche gerade meinen Stepper Motor mit dem Arduino anzusteuern dazu nutze ich den Stepper Motor Treiber TMC2208. Ich habe jetzt das Problem, dass ich keine Ahnung habe wie ich den ansteuern kann. Im Internet habe ich jetzt schon lange gesucht viele machen das einfach mit der Stepper.h Bibliothek. Die die das machen haben aber alle nicht den Stepper Treiber.
Dann habe ich explizit nach Codes mit diesem Treiber gesucht und das gefunden:
#define EN_PIN 13
#define STEP_PIN 54
#include <TMC2208Stepper.h>
TMC2208Stepper driver = TMC2208Stepper(&Serial);
void setup() {
Serial.begin(115200);
while(!Serial);
pinMode(EN_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
driver.pdn_disable(1);
driver.I_scale_analog(0);
driver.rms_current(500);
driver.toff(0x2);
digitalWrite(13, LOW);
}
void loop() {
digitalWrite(STEP_PIN, !digitalRead(STEP_PIN));
delay(10);
}
Diesen Code habe ich dann auch mal drauf geladen es hat alles funktioniert, das heißt der Stepper dreht sich durchgehend (Geschwindigkeit je nach delay Einstellung).
Mein Problem ist ich verstehe diesen Code nicht wirklich. Ich weiß, dass sich der Motor dreht weil der Zustand des StepPins ständig hin und her wechselt weiß aber nicht warum das so sein muss. Es wäre auch gut wenn mir jemand die Zeilen die mit driver. beginnen erklären könnte :D
Da ich den Code nicht richtig verstehe, kann ich ihn nicht nutzen um ihn auf meine Anforderungen umzubauen. Zum Beispiel , dass er nur zu einer Bedingung dreht und nur eine gewisse Zeit lang oder eine gewisse Anzahl an Steps. Kann mir jemand sagen wie ich das umsetzten könnte?
Geht das vielleicht auch komplett ohne die Treiber Bibliothek? (Nur mit der Stepper Bibliothek? Oder ganz ohne?)
Ich weiß das ist womöglich eine komplexe Frage wäre aber sehr dankbar wenn sie mir jemand beantworten könnte.
PS. Ich habe die Stepper und Treiber im Moment nicht bei mir bin aber was das Thema angeht recht im Stress deshalb muss ich versuchen den Code zu schreiben ohne ihn direkt ausprobieren zu können.
Vielen Dank :D
1 Antwort
Hallo,
als erstes musst du wissen wie ein Schritt-Motor überhaupt angesteuert wird.
ein Beispiel ein NEMA-17 motor hat einen Schrittwinkel von 1,8° das bedeutet 200 Schritte / Umdrehung (360° / 1,8° = 200 Schritte).
Der Schrittmotor-Treiber ist dazu ausgelegt, die Impulse, Richtung sowie dessen Strom zum Motor zu bestimmen und abzustimmen.
eigentlich benötigt der Treiber genau 3 Signale vom µC (arduino z.B.) Enable, Direction, Step
mit dem Enable pin tust du nur den Motor aktivieren / deaktivieren..wenn dieser aktiv ist aber STEP-Signal auf LOW liegt, hat der Motor eine Motorbremse.
mit DIR-Pin tust du die Bewegungsrichtung vom motor angeben..
und mit STEP-Pin sind die einzelne Schritte vom µC zum Treiber, wo du auch ohne Bibliothek hier selbst in einer Schleife die Impulse sowie Zeit/Impuls-Funktion die geschwindigkeit sowie anzahl der Schritte selbst definieren kannst.
man könnte also mit einer einfachen for-schleife wo z.B. 100 schritte macht und ein delay von 1ms hat, genau 180° in 100ms erreichen.
Enable auf HIGH, DIR entweder LOW oder HIGH dann die Schleife.
Nachtrag: Bitte stelle deinen Treiber auf richtige V-Ref SPannung zum Motor ein, dieses wird 1000end-Fach in Tutorials bei YT genau erklärt und was du so alles dazu brauchst.