more robust calculation for heater resistivity

and check is is in the allowed range 10 .. 100 Ohm

Change-Id: If485480c0974d953165c37f7354dc2818f68b30b
This commit is contained in:
zolliker 2023-12-15 16:00:26 +01:00
parent 416cdd5a88
commit 9e6699dd1e

View File

@ -294,6 +294,7 @@ class HeaterOutput(HasInput, Writable):
volt = 0.0 # target voltage
_last_target = None
_volt_target = None
_resistivity = 10
def read_limit(self):
return self.query('DEV::HTR:VLIM') ** 2 / self.resistivity
@ -329,10 +330,15 @@ class HeaterOutput(HasInput, Writable):
res = volt / current
tol = res * max(max(0.0003, abs(volt - self._volt_target)) / volt, 0.0001 / current, 0.0001)
if abs(res - self.resistivity) > tol + 0.07 and self._last_target:
self.write_resistivity(round(res, 1))
if self.controlled_by == 0:
self._volt_target = math.sqrt(self._last_target * self.resistivity)
self.change('DEV::HTR:SIG:VOLT', self._volt_target, tolerance=2e-4)
res = round(res, 1)
if self._resistivity != res and 10 <= res <= 100:
# we want twice the same value before changing
self._resistivity = res
else:
self.write_resistivity(res)
if self.controlled_by == 0:
self._volt_target = math.sqrt(self._last_target * self.resistivity)
self.change('DEV::HTR:SIG:VOLT', self._volt_target, tolerance=2e-4)
return volt * current
def read_target(self):