Files
ossm_overkill_edition/software/motion_controller/main.py
2024-03-07 03:37:47 -08:00

81 lines
2.4 KiB
Python

import machine
from machine import Pin
from time import sleep
from neopixel import NeoPixel
from motion_controller.accel_stepper import AccelStepper, DRIVER
from utime import ticks_us, sleep_us
"""CL57T(V4.0) Closed-Loop Stepper Driver
10
Figure 10: Sequence chart of control signals
Remark:
a) t1: ENA must be ahead of DIR by at least 200ms. Usually, ENA+ and ENA- are NC (not connected). See
“Connector P1 Configurations” for more information.
b) t2: DIR must be ahead of PUL effective edge by 2us to ensure correct direction;
c) t3: Pulse width not less than 1us;
d) t4: Low level width not less than 1us;
e) Duty cycle of PUL signal is recommended 50%"""
def machine_main():
# machine.freq() # get the current frequency of the CPU
# machine.freq(240000000) # set the CPU frequency to 240 MHz
thrust_step_pin = Pin("D10", Pin.OUT)
thrust_dir_pin = Pin("D9", Pin.OUT)
thrust_step_pin.value(0)
thrust_dir_pin.value(0)
def step():
thrust_step_pin.value(1)
sleep_us(1)
thrust_step_pin.value(0)
def fwd():
thrust_dir_pin.value(1)
sleep_us(2)
step()
def rev():
thrust_dir_pin.value(0)
sleep_us(2)
step()
thrust_axis = AccelStepper(fwd, rev)
thrust_axis_endstop_estop_pin = Pin("D21", Pin.IN, Pin.PULL_UP)
pin = Pin("D6", Pin.OUT) # Pin number for v1 of the above DevKitC, use pin 38 for v1.1
np = NeoPixel(pin, 3) # "1" = one RGB led on the "led bus"
for pixel in range(3):
np[pixel] = (0, 255, 0)
np.write()
thrust_steps_per_revolution = 3200
thrust_max_speed = 20 * thrust_steps_per_revolution
thrust_homing_speed = 8 * thrust_steps_per_revolution
thrust_max_acceleration = 5 * thrust_steps_per_revolution
thrust_axis.set_max_speed(thrust_max_speed)
thrust_axis.set_acceleration(thrust_max_acceleration)
thrust_axis.set_speed(thrust_homing_speed)
thrust_axis.move(-100*thrust_steps_per_revolution)
print("Homing")
while thrust_axis_endstop_estop_pin.value():
thrust_axis.run()
print(f"{thrust_axis.current_position()}:{thrust_axis.target_position()}")
print("Homed")
thrust_axis.set_current_position(0)
thrust_axis.set_max_speed(thrust_max_speed)
thrust_axis.run_to_new_position(200)
for i in range(3):
thrust_axis.run_to_new_position(5000)
thrust_axis.run_to_new_position(200)
machine_main()