diff options
Diffstat (limited to 'klippy')
-rw-r--r-- | klippy/extras/tmc5160.py | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/klippy/extras/tmc5160.py b/klippy/extras/tmc5160.py index f63d17ee..e0db1434 100644 --- a/klippy/extras/tmc5160.py +++ b/klippy/extras/tmc5160.py @@ -264,19 +264,18 @@ class TMC5160CurrentHelper: above=0., maxval=MAX_CURRENT) self.req_hold_current = hold_current self.sense_resistor = config.getfloat('sense_resistor', 0.075, above=0.) - self._set_globalscaler(run_current) - irun, ihold = self._calc_current(run_current, hold_current) + gscaler, irun, ihold = self._calc_current(run_current, hold_current) + self.fields.set_field("globalscaler", gscaler) self.fields.set_field("ihold", ihold) self.fields.set_field("irun", irun) - def _set_globalscaler(self, current): + def _calc_globalscaler(self, current): globalscaler = int((current * 256. * math.sqrt(2.) * self.sense_resistor / VREF) + .5) globalscaler = max(32, globalscaler) if globalscaler >= 256: globalscaler = 0 - self.fields.set_field("globalscaler", globalscaler) - def _calc_current_bits(self, current): - globalscaler = self.fields.get_field("globalscaler") + return globalscaler + def _calc_current_bits(self, current, globalscaler): if not globalscaler: globalscaler = 256 cs = int((current * 256. * 32. * math.sqrt(2.) * self.sense_resistor) @@ -284,9 +283,10 @@ class TMC5160CurrentHelper: - 1. + .5) return max(0, min(31, cs)) def _calc_current(self, run_current, hold_current): - irun = self._calc_current_bits(run_current) - ihold = self._calc_current_bits(min(hold_current, run_current)) - return irun, ihold + gscaler = self._calc_globalscaler(run_current) + irun = self._calc_current_bits(run_current, gscaler) + ihold = self._calc_current_bits(min(hold_current, run_current), gscaler) + return gscaler, irun, ihold def _calc_current_from_field(self, field_name): globalscaler = self.fields.get_field("globalscaler") if not globalscaler: @@ -300,7 +300,9 @@ class TMC5160CurrentHelper: return run_current, hold_current, self.req_hold_current, MAX_CURRENT def set_current(self, run_current, hold_current, print_time): self.req_hold_current = hold_current - irun, ihold = self._calc_current(run_current, hold_current) + gscaler, irun, ihold = self._calc_current(run_current, hold_current) + val = self.fields.set_field("globalscaler", gscaler) + self.mcu_tmc.set_register("GLOBALSCALER", val, print_time) self.fields.set_field("ihold", ihold) val = self.fields.set_field("irun", irun) self.mcu_tmc.set_register("IHOLD_IRUN", val, print_time) |