PID

Fork of PID by LDSC_Robotics_TAs

Revision:
1:4df4895863cd
Parent:
0:7f9b4ca968ae
Child:
2:f8864ce26cd8
--- a/PID.cpp	Thu Feb 18 04:25:52 2016 +0000
+++ b/PID.cpp	Fri Apr 22 09:38:38 2016 +0000
@@ -13,6 +13,7 @@
     sampletime = 0.0;
     Outputlimit_bool = false;
     Inputlimit_bool = false;
+    AntiWindUp_bool = false;
     outputLimits_H = 0.0;
     outputLimits_L = 0.0;
     inputLimits_H = 0.0;
@@ -20,8 +21,8 @@
     feedbackvalue = 0.0;   
     
     Kp = setKp;
-    Ki = setKi/setSampletime;
-    Kd = setKd*setSampletime;
+    Ki = setKi*setSampletime;
+    Kd = setKd/setSampletime;
     sampletime = setSampletime;   
 }
 
@@ -37,6 +38,12 @@
     inputLimits_L = setinputLimits_L;     
 }
 
+void PID::EnableAntiWindUp(float Ka_)
+{
+    AntiWindUp_bool = true;
+    Ka = Ka_;
+}
+
 void PID::Compute(float setreference, float setfeedbackvalue){
 
     if(Inputlimit_bool == true){
@@ -56,14 +63,18 @@
     error[2] = error[1];
     error[1] = error[0];    
     
-    if(Outputlimit_bool == true){
+    if(Outputlimit_bool == true && AntiWindUp_bool == true){
         if( output >= outputLimits_H){
-            output = outputLimits_H;
+            output = output - (output - outputLimits_H)*Ka;
+            //output = outputLimits_H;
         }else if( output <= outputLimits_L){
-            output = outputLimits_L;
+            output =output - (output - outputLimits_L)*Ka;
+            //output = outputLimits_L;
+            
         }
     }else{
         output = output;
     }
             
-}
\ No newline at end of file
+}
+