for dror

Committer:
noamnahum
Date:
Wed Dec 25 09:00:32 2019 +0000
Revision:
1:b738a8164729
Parent:
0:6e12a3e5af19
code change

Who changed what in which revision?

UserRevisionLine numberNew contents of line
noamnahum 1:b738a8164729 1
aberk 0:6e12a3e5af19 2
aberk 0:6e12a3e5af19 3 #ifndef PID_H
aberk 0:6e12a3e5af19 4 #define PID_H
aberk 0:6e12a3e5af19 5
aberk 0:6e12a3e5af19 6 #include "mbed.h"
aberk 0:6e12a3e5af19 7
aberk 0:6e12a3e5af19 8
aberk 0:6e12a3e5af19 9 class PID {
aberk 0:6e12a3e5af19 10
aberk 0:6e12a3e5af19 11 public:
aberk 0:6e12a3e5af19 12
noamnahum 1:b738a8164729 13
aberk 0:6e12a3e5af19 14 PID(float Kc, float tauI, float tauD, float interval);
aberk 0:6e12a3e5af19 15
aberk 0:6e12a3e5af19 16 /**
aberk 0:6e12a3e5af19 17 * Scale from inputs to 0-100%.
aberk 0:6e12a3e5af19 18 *
aberk 0:6e12a3e5af19 19 * @param InMin The real world value corresponding to 0%.
aberk 0:6e12a3e5af19 20 * @param InMax The real world value corresponding to 100%.
aberk 0:6e12a3e5af19 21 */
aberk 0:6e12a3e5af19 22 void setInputLimits(float inMin , float inMax);
aberk 0:6e12a3e5af19 23
aberk 0:6e12a3e5af19 24 /**
aberk 0:6e12a3e5af19 25 * Scale from outputs to 0-100%.
aberk 0:6e12a3e5af19 26 *
aberk 0:6e12a3e5af19 27 * @param outMin The real world value corresponding to 0%.
aberk 0:6e12a3e5af19 28 * @param outMax The real world value corresponding to 100%.
aberk 0:6e12a3e5af19 29 */
aberk 0:6e12a3e5af19 30 void setOutputLimits(float outMin, float outMax);
aberk 0:6e12a3e5af19 31
aberk 0:6e12a3e5af19 32 /**
aberk 0:6e12a3e5af19 33 * Calculate PID constants.
aberk 0:6e12a3e5af19 34 *
aberk 0:6e12a3e5af19 35 * Allows parameters to be changed on the fly without ruining calculations.
aberk 0:6e12a3e5af19 36 *
aberk 0:6e12a3e5af19 37 * @param Kc - Tuning parameter
aberk 0:6e12a3e5af19 38 * @param tauI - Tuning parameter
aberk 0:6e12a3e5af19 39 * @param tauD - Tuning parameter
aberk 0:6e12a3e5af19 40 */
aberk 0:6e12a3e5af19 41 void setTunings(float Kc, float tauI, float tauD);
aberk 0:6e12a3e5af19 42
aberk 0:6e12a3e5af19 43 /**
aberk 0:6e12a3e5af19 44 * Reinitializes controller internals. Automatically
aberk 0:6e12a3e5af19 45 * called on a manual to auto transition.
aberk 0:6e12a3e5af19 46 */
aberk 0:6e12a3e5af19 47 void reset(void);
aberk 0:6e12a3e5af19 48
aberk 0:6e12a3e5af19 49 /**
aberk 0:6e12a3e5af19 50 * Set PID to manual or auto mode.
aberk 0:6e12a3e5af19 51 *
aberk 0:6e12a3e5af19 52 * @param mode 0 -> Manual
aberk 0:6e12a3e5af19 53 * Non-zero -> Auto
aberk 0:6e12a3e5af19 54 */
aberk 0:6e12a3e5af19 55 void setMode(int mode);
aberk 0:6e12a3e5af19 56
aberk 0:6e12a3e5af19 57 /**
aberk 0:6e12a3e5af19 58 * Set how fast the PID loop is run.
aberk 0:6e12a3e5af19 59 *
aberk 0:6e12a3e5af19 60 * @param interval PID calculation peformed every interval seconds.
aberk 0:6e12a3e5af19 61 */
aberk 0:6e12a3e5af19 62 void setInterval(float interval);
aberk 0:6e12a3e5af19 63
aberk 0:6e12a3e5af19 64 /**
aberk 0:6e12a3e5af19 65 * Set the set point.
aberk 0:6e12a3e5af19 66 *
aberk 0:6e12a3e5af19 67 * @param sp The set point as a real world value.
aberk 0:6e12a3e5af19 68 */
aberk 0:6e12a3e5af19 69 void setSetPoint(float sp);
aberk 0:6e12a3e5af19 70
aberk 0:6e12a3e5af19 71 /**
aberk 0:6e12a3e5af19 72 * Set the process value.
aberk 0:6e12a3e5af19 73 *
aberk 0:6e12a3e5af19 74 * @param pv The process value as a real world value.
aberk 0:6e12a3e5af19 75 */
aberk 0:6e12a3e5af19 76 void setProcessValue(float pv);
aberk 0:6e12a3e5af19 77
aberk 0:6e12a3e5af19 78 /**
aberk 0:6e12a3e5af19 79 * Set the bias.
aberk 0:6e12a3e5af19 80 *
aberk 0:6e12a3e5af19 81 * @param bias The bias for the controller output.
aberk 0:6e12a3e5af19 82 */
aberk 0:6e12a3e5af19 83 void setBias(float bias);
aberk 0:6e12a3e5af19 84
aberk 0:6e12a3e5af19 85 /**
aberk 0:6e12a3e5af19 86 * PID calculation.
aberk 0:6e12a3e5af19 87 *
aberk 0:6e12a3e5af19 88 * @return The controller output as a float between outMin and outMax.
aberk 0:6e12a3e5af19 89 */
aberk 0:6e12a3e5af19 90 float compute(void);
aberk 0:6e12a3e5af19 91
aberk 0:6e12a3e5af19 92 //Getters.
aberk 0:6e12a3e5af19 93 float getInMin();
aberk 0:6e12a3e5af19 94 float getInMax();
aberk 0:6e12a3e5af19 95 float getOutMin();
aberk 0:6e12a3e5af19 96 float getOutMax();
aberk 0:6e12a3e5af19 97 float getInterval();
aberk 0:6e12a3e5af19 98 float getPParam();
aberk 0:6e12a3e5af19 99 float getIParam();
aberk 0:6e12a3e5af19 100 float getDParam();
aberk 0:6e12a3e5af19 101
aberk 0:6e12a3e5af19 102 private:
aberk 0:6e12a3e5af19 103
aberk 0:6e12a3e5af19 104 bool usingFeedForward;
aberk 0:6e12a3e5af19 105 bool inAuto;
aberk 0:6e12a3e5af19 106
aberk 0:6e12a3e5af19 107 //Actual tuning parameters used in PID calculation.
aberk 0:6e12a3e5af19 108 float Kc_;
aberk 0:6e12a3e5af19 109 float tauR_;
aberk 0:6e12a3e5af19 110 float tauD_;
aberk 0:6e12a3e5af19 111
aberk 0:6e12a3e5af19 112 //Raw tuning parameters.
aberk 0:6e12a3e5af19 113 float pParam_;
aberk 0:6e12a3e5af19 114 float iParam_;
aberk 0:6e12a3e5af19 115 float dParam_;
aberk 0:6e12a3e5af19 116
aberk 0:6e12a3e5af19 117 //The point we want to reach.
aberk 0:6e12a3e5af19 118 float setPoint_;
aberk 0:6e12a3e5af19 119 //The thing we measure.
aberk 0:6e12a3e5af19 120 float processVariable_;
aberk 0:6e12a3e5af19 121 float prevProcessVariable_;
aberk 0:6e12a3e5af19 122 //The output that affects the process variable.
aberk 0:6e12a3e5af19 123 float controllerOutput_;
aberk 0:6e12a3e5af19 124 float prevControllerOutput_;
aberk 0:6e12a3e5af19 125
aberk 0:6e12a3e5af19 126 //We work in % for calculations so these will scale from
aberk 0:6e12a3e5af19 127 //real world values to 0-100% and back again.
aberk 0:6e12a3e5af19 128 float inMin_;
aberk 0:6e12a3e5af19 129 float inMax_;
aberk 0:6e12a3e5af19 130 float inSpan_;
aberk 0:6e12a3e5af19 131 float outMin_;
aberk 0:6e12a3e5af19 132 float outMax_;
aberk 0:6e12a3e5af19 133 float outSpan_;
aberk 0:6e12a3e5af19 134
aberk 0:6e12a3e5af19 135 //The accumulated error, i.e. integral.
aberk 0:6e12a3e5af19 136 float accError_;
aberk 0:6e12a3e5af19 137 //The controller output bias.
aberk 0:6e12a3e5af19 138 float bias_;
aberk 0:6e12a3e5af19 139
aberk 0:6e12a3e5af19 140 //The interval between samples.
aberk 0:6e12a3e5af19 141 float tSample_;
aberk 0:6e12a3e5af19 142
aberk 0:6e12a3e5af19 143 //Controller output as a real world value.
aberk 0:6e12a3e5af19 144 volatile float realOutput_;
aberk 0:6e12a3e5af19 145
aberk 0:6e12a3e5af19 146 };
aberk 0:6e12a3e5af19 147
aberk 0:6e12a3e5af19 148 #endif /* PID_H */