hello
I'm using Arduino and TMC2209 to control stepper motor.
Using the stand-alone interface (direction and step pins only) I can't switch the rotating direction.
digitalWrite(DIR_PIN,HIGH);
for (int i=0; i<1000; i++){
digitalWrite(STP,HIGH);
delayMicroseconds(100);
digitalWrite(STP,LOW);
delayMicroseconds(100);
}
This is the super simple code I'm using. when I change the DIR_PIN to LOW (or HIGH), the rotating direction is always the same, what am I doing wrong?
If that does not help them please post a photo of a drawing showing how you have everything connected AND a link to the datasheet for the stepper driver.
If that does not help them please post a photo of a drawing showing how you have everything connected AND a link to the datasheet for the stepper driver.
ok, thanks for the reply
so I use the second code on your link.
the stepper motor rotates the same direction (very slow) regardless of the button been pushed.
// testing a stepper motor with a Pololu A4988 driver board or equivalent
// this version uses millis() to manage timing rather than delay()
// and the movement is determined by a pair of momentary push switches
// press one and it turns CW, press the other and it turns CCW
byte directionPin = 9;
byte stepPin = 8;
byte buttonCWpin = 10;
byte buttonCCWpin = 11;
boolean buttonCWpressed = false;
boolean buttonCCWpressed = false;
byte ledPin = 13;
unsigned long curMillis;
unsigned long prevStepMillis = 0;
unsigned long millisBetweenSteps = 25; // milliseconds
void setup() {
Serial.begin(9600);
Serial.println("Starting Stepper Demo with millis()");
pinMode(directionPin, OUTPUT);
pinMode(stepPin, OUTPUT);
pinMode(ledPin, OUTPUT);
pinMode(buttonCWpin, INPUT_PULLUP);
pinMode(buttonCCWpin, INPUT_PULLUP);
}
void loop() {
curMillis = millis();
readButtons();
actOnButtons();
}
void readButtons() {
buttonCCWpressed = false;
buttonCWpressed = false;
if (digitalRead(buttonCWpin) == LOW) {
buttonCWpressed = true;
}
if (digitalRead(buttonCCWpin) == LOW) {
buttonCCWpressed = true;
}
}
void actOnButtons() {
if (buttonCWpressed == true) {
digitalWrite(directionPin, LOW);
singleStep();
}
if (buttonCCWpressed == true) {
digitalWrite(directionPin, HIGH);
singleStep();
}
}
void singleStep() {
if (curMillis - prevStepMillis >= millisBetweenSteps) {
// next 2 lines changed 28 Nov 2018
//prevStepMillis += millisBetweenSteps;
prevStepMillis = curMillis;
digitalWrite(stepPin, HIGH);
digitalWrite(stepPin, LOW);
}
}
this is the datasheet, also I attached drawing of how everything connected.
What happens if you try the first (simpler) program in my link?
What happens if you connect the DIR pin either to GND or VIO?
If you have correctly connected to the step, direction and GND pins I'm afraid I can't think of anything to suggest. I am not familiar with that stepper driver.
Your diagram shows an ESP32 but your Original Post said you are using an Arduino. Which is it? (Not sure if it matters).