From b7df7197edae966ef54b853577066f430e488845 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Fri, 26 Apr 2019 16:09:07 +0000 Subject: [PATCH] - update template - simplified pid - pant cycle time 30 s git-svn-id: http://moon:8086/svn/projects/HendiControl@272 fda53097-d464-4ada-af97-ba876c37ca34 --- Control/brewpi/brewpi.json.templ | 12 ++++++------ Control/brewpi/pid.py | 32 +++++++------------------------- Control/brewpi/plant.py | 2 +- 3 files changed, 14 insertions(+), 32 deletions(-) diff --git a/Control/brewpi/brewpi.json.templ b/Control/brewpi/brewpi.json.templ index 266ff00..f1faa76 100644 --- a/Control/brewpi/brewpi.json.templ +++ b/Control/brewpi/brewpi.json.templ @@ -12,24 +12,24 @@ "kalman" : { "dt" : 1.0, "var_P" : 0, - "var_Q" : 0.0001, + "var_Q" : 0.00001, "var_R" : 1, "var_Z" : 0.0 }, "Hold" : { "Pid" : { - "kp" : 0.0002, - "ki" : 0.0000004, + "kp" : 0.1, + "ki" : 0.001, "kd" : 0.0, "rho" : 1.0 } }, "Heat" : { "Pid" : { - "kp" : 0.0006, - "ki" : 0.0, + "kp" : 0.001, + "ki" : 0.0004, "kd" : 0.0, - "rho" : 0.0 + "rho" : 1.0 } } }, diff --git a/Control/brewpi/pid.py b/Control/brewpi/pid.py index f5500c9..5df85d2 100644 --- a/Control/brewpi/pid.py +++ b/Control/brewpi/pid.py @@ -1,4 +1,4 @@ -import numpy as np; +import numpy as np class Pid(): @@ -11,12 +11,10 @@ class Pid(): # Auto windup self.y_min = 0.0 - self.y_max = 2.0 - self.diff_aw = 0.0 + self.y_max = 1.0 # Output self.y = 0 - self.yc = 0 @staticmethod def params(kp, ki, kd, rho): @@ -26,42 +24,26 @@ class Pid(): def reset(self): self.yi = 0 self.xd = 0 - self.diff_aw = 0.0 - def process(self, dt, params, err, derr=None): + def process(self, dt, params, err): kp = params['kp'] ki = params['ki'] kd = params['kd'] rho = params['rho'] - err_aw = err + self.diff_aw - yi = rho*self.yi + ki*dt * err_aw - - if derr: - yd = derr - else: - yd = err - self.xd + yi = rho*self.yi + ki*dt * err + yd = err - self.xd _yp = kp * err _yi = yi _yd = kd/dt * yd - self.y = _yp + _yi + _yd + y = _yp + _yi + _yd - yaw = yi - if yaw < self.y_min: - self.diff_aw = abs(yaw - self.y_min) - - if yaw > self.y_max: - self.diff_aw = -abs(yaw - self.y_max) - - self.yc = max(self.y_min, min(self.y_max, self.y)) + self.y = max(self.y_min, min(self.y_max, y)) self.yi = yi self.xd = err def get_y(self): return self.y - - def get_yc(self): - return self.yc diff --git a/Control/brewpi/plant.py b/Control/brewpi/plant.py index 39db9cd..c7d7b16 100644 --- a/Control/brewpi/plant.py +++ b/Control/brewpi/plant.py @@ -11,7 +11,7 @@ class Plant(APlant): self.tempsensor = Max31865() self.P = 0 self.isOn = False - self.cycleTime = 10 + self.cycleTime = 30 self.dutyCycle = 1 self.cycleCounter = 0