Skip to content

Commit f7f1558

Browse files
committed
#320: Add Issue320.ino as example
1 parent ac175a3 commit f7f1558

File tree

1 file changed

+131
-0
lines changed

1 file changed

+131
-0
lines changed

examples/Issue320/Issue320.ino

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
#include "FastAccelStepper.h"
2+
#include "esp32/clk.h"
3+
4+
// Tests done with esp32
5+
6+
#define dirPinStepper 17 // 3,8 will cause watchdog reset loop
7+
#define enablePinStepper 16
8+
#define stepPinStepper 18 // 6 does not work
9+
10+
//#define stepperSpeed 200000
11+
//#define stepperAcceleration 1000000
12+
//#define stepperSteps 90000
13+
#define stepperSpeed 200000
14+
#define stepperAcceleration 1000000
15+
#define stepperSteps 90000
16+
17+
FastAccelStepperEngine engine = FastAccelStepperEngine();
18+
FastAccelStepper *stepper = NULL;
19+
20+
void setup() {
21+
Serial.begin(115200);
22+
while (!Serial) {
23+
delay(10);
24+
}
25+
26+
delay(1000);
27+
Serial.println("Starting");
28+
Serial.print("ESP-IDF Version: ");
29+
Serial.println(esp_get_idf_version());
30+
Serial.printf("APB Base Clock: %d Hz\n", esp_clk_apb_freq());
31+
32+
33+
engine.init();
34+
// with v0.31.7:
35+
// stepperSpeed 200000:
36+
// RMT needs 1660ms
37+
// MCPWM needs 660ms
38+
// stepperSpeed 180000:
39+
// RMT needs 1680ms
40+
// stepperSpeed 170000:
41+
// RMT needs 1700ms
42+
// stepperSpeed 168000: => Number of steps 89861 instead of 90000. Steps are interrupted with pauses
43+
// RMT needs 1720ms
44+
// stepperSpeed 165000:
45+
// RMT needs 680ms
46+
// stepperSpeed 160000:
47+
// RMT needs 740ms
48+
// stepperSpeed 150000:
49+
// RMT needs 760ms
50+
// stepperSpeed 100000:
51+
// RMT and MCPWM need both ~1020ms
52+
// stepperSpeed 20000:
53+
// RMT and MCPWM both need 4540ms
54+
stepper = engine.stepperConnectToPin(stepPinStepper, DRIVER_RMT);
55+
//stepper = engine.stepperConnectToPin(stepPinStepper);
56+
57+
if (!stepper) {
58+
while(true) {
59+
Serial.println("error connecting to stepper pin");
60+
delay(1000);
61+
}
62+
}
63+
64+
stepper->setDirectionPin(dirPinStepper);
65+
stepper->setEnablePin(enablePinStepper);
66+
stepper->setAutoEnable(true);
67+
68+
stepper->setSpeedInHz(stepperSpeed);
69+
stepper->setAcceleration(stepperAcceleration);
70+
}
71+
72+
uint32_t start_move_ms = 0;
73+
74+
void loop() {
75+
int32_t stepper_position;
76+
static int32_t previous_position = 0;
77+
static unsigned long millis_stalled = 0;
78+
unsigned long stall_time = 0;
79+
static int direction = 1;
80+
81+
if (stepper) {
82+
stepper_position = stepper->getCurrentPosition();
83+
if (stepper->isRunning()) {
84+
Serial.print("@");
85+
Serial.print(stepper_position);
86+
if (stepper_position == previous_position) {
87+
if (millis_stalled == 0) {
88+
millis_stalled = millis();
89+
}
90+
stall_time = millis() - millis_stalled;
91+
Serial.println(" (Stalled for " + String(stall_time) + "ms)");
92+
if (stall_time > 2000) {
93+
int32_t new_position = direction > 0 ? stepperSteps : 0;
94+
Serial.println("Stopping stepper and moving to " + String(new_position));
95+
stepper->forceStopAndNewPosition(new_position);
96+
millis_stalled = 0;
97+
}
98+
delay(1000);
99+
} else {
100+
Serial.println();
101+
}
102+
previous_position = stepper_position;
103+
} else {
104+
uint32_t end_move_ms = millis();
105+
Serial.print("@");
106+
Serial.print(stepper_position);
107+
if (start_move_ms != 0) {
108+
Serial.print(" in ");
109+
Serial.print(end_move_ms - start_move_ms);
110+
Serial.print("ms");
111+
}
112+
Serial.println();
113+
delay(1000);
114+
115+
start_move_ms = millis();
116+
if (stepper_position == 0) {
117+
stepper->moveTo(stepperSteps);
118+
char buffer[50];
119+
snprintf(buffer, sizeof(buffer), "moveTo(%d)", stepperSteps);
120+
Serial.println(buffer);
121+
direction = 1;
122+
} else {
123+
stepper->moveTo(0);
124+
Serial.println("moveTo(0)");
125+
direction = -1;
126+
}
127+
}
128+
}
129+
130+
delay(20);
131+
}

0 commit comments

Comments
 (0)