tmc2130: Add set_current()/get_current() helper functions to TMCCurrentHelper

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2021-02-20 13:30:26 -05:00
parent 0bdee6bc04
commit 9c9f78037b
1 changed files with 24 additions and 20 deletions

View File

@ -137,26 +137,12 @@ class TMCCurrentHelper:
vref = 0.32
if self.fields.get_field("vsense"):
vref = 0.18
current = (bits + 1) * vref / (32 * sense_resistor * math.sqrt(2.))
return round(current, 2)
cmd_SET_TMC_CURRENT_help = "Set the current of a TMC driver"
def cmd_SET_TMC_CURRENT(self, gcmd):
run_current = gcmd.get_float('CURRENT', None,
minval=0., maxval=MAX_CURRENT)
hold_current = gcmd.get_float('HOLDCURRENT', None,
above=0., maxval=MAX_CURRENT)
if run_current is None and hold_current is None:
# Query only
return (bits + 1) * vref / (32 * sense_resistor * math.sqrt(2.))
def get_current(self):
run_current = self._calc_current_from_field("IRUN")
hold_current = self._calc_current_from_field("IHOLD")
gcmd.respond_info("Run Current: %0.2fA Hold Current: %0.2fA"
% (run_current, hold_current))
return
if run_current is None:
run_current = self._calc_current_from_field("IRUN")
if hold_current is None:
hold_current = self._calc_current_from_field("IHOLD")
print_time = self.printer.lookup_object('toolhead').get_last_move_time()
return run_current, hold_current, MAX_CURRENT
def set_current(self, run_current, hold_current, print_time):
vsense, irun, ihold = self._calc_current(run_current, hold_current)
if vsense != self.fields.get_field("vsense"):
val = self.fields.set_field("vsense", vsense)
@ -164,6 +150,24 @@ class TMCCurrentHelper:
self.fields.set_field("IHOLD", ihold)
val = self.fields.set_field("IRUN", irun)
self.mcu_tmc.set_register("IHOLD_IRUN", val, print_time)
cmd_SET_TMC_CURRENT_help = "Set the current of a TMC driver"
def cmd_SET_TMC_CURRENT(self, gcmd):
prev_run_current, prev_hold_current, max_current = self.get_current()
run_current = gcmd.get_float('CURRENT', None,
minval=0., maxval=max_current)
hold_current = gcmd.get_float('HOLDCURRENT', None,
above=0., maxval=max_current)
if run_current is None and hold_current is None:
# Query only
gcmd.respond_info("Run Current: %0.2fA Hold Current: %0.2fA"
% (prev_run_current, prev_hold_current))
return
if run_current is None:
run_current = prev_run_current
if hold_current is None:
hold_current = prev_hold_current
print_time = self.printer.lookup_object('toolhead').get_last_move_time()
self.set_current(run_current, hold_current, print_time)
######################################################################