Fork of PID by
Diff: PID.cpp
- Revision:
- 2:0fff4827f3b6
- Parent:
- 1:0ffb635770b3
- Child:
- 3:7f0ed54318df
diff -r 0ffb635770b3 -r 0fff4827f3b6 PID.cpp --- a/PID.cpp Thu Nov 03 17:15:10 2016 +0000 +++ b/PID.cpp Sun Nov 06 18:07:12 2016 +0000 @@ -1,6 +1,11 @@ #include "PID.h" -PID::PID(float Kc, float tauI, float tauD, float interval) { + +float Stand_Kc=120.0;float Stand_tauI=0.004;float Stand_tauD=0.0007; +float Speed_Kc=0.0;float Speed_tauI=0.0;float Speed_tauD=0.0; +//PID::PID(float Kc, float tauI, float tauD, float interval) +PID::PID(float interval) +{ usingFeedForward = false; inAuto = false; @@ -10,8 +15,11 @@ tSample_ = interval; - setTunings(Kc, tauI, tauD); - + // setTunings(float Kc,float tauI,float tauD); +/*****************after modifying**********************/ + setStandTunings(Stand_Kc,Stand_tauI,Stand_tauD); + // setSpeedTunings(Speed_Kc,Speed_tauI,Speed_tauD); +/******************************************************/ setPoint_ = 0.0; processVariable_ = 0.0; prevProcessVariable_ = 0.0; @@ -71,8 +79,8 @@ } -void PID::setTunings(float Kc, float tauI, float tauD) { - +//void PID::setTunings(float Kc, float tauI, float tauD) { +void PID::setStandTunings(float Kc,float tauI,float tauD){ //Verify that the tunings make sense. if (Kc == 0.0 || tauI < 0.0 || tauD < 0.0) { return; @@ -105,7 +113,15 @@ tauD_ = tauD / tSample_; } +//setSpeedTunings(SpeedKc,SpeedtauI,SpeedtauD) +/*void setSpeedTunings(float Kc,float tauI,float tauD) +{ +Speed_Kc_ = Kc; + //Speed_tauI_ = tauI; + +} +*/ void PID::reset(void) { float scaledBias = 0.0; @@ -207,7 +223,7 @@ //Make sure the computed output is within output constraints. if (controllerOutput_ < 0.0) { - controllerOutput_ = 0.0; + controllerOutput_ = 0.0; } else if (controllerOutput_ > 1.0) { controllerOutput_ = 1.0; } @@ -221,7 +237,14 @@ return ((controllerOutput_ * outSpan_) + outMin_); } - +float PID::Speedcompute(double Stepper,double Target) +{ + static double Bias,PWM,Last_bias; + Bias=Stepper-Target; + PWM+=Speed_Kc*(Bias-Last_bias)+Speed_tauI*Bias; + Last_bias=Bias; + return PWM; +} float PID::getInMin() { return inMin_;