Some work on stepper

This commit is contained in:
Nis Wechselberg 2022-10-20 19:59:11 +02:00
parent 7f196abe44
commit 4b2c0478a2

View file

@ -7,8 +7,8 @@
// Stepper motor speed configuration // Stepper motor speed configuration
#define microStepsFactor 4 #define microStepsFactor 4
#define maxStepperSpeed 1000 * microStepsFactor #define maxStepperSpeed 4000
#define inversionPause 20 #define inversionPause 50
// Create a new instance of the AccelStepper class: // Create a new instance of the AccelStepper class:
AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
@ -16,6 +16,7 @@ AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
// Runtime data // Runtime data
int currentPosition[] = {-1, -1, -1}; int currentPosition[] = {-1, -1, -1};
int nextPosition[] = {0, 0, 0}; int nextPosition[] = {0, 0, 0};
int stepperPosition = 0;
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
@ -29,6 +30,7 @@ void setup() {
stepper.setCurrentPosition(0); stepper.setCurrentPosition(0);
// Set the maximum speed in steps per second: // Set the maximum speed in steps per second:
stepper.setMaxSpeed(maxStepperSpeed); stepper.setMaxSpeed(maxStepperSpeed);
stepper.setAcceleration(40000);
// Rotate to 0,0,0 // Rotate to 0,0,0
setPosition(); setPosition();
@ -72,22 +74,24 @@ void setPosition() {
Serial.print(","); Serial.print(",");
Serial.println(currentPosition[2]); Serial.println(currentPosition[2]);
if (nextPosition[2] != nextPosition[2]) { if (currentPosition[2] != nextPosition[2]) {
rotateCcwTo(nextPosition[2]);
rotateCcwTo(nextPosition[2]); rotateCcwTo(nextPosition[2]);
rotateCcwTo(nextPosition[2]); rotateCcwTo(nextPosition[2]);
rotateCcwTo(nextPosition[2]); rotateCcwTo(nextPosition[2]);
} }
if (nextPosition[1] != nextPosition[1]) { if (currentPosition[1] != nextPosition[1]) {
rotateCwTo(nextPosition[1]);
rotateCwTo(nextPosition[1]); rotateCwTo(nextPosition[1]);
rotateCwTo(nextPosition[1]); rotateCwTo(nextPosition[1]);
} }
if (nextPosition[0] != nextPosition[0]) { if (currentPosition[0] != nextPosition[0]) {
rotateCcwTo(nextPosition[0]);
rotateCcwTo(nextPosition[0]); rotateCcwTo(nextPosition[0]);
} }
rotateCwTo(0);
rotateCwTo(10); rotateCwTo(10);
currentPosition[0] = nextPosition[0]; currentPosition[0] = nextPosition[0];
@ -96,11 +100,27 @@ void setPosition() {
} }
void rotateCwTo(int pos) { void rotateCwTo(int pos) {
stepper.move(1); Serial.print("CW to ");
stepper.runToNewPosition(2 * pos * microStepsFactor); Serial.println(pos);
if (stepperPosition == pos) {
// make sure we actually move one whole turn
stepper.move(-200 * microStepsFactor);
stepper.runToPosition();
} else {
stepper.runToNewPosition(-2 * pos * microStepsFactor);
stepperPosition = pos;
}
} }
void rotateCcwTo(int pos) { void rotateCcwTo(int pos) {
stepper.move(-1); Serial.print("CCW to ");
stepper.runToNewPosition(-2 * pos * microStepsFactor); Serial.println(pos);
if (stepperPosition == pos) {
// make sure we actually move one whole turn
stepper.move(200 * microStepsFactor);
stepper.runToPosition();
} else {
stepper.runToNewPosition(2 * pos * microStepsFactor);
stepperPosition = pos;
}
} }