Skip to content

Commit ba54bd8

Browse files
committed
drivers/a4988: Added A4988 stepper motor driver for esp32.
Signed-off-by: Anshuflame04 <[email protected]>
1 parent 68e3e07 commit ba54bd8

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

Diff for: micropython/drivers/a4988/a4988.py

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import time
2+
3+
# Constants
4+
STEPS_PER_REV = 200 # Number of steps per motor revolution
5+
MIN_DELAY = 0.001 # Minimum delay between steps (controls maximum speed)
6+
7+
class A4988:
8+
def __init__(self, step_pin, dir_pin, en_pin=None):
9+
self.step_pin = step_pin
10+
self.dir_pin = dir_pin
11+
self.en_pin = en_pin
12+
if self.en_pin is not None:
13+
self.enable_motor(enabled=True)
14+
15+
def enable_motor(self, enabled=True):
16+
"""Enable or disable the motor driver (active low)."""
17+
if self.en_pin:
18+
self.en_pin.value(0 if enabled else 1)
19+
20+
def step_motor(self, steps=STEPS_PER_REV, direction=1, delay=0.005):
21+
"""Move the motor a specified number of steps in the given direction."""
22+
self.dir_pin.value(direction) # Set direction (1 = forward, 0 = backward)
23+
for _ in range(steps):
24+
self.step_pin.value(1)
25+
time.sleep(delay)
26+
self.step_pin.value(0)
27+
time.sleep(delay)
28+
29+
def calculate_speed(self, current_delay):
30+
"""Calculate the current speed in steps per second and RPM."""
31+
if current_delay <= 0:
32+
return 0, 0
33+
steps_per_second = 1 / (2 * current_delay) # Delay is for each half-step
34+
rpm = (steps_per_second / STEPS_PER_REV) * 60 # Convert to RPM
35+
return steps_per_second, rpm
36+
37+
def inc_speed(self, current_delay):
38+
"""Decrease delay to increase speed, respecting minimum delay limit."""
39+
new_delay = max(current_delay - 0.001, MIN_DELAY)
40+
return new_delay
41+
42+
def dec_speed(self, current_delay):
43+
"""Increase delay to decrease speed."""
44+
new_delay = current_delay + 0.001
45+
return new_delay
46+
47+
def forward_motion(self, steps=STEPS_PER_REV, delay=0.005):
48+
"""Move motor forward for a given number of steps and delay."""
49+
self.step_motor(steps=steps, direction=1, delay=delay)
50+
51+
def backward_motion(self, steps=STEPS_PER_REV, delay=0.005):
52+
"""Move motor backward for a given number of steps and delay."""
53+
self.step_motor(steps=steps, direction=0, delay=delay)

Diff for: micropython/drivers/a4988/manifest.py

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
metadata(description="MicroPython driver for A4988 stepper motor controller", version="1.0.0")

0 commit comments

Comments
 (0)