diff --git a/brewpi/brewpi.py b/brewpi/brewpi.py index 3b13d53..3a829d6 100755 --- a/brewpi/brewpi.py +++ b/brewpi/brewpi.py @@ -31,7 +31,7 @@ if __name__ == '__main__': DT_TASK_TRACER = DT_TASK / DT # Sensor - sensor = TempSensorFactory.create(config['Controller']['sensor_name'], temp_offset=-0.15) + sensor = TempSensorFactory.create(config['Controller']['sensor_name'], temp_offset=-0.15, variance=0.01) sensor_task = TempSensorTask(sensor, DT_TASK, dispatcher.msgio_get("Sensor")) taskmgr.add(sensor_task) diff --git a/components/pid/temp_controller.py b/components/pid/temp_controller.py index 3f50315..3eda9c5 100644 --- a/components/pid/temp_controller.py +++ b/components/pid/temp_controller.py @@ -7,11 +7,14 @@ class TempController(TempControllerBase): 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 - self.heatrate_ist = heatrate + + 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 diff --git a/components/pid/temp_controller_smith.py b/components/pid/temp_controller_smith.py index 4576c35..3316c1e 100755 --- a/components/pid/temp_controller_smith.py +++ b/components/pid/temp_controller_smith.py @@ -45,7 +45,9 @@ class TempController(TempControllerBase): self.theta_ist = self.theta_ist_model + (self.theta_ist_plant - self.theta_ist_model_delay) heatrate = (self.theta_ist - self.last_theta_ist)/self.dt*60 - self.heatrate_ist = heatrate + + 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 diff --git a/components/sensor/tempSensorSim.py b/components/sensor/tempSensorSim.py index f7f6ff3..961d70c 100644 --- a/components/sensor/tempSensorSim.py +++ b/components/sensor/tempSensorSim.py @@ -6,13 +6,14 @@ class TempSensorSim(ATemperatureSensor): def name(self): return "FakeTemp" - def __init__(self, *args, **kwargs): + def __init__(self, temp_offset=0.0, variance=0.0, **kwargs): ATemperatureSensor.__init__(self) self.temp_set = 19.99 - self.k_noise = 0.01 + self.offset = temp_offset + self.variance = variance def set_fake_temp(self, temp): self.temp_set = temp def temperature(self): - return self.temp_set + self.k_noise * np.random.normal(0, 1) / np.sqrt(12.0) + return self.temp_set + self.offset+ self.variance * np.random.normal(0, 1) / np.sqrt(12.0) diff --git a/components/sensor/tempSensor_max31865.py b/components/sensor/tempSensor_max31865.py index b3276de..ae64f10 100755 --- a/components/sensor/tempSensor_max31865.py +++ b/components/sensor/tempSensor_max31865.py @@ -8,7 +8,7 @@ class TempSensor_max31865(ATemperatureSensor): def name(self): return "Max31865" - def __init__(self, temp_offset=0): + def __init__(self, temp_offset=0, **kwargs): ATemperatureSensor.__init__(self) # Open SPI bus self.spi = spidev.SpiDev() diff --git a/scripts/demos/plant/demo_pot.py b/scripts/demos/plant/demo_pot.py index 21ee5a3..181d5be 100644 --- a/scripts/demos/plant/demo_pot.py +++ b/scripts/demos/plant/demo_pot.py @@ -15,7 +15,6 @@ if __name__ == '__main__': "M" : 20, "L" : 0.4, "Td" : 30, - "kn" : 0.2, "gain" : 1.0 }