stepper: quick accelerate

main
radex 2024-02-21 23:26:29 +01:00
parent d478fe34ea
commit 42f5c3cbd7
Signed by: radex
SSH Key Fingerprint: SHA256:hvqRXAGG1h89yqnS+cyFTLKQbzjWD4uXIqw7Y+0ws30
5 changed files with 24 additions and 45 deletions

View File

@ -39,3 +39,9 @@
#define STEPPER_STEPS_PER_REV 200
#define STEPPER_MICROSTEPS 2
#define STEPPER_MM_PER_REV 0.5 // TODO: measure this
#define MICROS_PER_TICK 16 // 16MHz / 256 = 62.5kHz = 16us per tick
#define STEPPER_MIN_CADANCE 50 // speed measured in timer ticks per step (less is faster)
#define STEPPER_MAX_CADANCE 12
#define STEPPER_CADENCE_ACCEL_MS 3 // acceleration measured in ms per cadence increment/decrement

View File

@ -58,6 +58,7 @@ void handleDebugFunctions(char key) {
Serial.println(" l - change stepper direction to left");
Serial.println(" r - change stepper direction to right");
Serial.println(" - - toggle stepper timer");
Serial.println(" q - quick accelerate");
} else if (key == 's') {
happyBuzz();
delay(500);
@ -90,6 +91,8 @@ void handleDebugFunctions(char key) {
setStepperDirection(RIGHT);
} else if (key == '-') {
setTimerEnabled(!isTimerEnabled());
} else if (key == 'q') {
quickAccelerate();
}
}

View File

@ -35,54 +35,9 @@ void setup() {
splashScreen();
}
/*
bool stepperDemo = false;
bool stepperDemoSlowing = false;
bool stepperDemoLongStretch = false;
unsigned long lastStepperDemoMillis = 0;
*/
void loop() {
debugScanI2C();
/*
if (debugKey == 'k') {
setStepperEnabled(true);
setStepperDirection(RIGHT);
setTimerEnabled(true);
setTimerCadence(50);
stepperDemo = true;
stepperDemoSlowing = false;
stepperDemoLongStretch = false;
lastStepperDemoMillis = millis();
}
if (stepperDemo) {
auto now = millis();
if (now - lastStepperDemoMillis >= (stepperDemoLongStretch ? 1500 : 3)) {
lastStepperDemoMillis = now;
stepperDemoLongStretch = false;
auto cadence = getTimerCadence();
if (stepperDemoSlowing) {
if (cadence == 50) {
setStepperDirection(!getStepperDirection());
stepperDemoSlowing = false;
} else {
setTimerCadence(cadence + 1);
}
} else {
if (cadence == 12) {
stepperDemoLongStretch = true;
stepperDemoSlowing = true;
} else {
setTimerCadence(cadence - 1);
}
}
}
}
*/
auto input = getInput();
if (input.hasInput) {
tick();

View File

@ -93,3 +93,15 @@ inline void step() {
ISR(TIMER1_COMPA_vect) {
step();
}
void quickAccelerate() {
setStepperEnabled(true);
uint16_t cadence = STEPPER_MIN_CADANCE;
setTimerCadence(cadence);
setTimerEnabled(true);
while (cadence > STEPPER_MAX_CADANCE) {
delay(STEPPER_CADENCE_ACCEL_MS);
cadence--;
setTimerCadence(cadence);
}
}

View File

@ -14,3 +14,6 @@ void setStepperEnabled(bool enabled);
bool getStepperDirection();
void setStepperDirection(bool dir);
inline void step();
/** Accelerates from 0 to max speed as quickly as possible, synchronously */
void quickAccelerate();