pid_calibrate: Update the heater's target temperature during calibration

Update the target temperature during the pid calibration.  This gives
additional feedback to the user and it makes it less likely that a
verify_heater error will be raised during calibration.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2018-06-27 14:39:20 -04:00
parent 7e497af184
commit 4889e8241d
2 changed files with 10 additions and 4 deletions

View File

@ -24,7 +24,7 @@ class PIDCalibrate:
except self.printer.config_error as e:
raise self.gcode.error(str(e))
print_time = self.printer.lookup_object('toolhead').get_last_move_time()
calibrate = ControlAutoTune(heater)
calibrate = ControlAutoTune(heater, target)
old_control = heater.set_control(calibrate)
try:
heater.set_temp(print_time, target)
@ -45,9 +45,10 @@ class PIDCalibrate:
TUNE_PID_DELTA = 5.0
class ControlAutoTune:
def __init__(self, heater):
def __init__(self, heater, target):
self.heater = heater
self.heater_max_power = heater.get_max_power()
self.calibrate_temp = target
# Heating control
self.heating = False
self.peak = 0.
@ -70,10 +71,11 @@ class ControlAutoTune:
if self.heating and temp >= target_temp:
self.heating = False
self.check_peaks()
elif (not self.heating
and temp <= target_temp - TUNE_PID_DELTA):
self.heater.alter_target(self.calibrate_temp - TUNE_PID_DELTA)
elif not self.heating and temp <= target_temp:
self.heating = True
self.check_peaks()
self.heater.alter_target(self.calibrate_temp)
if self.heating:
self.set_pwm(read_time, self.heater_max_power)
if temp < self.peak:

View File

@ -105,6 +105,10 @@ class Heater:
self.control = control
self.target_temp = 0.
return old_control
def alter_target(self, target_temp):
if target_temp:
target_temp = max(self.min_temp, min(self.max_temp, target_temp))
self.target_temp = target_temp
def stats(self, eventtime):
with self.lock:
target_temp = self.target_temp