stepper: quick accelerate
parent
d478fe34ea
commit
42f5c3cbd7
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue