Proportional, integral, derivative controller library. Ported from the Arduino PID library by Brett Beauregard.
Dependents: ES_CW2_Starter_MDMA
Fork of PID by
Revision 5:7924828bb40e, committed 2017-03-16
- Comitter:
- david_s95
- Date:
- Thu Mar 16 10:44:54 2017 +0000
- Parent:
- 4:c42880625091
- Commit message:
- Removed unnecessary error checking.
Changed in this revision
PID.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r c42880625091 -r 7924828bb40e PID.cpp --- a/PID.cpp Sat Mar 11 15:58:19 2017 +0000 +++ b/PID.cpp Thu Mar 16 10:44:54 2017 +0000 @@ -58,7 +58,7 @@ //Make sure to set these to more appropriate limits for //your application. setInputLimits(0.0, 200.0); - setOutputLimits(1.0, 300.0); + setOutputLimits(0.1, 200.0); tSample_ = interval; @@ -78,11 +78,12 @@ } void PID::setInputLimits(float inMin, float inMax) { - - //Make sure we haven't been given impossible values. - if (inMin >= inMax) { - return; - } + +//I know we've not given impossible values, so it's unnecessary to check +// //Make sure we haven't been given impossible values. +// if (inMin >= inMax) { +// return; +// } //Rescale the working variables to reflect the changes. prevProcessVariable_ *= (inMax - inMin) / inSpan_; @@ -103,10 +104,11 @@ void PID::setOutputLimits(float outMin, float outMax) { - //Make sure we haven't been given impossible values. - if (outMin >= outMax) { - return; - } +//I know we've not given impossible values, so it's unnecessary to check +// //Make sure we haven't been given impossible values. +// if (outMin >= outMax) { +// return; +// } //Rescale the working variables to reflect the changes. prevControllerOutput_ *= (outMax - outMin) / outSpan_; @@ -126,10 +128,11 @@ void PID::setTunings(float Kc, float tauI, float tauD) { - //Verify that the tunings make sense. - if (Kc == 0.0 || tauI < 0.0 || tauD < 0.0) { - return; - } +//I know we've not given impossible values, so it's unnecessary to check +// //Verify that the tunings make sense. +// if (Kc == 0.0 || tauI < 0.0 || tauD < 0.0) { +// return; +// } //Store raw values to hand back to user on request. pParam_ = Kc; @@ -247,7 +250,7 @@ } //Compute the current slope of the input signal. - float dMeas = (scaledPV - prevProcessVariable_) / tSample_; +// float dMeas = (scaledPV - prevProcessVariable_) / tSample_; float scaledBias = 0.0; @@ -256,7 +259,7 @@ } //Perform the PID calculation. - controllerOutput_ = scaledBias + Kc_ * (error + (tauR_ * accError_) - (tauD_ * dMeas)); + controllerOutput_ = scaledBias + Kc_ * error + (tauR_ * accError_);// - (tauD_ * dMeas)); //Make sure the computed output is within output constraints. if (controllerOutput_ < 0.0) {