Simple PID

Committer:
williampeers
Date:
Mon Jul 31 04:01:31 2017 +0000
Revision:
0:3ce55a50a6b3
Denver version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
williampeers 0:3ce55a50a6b3 1 //*********************************************************************************
williampeers 0:3ce55a50a6b3 2 // Arduino PID Library Version 1.0.1 Modified Version for C++
williampeers 0:3ce55a50a6b3 3 // Platform Independent
williampeers 0:3ce55a50a6b3 4 //
williampeers 0:3ce55a50a6b3 5 // Revision: 1.1
williampeers 0:3ce55a50a6b3 6 //
williampeers 0:3ce55a50a6b3 7 // Description: The PID Controller module originally meant for Arduino made
williampeers 0:3ce55a50a6b3 8 // platform independent. Some small bugs present in the original Arduino source
williampeers 0:3ce55a50a6b3 9 // have been rectified as well.
williampeers 0:3ce55a50a6b3 10 //
williampeers 0:3ce55a50a6b3 11 // For a detailed explanation of the theory behind this library, go to:
williampeers 0:3ce55a50a6b3 12 // http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/
williampeers 0:3ce55a50a6b3 13 //
williampeers 0:3ce55a50a6b3 14 // Revisions can be found here:
williampeers 0:3ce55a50a6b3 15 // https://github.com/tcleg
williampeers 0:3ce55a50a6b3 16 //
williampeers 0:3ce55a50a6b3 17 // Modified by: Trent Cleghorn , <trentoncleghorn@gmail.com>
williampeers 0:3ce55a50a6b3 18 //
williampeers 0:3ce55a50a6b3 19 // Copyright (C) Brett Beauregard , <br3ttb@gmail.com>
williampeers 0:3ce55a50a6b3 20 //
williampeers 0:3ce55a50a6b3 21 // GPLv3 License
williampeers 0:3ce55a50a6b3 22 //
williampeers 0:3ce55a50a6b3 23 // This program is free software: you can redistribute it and/or modify it under
williampeers 0:3ce55a50a6b3 24 // the terms of the GNU General Public License as published by the Free Software
williampeers 0:3ce55a50a6b3 25 // Foundation, either version 3 of the License, or (at your option) any later
williampeers 0:3ce55a50a6b3 26 // version.
williampeers 0:3ce55a50a6b3 27 //
williampeers 0:3ce55a50a6b3 28 // This program is distributed in the hope that it will be useful, but WITHOUT ANY
williampeers 0:3ce55a50a6b3 29 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
williampeers 0:3ce55a50a6b3 30 // PARTICULAR PURPOSE. See the GNU General Public License for more details.
williampeers 0:3ce55a50a6b3 31 //
williampeers 0:3ce55a50a6b3 32 // You should have received a copy of the GNU General Public License along with
williampeers 0:3ce55a50a6b3 33 // this program. If not, see <http://www.gnu.org/licenses/>.
williampeers 0:3ce55a50a6b3 34 //*********************************************************************************
williampeers 0:3ce55a50a6b3 35
williampeers 0:3ce55a50a6b3 36 //
williampeers 0:3ce55a50a6b3 37 // Header Guard
williampeers 0:3ce55a50a6b3 38 //
williampeers 0:3ce55a50a6b3 39 #ifndef PID_CONTROLLER_H
williampeers 0:3ce55a50a6b3 40 #define PID_CONTROLLER_H
williampeers 0:3ce55a50a6b3 41
williampeers 0:3ce55a50a6b3 42 //*********************************************************************************
williampeers 0:3ce55a50a6b3 43 // Headers
williampeers 0:3ce55a50a6b3 44 //*********************************************************************************
williampeers 0:3ce55a50a6b3 45 #include <stdint.h>
williampeers 0:3ce55a50a6b3 46 #include <stdbool.h>
williampeers 0:3ce55a50a6b3 47
williampeers 0:3ce55a50a6b3 48 //*********************************************************************************
williampeers 0:3ce55a50a6b3 49 // Macros and Globals
williampeers 0:3ce55a50a6b3 50 //*********************************************************************************
williampeers 0:3ce55a50a6b3 51
williampeers 0:3ce55a50a6b3 52 typedef enum
williampeers 0:3ce55a50a6b3 53 {
williampeers 0:3ce55a50a6b3 54 MANUAL,
williampeers 0:3ce55a50a6b3 55 AUTOMATIC
williampeers 0:3ce55a50a6b3 56 }
williampeers 0:3ce55a50a6b3 57 PIDMode;
williampeers 0:3ce55a50a6b3 58
williampeers 0:3ce55a50a6b3 59 typedef enum
williampeers 0:3ce55a50a6b3 60 {
williampeers 0:3ce55a50a6b3 61 DIRECT,
williampeers 0:3ce55a50a6b3 62 REVERSE
williampeers 0:3ce55a50a6b3 63 }
williampeers 0:3ce55a50a6b3 64 PIDDirection;
williampeers 0:3ce55a50a6b3 65
williampeers 0:3ce55a50a6b3 66 //*********************************************************************************
williampeers 0:3ce55a50a6b3 67 // Class
williampeers 0:3ce55a50a6b3 68 //*********************************************************************************
williampeers 0:3ce55a50a6b3 69
williampeers 0:3ce55a50a6b3 70 class
williampeers 0:3ce55a50a6b3 71 PIDControl
williampeers 0:3ce55a50a6b3 72 {
williampeers 0:3ce55a50a6b3 73 public:
williampeers 0:3ce55a50a6b3 74 //
williampeers 0:3ce55a50a6b3 75 // Constructor
williampeers 0:3ce55a50a6b3 76 // Description:
williampeers 0:3ce55a50a6b3 77 // Initializes the PIDControl instantiation. This should be called at
williampeers 0:3ce55a50a6b3 78 // least once before any other PID functions are called on the
williampeers 0:3ce55a50a6b3 79 // instantiation.
williampeers 0:3ce55a50a6b3 80 // Parameters:
williampeers 0:3ce55a50a6b3 81 // kp - Positive P gain constant value.
williampeers 0:3ce55a50a6b3 82 // ki - Positive I gain constant value.
williampeers 0:3ce55a50a6b3 83 // kd - Positive D gain constant value.
williampeers 0:3ce55a50a6b3 84 // sampleTimeSeconds - Interval in seconds on which PIDCompute will be
williampeers 0:3ce55a50a6b3 85 // called.
williampeers 0:3ce55a50a6b3 86 // minOutput - Constrain PID output to this minimum value.
williampeers 0:3ce55a50a6b3 87 // maxOutput - Constrain PID output to this maximum value.
williampeers 0:3ce55a50a6b3 88 // mode - Tells how the controller should respond if the user has
williampeers 0:3ce55a50a6b3 89 // taken over manual control or not.
williampeers 0:3ce55a50a6b3 90 // MANUAL: PID controller is off. User can manually control the
williampeers 0:3ce55a50a6b3 91 // output.
williampeers 0:3ce55a50a6b3 92 // AUTOMATIC: PID controller is on. PID controller controls the
williampeers 0:3ce55a50a6b3 93 // output.
williampeers 0:3ce55a50a6b3 94 // controllerDirection - The sense of direction of the controller
williampeers 0:3ce55a50a6b3 95 // DIRECT: A positive setpoint gives a positive output.
williampeers 0:3ce55a50a6b3 96 // REVERSE: A positive setpoint gives a negative output.
williampeers 0:3ce55a50a6b3 97 // Returns:
williampeers 0:3ce55a50a6b3 98 // Nothing.
williampeers 0:3ce55a50a6b3 99 //
williampeers 0:3ce55a50a6b3 100 PIDControl(float kp, float ki, float kd, float sampleTimeSeconds,
williampeers 0:3ce55a50a6b3 101 float minOutput, float maxOutput, PIDMode mode,
williampeers 0:3ce55a50a6b3 102 PIDDirection controllerDirection);
williampeers 0:3ce55a50a6b3 103
williampeers 0:3ce55a50a6b3 104 //
williampeers 0:3ce55a50a6b3 105 // PID Compute
williampeers 0:3ce55a50a6b3 106 // Description:
williampeers 0:3ce55a50a6b3 107 // Should be called on a regular interval defined by sampleTimeSeconds.
williampeers 0:3ce55a50a6b3 108 // Typically, PIDSetpointSet and PIDInputSet should be called
williampeers 0:3ce55a50a6b3 109 // immediately before PIDCompute.
williampeers 0:3ce55a50a6b3 110 // Parameters:
williampeers 0:3ce55a50a6b3 111 // None.
williampeers 0:3ce55a50a6b3 112 // Returns:
williampeers 0:3ce55a50a6b3 113 // True if in AUTOMATIC. False if in MANUAL.
williampeers 0:3ce55a50a6b3 114 //
williampeers 0:3ce55a50a6b3 115 bool PIDCompute();
williampeers 0:3ce55a50a6b3 116
williampeers 0:3ce55a50a6b3 117 //
williampeers 0:3ce55a50a6b3 118 // PID Mode Set
williampeers 0:3ce55a50a6b3 119 // Description:
williampeers 0:3ce55a50a6b3 120 // Sets the PID controller to a new mode. Tells how the controller
williampeers 0:3ce55a50a6b3 121 // should respond if the user has taken over manual control or not.
williampeers 0:3ce55a50a6b3 122 // Parameters:
williampeers 0:3ce55a50a6b3 123 // mode -
williampeers 0:3ce55a50a6b3 124 // MANUAL: PID controller is off. User can manually control the
williampeers 0:3ce55a50a6b3 125 // output.
williampeers 0:3ce55a50a6b3 126 // AUTOMATIC: PID controller is on. PID controller controls the
williampeers 0:3ce55a50a6b3 127 // output.
williampeers 0:3ce55a50a6b3 128 // Returns:
williampeers 0:3ce55a50a6b3 129 // Nothing.
williampeers 0:3ce55a50a6b3 130 //
williampeers 0:3ce55a50a6b3 131 void PIDModeSet(PIDMode mode);
williampeers 0:3ce55a50a6b3 132
williampeers 0:3ce55a50a6b3 133 //
williampeers 0:3ce55a50a6b3 134 // PID Output Limits Set
williampeers 0:3ce55a50a6b3 135 // Description:
williampeers 0:3ce55a50a6b3 136 // Sets the new output limits. The new limits are applied to the PID
williampeers 0:3ce55a50a6b3 137 // immediately.
williampeers 0:3ce55a50a6b3 138 // Parameters:
williampeers 0:3ce55a50a6b3 139 // min - Constrain PID output to this minimum value.
williampeers 0:3ce55a50a6b3 140 // max - Constrain PID output to this maximum value.
williampeers 0:3ce55a50a6b3 141 // Returns:
williampeers 0:3ce55a50a6b3 142 // Nothing.
williampeers 0:3ce55a50a6b3 143 //
williampeers 0:3ce55a50a6b3 144 void PIDOutputLimitsSet(float min, float max);
williampeers 0:3ce55a50a6b3 145
williampeers 0:3ce55a50a6b3 146 //
williampeers 0:3ce55a50a6b3 147 // PID Tunings Set
williampeers 0:3ce55a50a6b3 148 // Description:
williampeers 0:3ce55a50a6b3 149 // Sets the new gain constant values.
williampeers 0:3ce55a50a6b3 150 // Parameters:
williampeers 0:3ce55a50a6b3 151 // kp - Positive P gain constant value.
williampeers 0:3ce55a50a6b3 152 // ki - Positive I gain constant value.
williampeers 0:3ce55a50a6b3 153 // kd - Positive D gain constant value.
williampeers 0:3ce55a50a6b3 154 // Returns:
williampeers 0:3ce55a50a6b3 155 // Nothing.
williampeers 0:3ce55a50a6b3 156 //
williampeers 0:3ce55a50a6b3 157 void PIDTuningsSet(float kp, float ki, float kd);
williampeers 0:3ce55a50a6b3 158
williampeers 0:3ce55a50a6b3 159 //
williampeers 0:3ce55a50a6b3 160 // PID Tuning Gain Constant P Set
williampeers 0:3ce55a50a6b3 161 // Description:
williampeers 0:3ce55a50a6b3 162 // Sets the proportional gain constant value.
williampeers 0:3ce55a50a6b3 163 // Parameters:
williampeers 0:3ce55a50a6b3 164 // kp - Positive P gain constant value.
williampeers 0:3ce55a50a6b3 165 // Returns:
williampeers 0:3ce55a50a6b3 166 // Nothing.
williampeers 0:3ce55a50a6b3 167 //
williampeers 0:3ce55a50a6b3 168 void PIDTuningKpSet(float kp);
williampeers 0:3ce55a50a6b3 169
williampeers 0:3ce55a50a6b3 170 //
williampeers 0:3ce55a50a6b3 171 // PID Tuning Gain Constant I Set
williampeers 0:3ce55a50a6b3 172 // Description:
williampeers 0:3ce55a50a6b3 173 // Sets the proportional gain constant value.
williampeers 0:3ce55a50a6b3 174 // Parameters:
williampeers 0:3ce55a50a6b3 175 // ki - Positive I gain constant value.
williampeers 0:3ce55a50a6b3 176 // Returns:
williampeers 0:3ce55a50a6b3 177 // Nothing.
williampeers 0:3ce55a50a6b3 178 //
williampeers 0:3ce55a50a6b3 179 void PIDTuningKiSet(float ki);
williampeers 0:3ce55a50a6b3 180
williampeers 0:3ce55a50a6b3 181 //
williampeers 0:3ce55a50a6b3 182 // PID Tuning Gain Constant D Set
williampeers 0:3ce55a50a6b3 183 // Description:
williampeers 0:3ce55a50a6b3 184 // Sets the proportional gain constant value.
williampeers 0:3ce55a50a6b3 185 // Parameters:
williampeers 0:3ce55a50a6b3 186 // kd - Positive D gain constant value.
williampeers 0:3ce55a50a6b3 187 // Returns:
williampeers 0:3ce55a50a6b3 188 // Nothing.
williampeers 0:3ce55a50a6b3 189 //
williampeers 0:3ce55a50a6b3 190 void PIDTuningKdSet(float kd);
williampeers 0:3ce55a50a6b3 191
williampeers 0:3ce55a50a6b3 192 //
williampeers 0:3ce55a50a6b3 193 // PID Controller Direction Set
williampeers 0:3ce55a50a6b3 194 // Description:
williampeers 0:3ce55a50a6b3 195 // Sets the new controller direction.
williampeers 0:3ce55a50a6b3 196 // Parameters:
williampeers 0:3ce55a50a6b3 197 // controllerDirection - The sense of direction of the controller
williampeers 0:3ce55a50a6b3 198 // DIRECT: A positive setpoint gives a positive output
williampeers 0:3ce55a50a6b3 199 // REVERSE: A positive setpoint gives a negative output
williampeers 0:3ce55a50a6b3 200 // Returns:
williampeers 0:3ce55a50a6b3 201 // Nothing.
williampeers 0:3ce55a50a6b3 202 //
williampeers 0:3ce55a50a6b3 203 void PIDControllerDirectionSet(PIDDirection controllerDirection);
williampeers 0:3ce55a50a6b3 204
williampeers 0:3ce55a50a6b3 205 //
williampeers 0:3ce55a50a6b3 206 // PID Sample Time Set
williampeers 0:3ce55a50a6b3 207 // Description:
williampeers 0:3ce55a50a6b3 208 // Sets the new sampling time (in seconds).
williampeers 0:3ce55a50a6b3 209 // Parameters:
williampeers 0:3ce55a50a6b3 210 // sampleTimeSeconds - Interval in seconds on which PIDCompute will be
williampeers 0:3ce55a50a6b3 211 // called.
williampeers 0:3ce55a50a6b3 212 // Returns:
williampeers 0:3ce55a50a6b3 213 // Nothing.
williampeers 0:3ce55a50a6b3 214 //
williampeers 0:3ce55a50a6b3 215 void PIDSampleTimeSet(float sampleTimeSeconds);
williampeers 0:3ce55a50a6b3 216
williampeers 0:3ce55a50a6b3 217 //
williampeers 0:3ce55a50a6b3 218 // PID Setpoint Set
williampeers 0:3ce55a50a6b3 219 // Description:
williampeers 0:3ce55a50a6b3 220 // Alters the setpoint the PID controller will try to achieve.
williampeers 0:3ce55a50a6b3 221 // Parameters:
williampeers 0:3ce55a50a6b3 222 // setpoint - The desired setpoint the PID controller will try to
williampeers 0:3ce55a50a6b3 223 // obtain.
williampeers 0:3ce55a50a6b3 224 // Returns:
williampeers 0:3ce55a50a6b3 225 // Nothing.
williampeers 0:3ce55a50a6b3 226 //
williampeers 0:3ce55a50a6b3 227 inline void PIDSetpointSet(float setpoint) { this->setpoint = setpoint; }
williampeers 0:3ce55a50a6b3 228
williampeers 0:3ce55a50a6b3 229 //
williampeers 0:3ce55a50a6b3 230 // PID Input Set
williampeers 0:3ce55a50a6b3 231 // Description:
williampeers 0:3ce55a50a6b3 232 // Should be called before calling PIDCompute so the PID controller
williampeers 0:3ce55a50a6b3 233 // will have an updated input value to work with.
williampeers 0:3ce55a50a6b3 234 // Parameters:
williampeers 0:3ce55a50a6b3 235 // input - The value the controller will work with.
williampeers 0:3ce55a50a6b3 236 // Returns:
williampeers 0:3ce55a50a6b3 237 // Nothing.
williampeers 0:3ce55a50a6b3 238 //
williampeers 0:3ce55a50a6b3 239 inline void PIDInputSet(float input) { this->input = input; }
williampeers 0:3ce55a50a6b3 240
williampeers 0:3ce55a50a6b3 241 //
williampeers 0:3ce55a50a6b3 242 // PID Output Get
williampeers 0:3ce55a50a6b3 243 // Description:
williampeers 0:3ce55a50a6b3 244 // Typically, this function is called after PIDCompute in order to
williampeers 0:3ce55a50a6b3 245 // retrieve the output of the controller.
williampeers 0:3ce55a50a6b3 246 // Parameters:
williampeers 0:3ce55a50a6b3 247 // None.
williampeers 0:3ce55a50a6b3 248 // Returns:
williampeers 0:3ce55a50a6b3 249 // The output of the specific PID controller.
williampeers 0:3ce55a50a6b3 250 //
williampeers 0:3ce55a50a6b3 251 inline float PIDOutputGet() { return this->output; }
williampeers 0:3ce55a50a6b3 252
williampeers 0:3ce55a50a6b3 253 //
williampeers 0:3ce55a50a6b3 254 // PID Proportional Gain Constant Get
williampeers 0:3ce55a50a6b3 255 // Description:
williampeers 0:3ce55a50a6b3 256 // Returns the proportional gain constant value the particular
williampeers 0:3ce55a50a6b3 257 // controller is set to.
williampeers 0:3ce55a50a6b3 258 // Parameters:
williampeers 0:3ce55a50a6b3 259 // None.
williampeers 0:3ce55a50a6b3 260 // Returns:
williampeers 0:3ce55a50a6b3 261 // The proportional gain constant.
williampeers 0:3ce55a50a6b3 262 //
williampeers 0:3ce55a50a6b3 263 inline float PIDKpGet() { return this->dispKp; }
williampeers 0:3ce55a50a6b3 264
williampeers 0:3ce55a50a6b3 265 //
williampeers 0:3ce55a50a6b3 266 // PID Integral Gain Constant Get
williampeers 0:3ce55a50a6b3 267 // Description:
williampeers 0:3ce55a50a6b3 268 // Returns the integral gain constant value the particular
williampeers 0:3ce55a50a6b3 269 // controller is set to.
williampeers 0:3ce55a50a6b3 270 // Parameters:
williampeers 0:3ce55a50a6b3 271 // None.
williampeers 0:3ce55a50a6b3 272 // Returns:
williampeers 0:3ce55a50a6b3 273 // The integral gain constant.
williampeers 0:3ce55a50a6b3 274 //
williampeers 0:3ce55a50a6b3 275 inline float PIDKiGet() { return this->dispKi; }
williampeers 0:3ce55a50a6b3 276
williampeers 0:3ce55a50a6b3 277 //
williampeers 0:3ce55a50a6b3 278 // PID Derivative Gain Constant Get
williampeers 0:3ce55a50a6b3 279 // Description:
williampeers 0:3ce55a50a6b3 280 // Returns the derivative gain constant value the particular
williampeers 0:3ce55a50a6b3 281 // controller is set to.
williampeers 0:3ce55a50a6b3 282 // Parameters:
williampeers 0:3ce55a50a6b3 283 // None.
williampeers 0:3ce55a50a6b3 284 // Returns:
williampeers 0:3ce55a50a6b3 285 // The derivative gain constant.
williampeers 0:3ce55a50a6b3 286 //
williampeers 0:3ce55a50a6b3 287 inline float PIDKdGet() { return this->dispKd; }
williampeers 0:3ce55a50a6b3 288
williampeers 0:3ce55a50a6b3 289 //
williampeers 0:3ce55a50a6b3 290 // PID Mode Get
williampeers 0:3ce55a50a6b3 291 // Description:
williampeers 0:3ce55a50a6b3 292 // Returns the mode the particular controller is set to.
williampeers 0:3ce55a50a6b3 293 // Parameters:
williampeers 0:3ce55a50a6b3 294 // None.
williampeers 0:3ce55a50a6b3 295 // Returns:
williampeers 0:3ce55a50a6b3 296 // MANUAL or AUTOMATIC depending on what the user set the
williampeers 0:3ce55a50a6b3 297 // controller to.
williampeers 0:3ce55a50a6b3 298 //
williampeers 0:3ce55a50a6b3 299 inline PIDMode PIDModeGet() { return this->mode; }
williampeers 0:3ce55a50a6b3 300
williampeers 0:3ce55a50a6b3 301 //
williampeers 0:3ce55a50a6b3 302 // PID Direction Get
williampeers 0:3ce55a50a6b3 303 // Description:
williampeers 0:3ce55a50a6b3 304 // Returns the direction the particular controller is set to.
williampeers 0:3ce55a50a6b3 305 // Parameters:
williampeers 0:3ce55a50a6b3 306 // None.
williampeers 0:3ce55a50a6b3 307 // Returns:
williampeers 0:3ce55a50a6b3 308 // DIRECT or REVERSE depending on what the user set the
williampeers 0:3ce55a50a6b3 309 // controller to.
williampeers 0:3ce55a50a6b3 310 //
williampeers 0:3ce55a50a6b3 311 inline PIDDirection PIDDirectionGet() { return this->controllerDirection; }
williampeers 0:3ce55a50a6b3 312
williampeers 0:3ce55a50a6b3 313 private:
williampeers 0:3ce55a50a6b3 314 //
williampeers 0:3ce55a50a6b3 315 // Input to the PID Controller
williampeers 0:3ce55a50a6b3 316 //
williampeers 0:3ce55a50a6b3 317 float input;
williampeers 0:3ce55a50a6b3 318
williampeers 0:3ce55a50a6b3 319 //
williampeers 0:3ce55a50a6b3 320 // Previous input to the PID Controller
williampeers 0:3ce55a50a6b3 321 //
williampeers 0:3ce55a50a6b3 322 float lastInput;
williampeers 0:3ce55a50a6b3 323
williampeers 0:3ce55a50a6b3 324 //
williampeers 0:3ce55a50a6b3 325 // Output of the PID Controller
williampeers 0:3ce55a50a6b3 326 //
williampeers 0:3ce55a50a6b3 327 float output;
williampeers 0:3ce55a50a6b3 328
williampeers 0:3ce55a50a6b3 329 //
williampeers 0:3ce55a50a6b3 330 // Gain constant values that were passed by the user
williampeers 0:3ce55a50a6b3 331 // These are for display purposes
williampeers 0:3ce55a50a6b3 332 //
williampeers 0:3ce55a50a6b3 333 float dispKp;
williampeers 0:3ce55a50a6b3 334 float dispKi;
williampeers 0:3ce55a50a6b3 335 float dispKd;
williampeers 0:3ce55a50a6b3 336
williampeers 0:3ce55a50a6b3 337 //
williampeers 0:3ce55a50a6b3 338 // Gain constant values that the controller alters for
williampeers 0:3ce55a50a6b3 339 // its own use
williampeers 0:3ce55a50a6b3 340 //
williampeers 0:3ce55a50a6b3 341 float alteredKp;
williampeers 0:3ce55a50a6b3 342 float alteredKi;
williampeers 0:3ce55a50a6b3 343 float alteredKd;
williampeers 0:3ce55a50a6b3 344
williampeers 0:3ce55a50a6b3 345 //
williampeers 0:3ce55a50a6b3 346 // The Integral Term
williampeers 0:3ce55a50a6b3 347 //
williampeers 0:3ce55a50a6b3 348 float iTerm;
williampeers 0:3ce55a50a6b3 349
williampeers 0:3ce55a50a6b3 350 //
williampeers 0:3ce55a50a6b3 351 // The interval (in seconds) on which the PID controller
williampeers 0:3ce55a50a6b3 352 // will be called
williampeers 0:3ce55a50a6b3 353 //
williampeers 0:3ce55a50a6b3 354 float sampleTime;
williampeers 0:3ce55a50a6b3 355
williampeers 0:3ce55a50a6b3 356 //
williampeers 0:3ce55a50a6b3 357 // The values that the output will be constrained to
williampeers 0:3ce55a50a6b3 358 //
williampeers 0:3ce55a50a6b3 359 float outMin;
williampeers 0:3ce55a50a6b3 360 float outMax;
williampeers 0:3ce55a50a6b3 361
williampeers 0:3ce55a50a6b3 362 //
williampeers 0:3ce55a50a6b3 363 // The user chosen operating point
williampeers 0:3ce55a50a6b3 364 //
williampeers 0:3ce55a50a6b3 365 float setpoint;
williampeers 0:3ce55a50a6b3 366
williampeers 0:3ce55a50a6b3 367 //
williampeers 0:3ce55a50a6b3 368 // The sense of direction of the controller
williampeers 0:3ce55a50a6b3 369 // DIRECT: A positive setpoint gives a positive output
williampeers 0:3ce55a50a6b3 370 // REVERSE: A positive setpoint gives a negative output
williampeers 0:3ce55a50a6b3 371 //
williampeers 0:3ce55a50a6b3 372 PIDDirection controllerDirection;
williampeers 0:3ce55a50a6b3 373
williampeers 0:3ce55a50a6b3 374 //
williampeers 0:3ce55a50a6b3 375 // Tells how the controller should respond if the user has
williampeers 0:3ce55a50a6b3 376 // taken over manual control or not
williampeers 0:3ce55a50a6b3 377 // MANUAL: PID controller is off.
williampeers 0:3ce55a50a6b3 378 // AUTOMATIC: PID controller is on.
williampeers 0:3ce55a50a6b3 379 //
williampeers 0:3ce55a50a6b3 380 PIDMode mode;
williampeers 0:3ce55a50a6b3 381 };
williampeers 0:3ce55a50a6b3 382
williampeers 0:3ce55a50a6b3 383 #endif // PID_CONTROLLER_H