Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void computePID(PID *pidToCompute, float processVariable){
- float output;
- float error = pidToCompute->setPoint - processVariable;
- pidToCompute->integral += error * 0.01;
- if(pidToCompute->integral != 0){
- if(pidToCompute->integral > pidToCompute->integralMaxValue) pidToCompute->integral = pidToCompute->integralMaxValue;//stop integral windup
- if(pidToCompute->integral < (-1 * pidToCompute->integralMaxValue)) pidToCompute->integral = -1 * pidToCompute->integralMaxValue;
- }
- float derivative = (processVariable - pidToCompute->previousError) / 0.01;
- derivatived = (processVariable - pidToCompute->previousError) / 0.01;
- pidToCompute->previousError = processVariable;
- output = (error * pidToCompute->pGain + (pidToCompute->integral * pidToCompute->iGain) + (derivative * pidToCompute->dGain));
- if(output > pidToCompute->pidLimits) output = pidToCompute->pidLimits; // limit the pid output
- if(output < (-1 * pidToCompute->pidLimits)) output = -1 * pidToCompute->pidLimits;
- pidToCompute->pidOutput = output;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement