diff options
author | Matt Kohls <mattkohls13@gmail.com> | 2018-06-17 01:38:45 -0400 |
---|---|---|
committer | Matt Kohls <mattkohls13@gmail.com> | 2018-06-17 01:38:45 -0400 |
commit | 60ead3fadb1bac2e79b54be885bf1b3a15674b1e (patch) | |
tree | 6f2984a84548cc09897d14de4aaa2ab5abf62479 /pid.py | |
download | rpi-temp-control-60ead3fadb1bac2e79b54be885bf1b3a15674b1e.tar.gz rpi-temp-control-60ead3fadb1bac2e79b54be885bf1b3a15674b1e.tar.bz2 rpi-temp-control-60ead3fadb1bac2e79b54be885bf1b3a15674b1e.zip |
Intial working version
Diffstat (limited to 'pid.py')
-rw-r--r-- | pid.py | 91 |
1 files changed, 91 insertions, 0 deletions
@@ -0,0 +1,91 @@ +#The recipe gives simple implementation of a Discrete Proportional-Integral-Derivative (PID) controller. PID controller gives output value for error between desired reference input and measurement feedback to minimize error value. +#More information: http://en.wikipedia.org/wiki/PID_controller +# +#cnr437@gmail.com +# +####### Example ######### +# +#p=PID(3.0,0.4,1.2) +#p.setPoint(5.0) +#while True: +# pid = p.update(measurement_value) +# +# + + +class PID: + """ + Discrete PID control + """ + + def __init__(self, P=2.0, I=0.0, D=1.0, Derivator=0, Integrator=0, Integrator_max=500, Integrator_min=-500, Set_Point=0.0): + + self.Kp=P + self.Ki=I + self.Kd=D + self.Derivator=Derivator + self.Integrator=Integrator + self.Integrator_max=Integrator_max + self.Integrator_min=Integrator_min + + self.set_point=Set_Point + self.error=0.0 + + def update(self,current_value): + """ + Calculate PID output value for given reference input and feedback + """ + + self.error = self.set_point - current_value + + self.P_value = self.Kp * self.error + self.D_value = self.Kd * ( self.error - self.Derivator) + self.Derivator = self.error + + self.Integrator = self.Integrator + self.error + + if self.Integrator > self.Integrator_max: + self.Integrator = self.Integrator_max + elif self.Integrator < self.Integrator_min: + self.Integrator = self.Integrator_min + + self.I_value = self.Integrator * self.Ki + + PID = self.P_value + self.I_value + self.D_value + + return PID + + def setPoint(self,set_point): + """ + Initilize the setpoint of PID + """ + self.set_point = set_point + self.Integrator=0 + self.Derivator=0 + + def setIntegrator(self, Integrator): + self.Integrator = Integrator + + def setDerivator(self, Derivator): + self.Derivator = Derivator + + def setKp(self,P): + self.Kp=P + + def setKi(self,I): + self.Ki=I + + def setKd(self,D): + self.Kd=D + + def getPoint(self): + return self.set_point + + def getError(self): + return self.error + + def getIntegrator(self): + return self.Integrator + + def getDerivator(self): + return self.Derivator |