aboutsummaryrefslogtreecommitdiffstats
path: root/klippy/extras/tmc2130.py
diff options
context:
space:
mode:
Diffstat (limited to 'klippy/extras/tmc2130.py')
-rw-r--r--klippy/extras/tmc2130.py41
1 files changed, 22 insertions, 19 deletions
diff --git a/klippy/extras/tmc2130.py b/klippy/extras/tmc2130.py
index c6a54561..f2142d26 100644
--- a/klippy/extras/tmc2130.py
+++ b/klippy/extras/tmc2130.py
@@ -116,30 +116,33 @@ class TMCCurrentHelper:
vref = 0.32
if vsense:
vref = 0.18
- cs = int(32. * current * sense_resistor * math.sqrt(2.) / vref
- - 1. + .5)
+ cs = int(32. * sense_resistor * current * math.sqrt(2.) / vref + .5) - 1
return max(0, min(31, cs))
- def _calc_current(self, run_current, hold_current):
- vsense = False
- irun = self._calc_current_bits(run_current, vsense)
- ihold = self._calc_current_bits(min(hold_current, run_current),
- vsense)
- if irun < 16 and ihold < 16:
- vsense = True
- irun = self._calc_current_bits(run_current, vsense)
- ihold = self._calc_current_bits(min(hold_current, run_current),
- vsense)
- return vsense, irun, ihold
- def _calc_current_from_field(self, field_name):
- bits = self.fields.get_field(field_name)
+ def _calc_current_from_bits(self, cs, vsense):
sense_resistor = self.sense_resistor + 0.020
vref = 0.32
- if self.fields.get_field("vsense"):
+ if vsense:
vref = 0.18
- return (bits + 1) * vref / (32 * sense_resistor * math.sqrt(2.))
+ return (cs + 1) * vref / (32. * sense_resistor * math.sqrt(2.))
+ def _calc_current(self, run_current, hold_current):
+ vsense = True
+ irun = self._calc_current_bits(run_current, True)
+ if irun == 31:
+ cur = self._calc_current_from_bits(irun, True)
+ if cur < run_current:
+ irun2 = self._calc_current_bits(run_current, False)
+ cur2 = self._calc_current_from_bits(irun2, False)
+ if abs(run_current - cur2) < abs(run_current - cur):
+ vsense = False
+ irun = irun2
+ ihold = self._calc_current_bits(min(hold_current, run_current), vsense)
+ return vsense, irun, ihold
def get_current(self):
- run_current = self._calc_current_from_field("irun")
- hold_current = self._calc_current_from_field("ihold")
+ irun = self.fields.get_field("irun")
+ ihold = self.fields.get_field("ihold")
+ vsense = self.fields.get_field("vsense")
+ run_current = self._calc_current_from_bits(irun, vsense)
+ hold_current = self._calc_current_from_bits(ihold, vsense)
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