From 3d538d898da14e3ee5acaf404eea133bcd4dc588 Mon Sep 17 00:00:00 2001 From: Nathaniel Wesley Filardo Date: Sat, 10 Feb 2018 18:50:45 -0500 Subject: [PATCH] pidloop: optionally distinguish kP for + and - errors --- bin/pidloop.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bin/pidloop.py b/bin/pidloop.py index 192bcc4..9e66720 100644 --- a/bin/pidloop.py +++ b/bin/pidloop.py @@ -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 : -- 2.50.1