implemented step_motor

This commit is contained in:
thatsn0tmysite 2023-11-24 23:19:18 +01:00
parent 0473c42fd1
commit 1d8d9cb870

46
main.py
View File

@ -47,7 +47,7 @@ motorPins = [
Pin(15, Pin.OUT) # D8 Pin(15, Pin.OUT) # D8
] ]
MODE_PIN = Pin(13, Pin.IN) # D7 MODE_PIN = Pin(5, Pin.IN) # D7
STEPPER_SEQUENCE = [ STEPPER_SEQUENCE = [
[1, 0, 0, 1], [1, 0, 0, 1],
@ -66,12 +66,12 @@ total_seconds = 0.0
totalsteps = 0 totalsteps = 0
step_interval_s = 0.001 step_interval_s = 0.001
current_step = 0 current_step = 0
next = 0 nxt = 0
now = 0 now = 0
last_toggle = 0 last_toggle = 0
current_mode = NORMAL current_mode = NORMAL
autostop = True autostop = True
timer0 = Timer(0, mode=Timer.PERIODIC, )
def ypt(ts): def ypt(ts):
# Bolt insertion rate in cm/s: y'(t) # Bolt insertion rate in cm/s: y'(t)
@ -86,8 +86,44 @@ def step_motor():
the step interval based on the current tangent error, the step interval based on the current tangent error,
and sets a new timer. and sets a new timer.
""" """
pass if current_mode == NORMAL:
step_interval_s = 1.0/(ROTATIONS_PER_CM*ypt(total_seconds)*2*DOUBLESTEPS_PER_ROTATION)
step_delta = 1
step_num %= len(STEPPER_SEQUENCE)
return
elif current_mode == REWINDING:
step_interval_s = 0.0025
step_delta = -2
if(step_num<0):
step_num += len(STEPPER_SEQUENCE)
return
elif current_mode == STOPPED:
step_interval_s = 0.2
return
else:
print("we should never be here")
if current_mode != STOPPED:
total_seconds += step_interval_s
current_step = STEPPER_SEQUENCE[step_num]
do_step(current_step)
step_num += step_delta
totalsteps += step_delta
now = time.now()
nxt = now+step_interval_s*CYCLES_PER_SECOND-(now-nxt);
timer = Timer(2)
timer.init(mode=Timer.ONE_SHOT, period=nxt)
def _debounce(pin):
cur_value = pin.value()
active = 0
while active < 20:
if pin.value() != cur_value:
active += 1
else:
active = 0
time.sleep(1.0)
def do_step(current_step): def do_step(current_step):
# apply a single step of the stepper motor on its pins. # apply a single step of the stepper motor on its pins.
@ -133,6 +169,8 @@ def toggle_mode():
# Need to find replacement for ESP.getCycleCount(); # Need to find replacement for ESP.getCycleCount();
#if ESP.getCycleCount() - last_toggle < 0.2*CYCLES_PER_SECOND: #if ESP.getCycleCount() - last_toggle < 0.2*CYCLES_PER_SECOND:
# return # return
_debounce(MODE_PIN)
if current_mode is REWINDING: if current_mode is REWINDING:
print("STOPPING") print("STOPPING")
current_mode = STOPPED current_mode = STOPPED