from greg

Fork of PID by Greg Abdo

Files at this revision

API Documentation at this revision

Comitter:
oprospero
Date:
Wed Oct 15 04:59:05 2014 +0000
Parent:
11:0854d9ff17f8
Commit message:
minor changes

Changed in this revision

PID.cpp Show annotated file Show diff for this revision Revisions of this file
PID.h Show annotated file Show diff for this revision Revisions of this file
--- a/PID.cpp	Mon Jun 09 00:07:12 2014 +0000
+++ b/PID.cpp	Wed Oct 15 04:59:05 2014 +0000
@@ -20,7 +20,7 @@
         proportionalGain(proportionalGain),
         integralGain(integralGain),
         derivativeGain(derivativeGain),
-        windupGainGuard(windupGainGuard)
+        windupGainGuard(windupGainGuard/integralGain)
 {
 //    pc.baud(38400);
     integralError = 0.0f;
@@ -31,14 +31,6 @@
 
 float PID::correct(const float currentError,const int dt)
 {
-//    float currentError = 0;
-//    float proportionalControl, integralControl, derivativeControl;
-
-    // How far away we are from the target
-//    currentError = targetPosition - currentPosition;
-
-    
-
     // Sum of the errors the controller has incurred over time
     integralError += currentError * dt / 1000.0f;
 
@@ -49,17 +41,22 @@
         integralError = windupGainGuard;
     }
     
-
     // Calculate the correction, based on the tuning values
     proportionalControl = proportionalGain * currentError;
     integralControl = integralError * integralGain;
     derivativeControl = derivativeGain * (currentError - previousError) / dt * 1000.0f;
 
-
     // Save current error for next call to correction
     previousError = currentError;
-
-    return proportionalControl + integralControl + derivativeControl;
+    
+    controlTotal = proportionalControl + integralControl + derivativeControl;
+    
+    if (controlTotal > CONTROL_LIMIT)
+        return CONTROL_LIMIT;
+    else if (controlTotal < -CONTROL_LIMIT)
+        return -CONTROL_LIMIT;
+        
+    return controlTotal;
 
 }
 
@@ -71,4 +68,4 @@
 void PID::updateD(const float dGain)
 {
     derivativeGain = dGain;
-}
\ No newline at end of file
+}
--- a/PID.h	Mon Jun 09 00:07:12 2014 +0000
+++ b/PID.h	Wed Oct 15 04:59:05 2014 +0000
@@ -3,6 +3,8 @@
 #ifndef UWBQuad__PID__h
 #define UWBQuad__PID__h
 
+#define CONTROL_LIMIT 250
+
 /**
  * UWB Quadcopter project
  *
@@ -47,6 +49,7 @@
     
     void updateP(const float);
     void updateD(const float);
+    void setControlLimit(const float);
 
 private:
     float proportionalGain;
@@ -58,6 +61,9 @@
     float currentError;
     float previousError;
     float integralError;
+    
+    float controlTotal;
+    
 
 };