Buggy bois / Mbed 2 deprecated headache

Dependencies:   mbed

Committer:
mazdo25
Date:
Mon Mar 25 22:42:31 2019 +0000
Revision:
5:f1613df66ceb
Parent:
4:208f5279143a
Child:
6:477382219bcf
LATEST WORKING VERSION;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mazdo25 4:208f5279143a 1 class PID
mazdo25 4:208f5279143a 2 {
mazdo25 4:208f5279143a 3 private:
mazdo25 4:208f5279143a 4 float Kp_, Ki_, Kd_, Ts, PrevErr, PrevPrevErr, prevControlAction, setPoint;
mazdo25 4:208f5279143a 5
mazdo25 5:f1613df66ceb 6 float* inMin_;
mazdo25 5:f1613df66ceb 7 float* inMax_;
mazdo25 4:208f5279143a 8
mazdo25 4:208f5279143a 9 float outMin_;
mazdo25 4:208f5279143a 10 float outMax_;
mazdo25 4:208f5279143a 11
mazdo25 4:208f5279143a 12 public:
mazdo25 4:208f5279143a 13 PID (float Kp, float Ki, float Kd, float sampleTime)
mazdo25 4:208f5279143a 14 {
mazdo25 4:208f5279143a 15 PrevErr = 0;
mazdo25 4:208f5279143a 16 PrevPrevErr = 0;
mazdo25 4:208f5279143a 17 prevControlAction = 0;
mazdo25 4:208f5279143a 18 setPoint = 0;
mazdo25 4:208f5279143a 19
mazdo25 4:208f5279143a 20 outMin_ = -1.0f;
mazdo25 4:208f5279143a 21 outMax_ = 1.0f;
mazdo25 4:208f5279143a 22
mazdo25 4:208f5279143a 23 Ts = sampleTime;
mazdo25 4:208f5279143a 24 Kp_ = Kp;
mazdo25 4:208f5279143a 25 Ki_ = Ki;
mazdo25 4:208f5279143a 26 Kd_ = Kd;
mazdo25 4:208f5279143a 27 }
mazdo25 4:208f5279143a 28
mazdo25 4:208f5279143a 29 float compute (float currVal)
mazdo25 4:208f5279143a 30 {
mazdo25 4:208f5279143a 31 float currErr = setPoint - (currVal);
mazdo25 4:208f5279143a 32 float controlAction;
mazdo25 4:208f5279143a 33
mazdo25 5:f1613df66ceb 34 if (currVal > *inMax_) {*inMax_ = currVal;}
mazdo25 5:f1613df66ceb 35 if (currVal < *inMin_) {*inMin_ = currVal;}
mazdo25 5:f1613df66ceb 36
mazdo25 5:f1613df66ceb 37
mazdo25 4:208f5279143a 38
mazdo25 4:208f5279143a 39 controlAction = prevControlAction - (PrevErr*Kp_) + (Kp_*currErr)+ (Ki_*Ts*currErr) + ((Kd_/Ts)*(currErr - PrevErr - PrevErr + PrevPrevErr));
mazdo25 4:208f5279143a 40
mazdo25 5:f1613df66ceb 41 if (controlAction > *inMax_) {controlAction = *inMax_;}
mazdo25 5:f1613df66ceb 42 if (controlAction < *inMin_) {controlAction = *inMin_;}
mazdo25 4:208f5279143a 43
mazdo25 4:208f5279143a 44 prevControlAction = controlAction;
mazdo25 4:208f5279143a 45 PrevPrevErr = PrevErr;
mazdo25 4:208f5279143a 46 PrevErr = currErr;
mazdo25 4:208f5279143a 47 //scale the control Action to the correct output limits and output
mazdo25 5:f1613df66ceb 48 return ((((controlAction)- *inMin_)/(*inMax_ - *inMin_)) * (outMax_ - outMin_)) + outMin_;
mazdo25 4:208f5279143a 49 }
mazdo25 4:208f5279143a 50
mazdo25 4:208f5279143a 51 void setSetPoint(float _sP)
mazdo25 4:208f5279143a 52 {
mazdo25 4:208f5279143a 53 setPoint = _sP;
mazdo25 4:208f5279143a 54 }
mazdo25 4:208f5279143a 55
mazdo25 4:208f5279143a 56 void setOutputLimits(float outMin,float outMax)
mazdo25 4:208f5279143a 57 {
mazdo25 4:208f5279143a 58 if (outMin > outMax) {return;}
mazdo25 4:208f5279143a 59
mazdo25 4:208f5279143a 60 outMin_ = outMin;
mazdo25 4:208f5279143a 61 outMax_ = outMax;
mazdo25 4:208f5279143a 62 }
mazdo25 4:208f5279143a 63
mazdo25 5:f1613df66ceb 64 void assignLimitAddress(float *inMax, float *inMin)
mazdo25 4:208f5279143a 65 {
mazdo25 5:f1613df66ceb 66 inMax_ = inMax;
mazdo25 4:208f5279143a 67 inMin_ = inMin;
mazdo25 5:f1613df66ceb 68 }
mazdo25 5:f1613df66ceb 69
mazdo25 5:f1613df66ceb 70 float returnInMax()
mazdo25 5:f1613df66ceb 71 {
mazdo25 5:f1613df66ceb 72 return *inMax_;
mazdo25 4:208f5279143a 73 }
mazdo25 4:208f5279143a 74
mazdo25 4:208f5279143a 75 float scaler(float prevMin, float prevMax, float newMin, float newMax, float var)
mazdo25 4:208f5279143a 76 {
mazdo25 4:208f5279143a 77 if (var > prevMax) {var = prevMax;}
mazdo25 4:208f5279143a 78 if (var < prevMin) {var = prevMin;}
mazdo25 4:208f5279143a 79 return (((var-prevMin)/(prevMax - prevMin))*(newMax-newMin))+newMin;
mazdo25 4:208f5279143a 80 }
mazdo25 4:208f5279143a 81
mazdo25 4:208f5279143a 82 float returnPrevCA()
mazdo25 4:208f5279143a 83 {
mazdo25 4:208f5279143a 84 return prevControlAction;
mazdo25 4:208f5279143a 85 }
mazdo25 4:208f5279143a 86
mazdo25 4:208f5279143a 87 };
mazdo25 4:208f5279143a 88
mazdo25 4:208f5279143a 89 //(((temp-inMin)/(inMax - inMin))*(outMax-outMin))+outMin