library to perform velocity PID control
Dependents: PID_VelocityExample TheProgram
Fork of PID by
Diff: PID.cpp
- Revision:
- 3:54068e076b84
- Parent:
- 2:690958d56f3e
- Child:
- 4:375947e05a43
- Child:
- 5:15998473cc64
--- a/PID.cpp Tue Oct 06 10:16:40 2015 +0000 +++ b/PID.cpp Tue Oct 06 10:50:31 2015 +0000 @@ -118,7 +118,8 @@ } else if (prevControllerOutput_ < 0) { prevControllerOutput_ = 0; } - + // changed: + prevControllerOutput_ =0; outMin_ = outMin; outMax_ = outMax; outSpan_ = outMax - outMin; @@ -248,13 +249,14 @@ } float error = scaledSP - scaledPV; - + + //Check and see if the output is pegged at a limit and only //integrate if it is not. This is to prevent reset-windup. if (!(prevControllerOutput_ >= 1 && error > 0) && !(prevControllerOutput_ <= 0 && error < 0)) { accError_ += error; } - + //Compute the current slope of the input signal. float dMeas = (scaledPV - prevProcessVariable_) / tSample_; @@ -269,8 +271,7 @@ } //Perform the PID calculation. - controllerOutputSum_ = scaledBias + Kc_ * (error + (tauR_ * accError_) - (tauD_ * dMeas)); - + controllerOutputSum_ = Kc_ * (error + (tauR_ * accError_) - (tauD_ * dMeas)); controllerOutput_ = controllerOutputSum_+prevControllerOutput_; if (controllerOutput_ < scaledDeadzoneTop and controllerOutput_ > scaledDeadzoneBottom){