1

For some reason my motor moves a certain amount every time I open the serial port without giving it any other instructions. It will move further by the same amount if I close and reopen the serial port. Please could someone tell me how to avoid this? I haven't had this problem before.

I am using two stepper motors with a A4988 driver each.

Here is my code so far

#include <AccelStepper.h>
#include <MultiStepper.h>
// Define pin connections
const int dirPin1 = 2;
const int stepPin1 = 3;
const int dirPin2 = 4;
const int stepPin2 = 5;
String incomingByte; // for incoming serial data
// Define motor interface type
#define motorInterfaceType 1
// Creates an instance
AccelStepper stepper1(motorInterfaceType, stepPin1, dirPin1);
AccelStepper stepper2(motorInterfaceType, stepPin2, dirPin2);
MultiStepper steppers;
void setup() {
 Serial.begin(9600);
 String excess1 = Serial.readString();
 // Configure each stepper
 stepper1.setCurrentPosition(0);
 stepper2.setCurrentPosition(0);
 stepper1.setMaxSpeed(100);
 stepper2.setMaxSpeed(100);
 stepper1.setAcceleration(10);
 stepper2.setAcceleration(10);
 // Then give them to MultiStepper to manage
 steppers.addStepper(stepper1);
 steppers.addStepper(stepper2);
}
void loop() {
 // send data only when you receive data:
 if (Serial.available() > 0) {
 // read the incoming byte:
 incomingByte = Serial.readString();
 // say what you got:
 Serial.print("I received: ");
 //Serial.println(incomingByte, DEC);
 Serial.println(incomingByte);
 int x = incomingByte.toInt();
 long positions[2];
 positions[0] = x;
 positions[1] = 0;
 steppers.moveTo(positions);
 steppers.runSpeedToPosition();
 }
}
asked Apr 27, 2021 at 18:36
2
  • add serial.print() statements into your code so that you can determine how the program is progressing ... the Uno is probably resetting Commented Apr 27, 2021 at 18:42
  • That makes sense that the Uno would reset when the serial port is opened, but the motor shouldn't move if the current position is set to zero each time and there are no new instructions to move. I have included the line below to flush the serial buffer, so there shouldn't be any new instructions. ''' String excess1 = Serial.readString(); ''' Commented Apr 27, 2021 at 18:47

1 Answer 1

1

When you open or reopen the Serial port, the Arduino resets (depending on how you open it; some programs don't send the signal on DTR or RTS, which result in the reset).

My guess is, that the stepper driver reacts to the Arduino configuring its pins for the stepper. Difficult to say, what exactly happens there. To mitigate that, you can add an external pulldown resistor (assuming you have an active high stepper driver. For active low use a pullup resistor). That should keep the step line of the driver low even when its not actively driven by the Arduino.

answered Apr 27, 2021 at 18:46
0

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.