diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index b88c0b4..0f699f0 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -100,21 +100,22 @@ class TempController(APid): # Process state state_next = self.state if self.state == States.IDLE: - self.pid_rate.reset() - if diff > THRESH_IDLE_HEAT: + if diff >= THRESH_IDLE_HEAT: state_next = States.HEAT - elif diff > -THRESH_IDLE_HOLD: + self.pid_rate.reset() + elif diff >= -THRESH_IDLE_HOLD: state_next = States.HOLD + self.pid_rate.reset() elif self.state == States.HOLD: - self.pid_rate.reset() - if diff > THRESH_HOLD_HEAT: + if diff >= THRESH_HOLD_HEAT: state_next = States.HEAT - elif diff < -THRESH_HOLD_IDLE: + self.pid_rate.reset() + elif diff <= -THRESH_HOLD_IDLE: state_next = States.IDLE elif self.state == States.HEAT: - if diff < -THRESH_HEAT_IDLE: + if diff <= -THRESH_HEAT_IDLE: state_next = States.IDLE - elif diff < THRESH_HEAT_HOLD: + elif diff <= THRESH_HEAT_HOLD: state_next = States.HOLD self.pid_hold.reset() @@ -126,7 +127,10 @@ class TempController(APid): self.pid_hold.process(theta_err, -self.theta_ist) self.pid_rate.process(heatrate_err, -self.heatrate_ist) - self.y = self.pid_rate.get_y() + if self.state == States.IDLE: + self.y = 0 + else: + self.y = self.pid_rate.get_y() def get_power(self): return self.y diff --git a/components/pid/temp_controller_smith.py b/components/pid/temp_controller_smith.py index 2531b85..533bfe9 100644 --- a/components/pid/temp_controller_smith.py +++ b/components/pid/temp_controller_smith.py @@ -144,12 +144,14 @@ class TempController(APid): self.pid_hold.process(theta_err, -self.theta_ist) self.pid_rate.process(heatrate_err, -self.heatrate_ist) - self.y = self.pid_rate.get_y() + if self.state == States.IDLE: + self.y = 0 + else: + self.y = self.pid_rate.get_y() + self.model.set_power(max(0, 250 + 3500 * self.y)) - self.model.set_power(max(0, 250 + 3500 * self.y)) self.model.process() - def get_power(self): return self.y