Buggy bois / Mbed 2 deprecated headache

Dependencies:   mbed

Committer:
UditSrivastav
Date:
Mon Apr 29 09:40:30 2019 +0000
Revision:
13:521d6c6e7042
Parent:
8:5ed6685f6edd
Anythign um

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 8:5ed6685f6edd 31 float currErr = setPoint - currVal;
mazdo25 4:208f5279143a 32 float controlAction;
mazdo25 4:208f5279143a 33
mazdo25 8:5ed6685f6edd 34 //if (currVal > *inMax_) {*inMax_ = currVal; *inMin_ = -1.0f*currVal;}
mazdo25 8:5ed6685f6edd 35 //if (currVal < *inMin_) {*inMin_ = currVal; *inMax_ = -1.0f*currVal;}
mazdo25 8:5ed6685f6edd 36
mazdo25 4:208f5279143a 37 controlAction = prevControlAction - (PrevErr*Kp_) + (Kp_*currErr)+ (Ki_*Ts*currErr) + ((Kd_/Ts)*(currErr - PrevErr - PrevErr + PrevPrevErr));
mazdo25 4:208f5279143a 38
mazdo25 4:208f5279143a 39 prevControlAction = controlAction;
mazdo25 4:208f5279143a 40 PrevPrevErr = PrevErr;
mazdo25 4:208f5279143a 41 PrevErr = currErr;
mazdo25 4:208f5279143a 42 //scale the control Action to the correct output limits and output
mazdo25 6:477382219bcf 43 controlAction = ((((controlAction)- *inMin_)/(*inMax_ - *inMin_)) * (outMax_ - outMin_)) + outMin_;
mazdo25 6:477382219bcf 44
mazdo25 6:477382219bcf 45 if (controlAction > outMax_) {return outMax_;} else if (controlAction < outMin_) {return outMin_;} else {return controlAction;}
mazdo25 6:477382219bcf 46
mazdo25 4:208f5279143a 47 }
mazdo25 4:208f5279143a 48
mazdo25 4:208f5279143a 49 void setSetPoint(float _sP)
mazdo25 4:208f5279143a 50 {
mazdo25 4:208f5279143a 51 setPoint = _sP;
mazdo25 4:208f5279143a 52 }
mazdo25 4:208f5279143a 53
mazdo25 4:208f5279143a 54 void setOutputLimits(float outMin,float outMax)
mazdo25 4:208f5279143a 55 {
mazdo25 4:208f5279143a 56 if (outMin > outMax) {return;}
mazdo25 4:208f5279143a 57
mazdo25 4:208f5279143a 58 outMin_ = outMin;
mazdo25 4:208f5279143a 59 outMax_ = outMax;
mazdo25 4:208f5279143a 60 }
mazdo25 4:208f5279143a 61
mazdo25 5:f1613df66ceb 62 void assignLimitAddress(float *inMax, float *inMin)
mazdo25 4:208f5279143a 63 {
mazdo25 5:f1613df66ceb 64 inMax_ = inMax;
mazdo25 4:208f5279143a 65 inMin_ = inMin;
mazdo25 5:f1613df66ceb 66 }
mazdo25 5:f1613df66ceb 67
mazdo25 5:f1613df66ceb 68 float returnInMax()
mazdo25 5:f1613df66ceb 69 {
mazdo25 5:f1613df66ceb 70 return *inMax_;
mazdo25 4:208f5279143a 71 }
mazdo25 4:208f5279143a 72
mazdo25 4:208f5279143a 73 float scaler(float prevMin, float prevMax, float newMin, float newMax, float var)
mazdo25 4:208f5279143a 74 {
mazdo25 4:208f5279143a 75 if (var > prevMax) {var = prevMax;}
mazdo25 4:208f5279143a 76 if (var < prevMin) {var = prevMin;}
mazdo25 4:208f5279143a 77 return (((var-prevMin)/(prevMax - prevMin))*(newMax-newMin))+newMin;
mazdo25 4:208f5279143a 78 }
mazdo25 4:208f5279143a 79
mazdo25 4:208f5279143a 80 float returnPrevCA()
mazdo25 4:208f5279143a 81 {
mazdo25 4:208f5279143a 82 return prevControlAction;
mazdo25 4:208f5279143a 83 }
mazdo25 4:208f5279143a 84
UditSrivastav 13:521d6c6e7042 85 void reset()
UditSrivastav 13:521d6c6e7042 86 {
UditSrivastav 13:521d6c6e7042 87 prevControlAction = 0;
UditSrivastav 13:521d6c6e7042 88 PrevPrevErr = 0;
UditSrivastav 13:521d6c6e7042 89 PrevErr = 0;
UditSrivastav 13:521d6c6e7042 90 }
UditSrivastav 13:521d6c6e7042 91
mazdo25 4:208f5279143a 92 };
mazdo25 4:208f5279143a 93
mazdo25 4:208f5279143a 94 //(((temp-inMin)/(inMax - inMin))*(outMax-outMin))+outMin