[Sensor] - replace TempSensorSim's hardcoded k_noise with configurable temp_offset/variance, accept **kwargs on Max31865 too so both sensors share a constructor signature usable from TempSensorFactory.create() [Temp Controller] - low-pass filter the backward-difference heat-rate estimate (alpha=0.1) in both temp_controller.py and temp_controller_smith.py instead of using the raw, noisy derivative [Pot] - drop kn from demo_pot.py's params, matching the unused-field removal already made to pot.py itself Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
31 lines
954 B
Python
31 lines
954 B
Python
from components.pid.temp_controller_base import TempControllerBase
|
|
|
|
|
|
class TempController(TempControllerBase):
|
|
def __init__(self, dt, params):
|
|
TempControllerBase.__init__(self, dt, params)
|
|
self.dt = dt
|
|
self.last_theta_ist = 20
|
|
self.heatrate_ist = 0
|
|
|
|
def process(self):
|
|
# Process Kalman
|
|
self.theta_ist = self.theta_ist_set
|
|
heatrate = (self.theta_ist - self.last_theta_ist)/self.dt*60
|
|
|
|
alpha = 0.1
|
|
self.heatrate_ist = (1-alpha) * self.heatrate_ist + alpha*heatrate
|
|
self.last_theta_ist = self.theta_ist
|
|
|
|
# Compensate for max heat rate to reduce overshoot
|
|
if self.heatrate_soll_set > 0:
|
|
self.pid_hold.scale(1.0/self.heatrate_soll_set)
|
|
|
|
self.heatrate_soll = self.heatrate_soll_set * self.pid_hold.get_y()
|
|
theta_err = self.theta_soll_set - self.theta_ist
|
|
heatrate_err = self.heatrate_soll - self.heatrate_ist
|
|
|
|
diff = self.theta_soll_set - self.theta_ist
|
|
self.process_fsm(diff)
|
|
self.process_pid(theta_err, heatrate_err)
|