Advertisement
Guest User

Untitled

a guest
Nov 14th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. void computePID(PID *pidToCompute, float processVariable){
  2. float output;
  3. float error = pidToCompute->setPoint - processVariable;
  4. pidToCompute->integral += error * 0.01;
  5. if(pidToCompute->integral != 0){
  6. if(pidToCompute->integral > pidToCompute->integralMaxValue) pidToCompute->integral = pidToCompute->integralMaxValue;//stop integral windup
  7. if(pidToCompute->integral < (-1 * pidToCompute->integralMaxValue)) pidToCompute->integral = -1 * pidToCompute->integralMaxValue;
  8. }
  9. float derivative = (processVariable - pidToCompute->previousError) / 0.01;
  10. derivatived = (processVariable - pidToCompute->previousError) / 0.01;
  11. pidToCompute->previousError = processVariable;
  12. output = (error * pidToCompute->pGain + (pidToCompute->integral * pidToCompute->iGain) + (derivative * pidToCompute->dGain));
  13. if(output > pidToCompute->pidLimits) output = pidToCompute->pidLimits; // limit the pid output
  14. if(output < (-1 * pidToCompute->pidLimits)) output = -1 * pidToCompute->pidLimits;
  15. pidToCompute->pidOutput = output;
  16. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement