tmc: Implement TMCtstepHelper
Implement a helper for calculating velocity based thresholds for tmc drivers. This code was written in such a way that it can be used with more fields than just tpwmthrs. Signed-off-by: Alex Voinea <voinea.dragos.alexandru@gmail.com>
This commit is contained in:
parent
c54d83c9f1
commit
0469710a69
|
@ -538,20 +538,33 @@ def TMCMicrostepHelper(config, mcu_tmc):
|
||||||
fields.set_field("mres", mres)
|
fields.set_field("mres", mres)
|
||||||
fields.set_field("intpol", config.getboolean("interpolate", True))
|
fields.set_field("intpol", config.getboolean("interpolate", True))
|
||||||
|
|
||||||
# Helper to configure "stealthchop" mode
|
# Helper for calculating TSTEP based values from velocity
|
||||||
|
def TMCtstepHelper(step_dist, mres, tmc_freq, velocity):
|
||||||
|
if velocity > 0.:
|
||||||
|
step_dist_256 = step_dist / (1 << mres)
|
||||||
|
threshold = int(tmc_freq * step_dist_256 / velocity + .5)
|
||||||
|
return max(0, min(0xfffff, threshold))
|
||||||
|
else:
|
||||||
|
return 0xfffff
|
||||||
|
|
||||||
|
# Helper to configure stealthChop-spreadCycle transition velocity
|
||||||
def TMCStealthchopHelper(config, mcu_tmc, tmc_freq):
|
def TMCStealthchopHelper(config, mcu_tmc, tmc_freq):
|
||||||
fields = mcu_tmc.get_fields()
|
fields = mcu_tmc.get_fields()
|
||||||
en_pwm_mode = False
|
en_pwm_mode = False
|
||||||
velocity = config.getfloat('stealthchop_threshold', 0., minval=0.)
|
velocity = config.getfloat('stealthchop_threshold', None, minval=0.)
|
||||||
if velocity:
|
tpwmthrs = 0xfffff
|
||||||
|
|
||||||
|
if velocity is not None:
|
||||||
|
en_pwm_mode = True
|
||||||
|
|
||||||
stepper_name = " ".join(config.get_name().split()[1:])
|
stepper_name = " ".join(config.get_name().split()[1:])
|
||||||
sconfig = config.getsection(stepper_name)
|
sconfig = config.getsection(stepper_name)
|
||||||
rotation_dist, steps_per_rotation = stepper.parse_step_distance(sconfig)
|
rotation_dist, steps_per_rotation = stepper.parse_step_distance(sconfig)
|
||||||
step_dist = rotation_dist / steps_per_rotation
|
step_dist = rotation_dist / steps_per_rotation
|
||||||
step_dist_256 = step_dist / (1 << fields.get_field("mres"))
|
mres = fields.get_field("mres")
|
||||||
threshold = int(tmc_freq * step_dist_256 / velocity + .5)
|
tpwmthrs = TMCtstepHelper(step_dist, mres, tmc_freq, velocity)
|
||||||
fields.set_field("tpwmthrs", max(0, min(0xfffff, threshold)))
|
fields.set_field("tpwmthrs", tpwmthrs)
|
||||||
en_pwm_mode = True
|
|
||||||
reg = fields.lookup_register("en_pwm_mode", None)
|
reg = fields.lookup_register("en_pwm_mode", None)
|
||||||
if reg is not None:
|
if reg is not None:
|
||||||
fields.set_field("en_pwm_mode", en_pwm_mode)
|
fields.set_field("en_pwm_mode", en_pwm_mode)
|
||||||
|
|
Loading…
Reference in New Issue