]> hydra-www.ietfng.org Git - acmetensortoys-snakecontrol/commitdiff
pidloop: optionally distinguish kP for + and - errors
authorNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sat, 10 Feb 2018 23:50:45 +0000 (18:50 -0500)
committerNathaniel Wesley Filardo <nwfilardo@gmail.com>
Sun, 11 Feb 2018 00:07:51 +0000 (19:07 -0500)
bin/pidloop.py

index 192bcc4edd52ebf1ee01d1948f7751fb090e2636..9e66720f8403341c61a4e34a035ab88c234a5531 100644 (file)
@@ -5,6 +5,7 @@ class PIDLoop(object):
 
     def __init__ (self) :
         self.kP = 0.0
+        self.kPover = None
         self.kI = 0.0
         self.kD = 0.0
         self.kDDecay = 0.0
@@ -26,6 +27,9 @@ class PIDLoop(object):
     def setKP (self, kP) :
         self.kP = kP
 
+    def setKPover (self, kPo) :
+        self.kPover = kPo
+
     def setKD (self, kD, kDDecay) :
         self.kD = kD
         self.kDDecay = kDDecay
@@ -47,7 +51,11 @@ class PIDLoop(object):
 
         # print ("PID LOOP CONTRIBUTIONS: p=%r d=%r i=%r" % (self.kP * error, self.kD * edeltasmooth, self.kI * self.sum_error))
 
-        return (self.kP * error) + (self.kD * edeltasmooth) + (self.kI * self.sum_error)
+        pterm = self.kP * error
+        if (self.kPover is not None) and (error > 0) :
+            pterm = self.kPover * error
+
+        return pterm + (self.kD * edeltasmooth) + (self.kI * self.sum_error)
 
     def update (self, value, when) :
         if self.setpoint is None :