sistem PID

Fork of kontrolPID by Muhammad Fathoni Nurrohman

Committer:
sarlilouis
Date:
Fri Oct 27 15:16:31 2017 +0000
Revision:
0:a400d726fdc6
Child:
2:b37bdc0b8677
-

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sarlilouis 0:a400d726fdc6 1 #include "mbed.h"
sarlilouis 0:a400d726fdc6 2 #include "kontrolPID.h"
sarlilouis 0:a400d726fdc6 3 float _kP, _kI, _kD;
sarlilouis 0:a400d726fdc6 4 int _interval;
sarlilouis 0:a400d726fdc6 5 short _limit_Min, _limit_Max;
sarlilouis 0:a400d726fdc6 6 float _current_Error, _sum_Error, _delta_Error, _previous_Error;
sarlilouis 0:a400d726fdc6 7 float _controller_Output;
sarlilouis 0:a400d726fdc6 8 kontrolPID::kontrolPID(float kP, float kI, float kD,
sarlilouis 0:a400d726fdc6 9 int interval,
sarlilouis 0:a400d726fdc6 10 short limit_Min, short limit_Max){
sarlilouis 0:a400d726fdc6 11 _kP = kP;
sarlilouis 0:a400d726fdc6 12 _kI = kI;
sarlilouis 0:a400d726fdc6 13 _kD = kD;
sarlilouis 0:a400d726fdc6 14 _interval = interval;
sarlilouis 0:a400d726fdc6 15 _limit_Min = limit_Min;
sarlilouis 0:a400d726fdc6 16 _limit_Max = limit_Max;
sarlilouis 0:a400d726fdc6 17 }
sarlilouis 0:a400d726fdc6 18
sarlilouis 0:a400d726fdc6 19 void kontrolPID::resetPID(){
sarlilouis 0:a400d726fdc6 20 _current_Error = 0;
sarlilouis 0:a400d726fdc6 21 _delta_Error = 0;
sarlilouis 0:a400d726fdc6 22 _sum_Error = 0;
sarlilouis 0:a400d726fdc6 23 }
sarlilouis 0:a400d726fdc6 24
sarlilouis 0:a400d726fdc6 25 float kontrolPID::hitungPID(float _process_Value, float _set_Point){
sarlilouis 0:a400d726fdc6 26 _current_Error = _set_Point - _process_Value;
sarlilouis 0:a400d726fdc6 27 _delta_Error = _current_Error - _previous_Error;
sarlilouis 0:a400d726fdc6 28 _sum_Error = _current_Error + _previous_Error;
sarlilouis 0:a400d726fdc6 29
sarlilouis 0:a400d726fdc6 30 _controller_Output = _kP * _current_Error + _kI * _sum_Error * _interval + _kD * _delta_Error / _interval;
sarlilouis 0:a400d726fdc6 31
sarlilouis 0:a400d726fdc6 32 if (_limit_Max < _controller_Output){
sarlilouis 0:a400d726fdc6 33 _controller_Output = _limit_Max;
sarlilouis 0:a400d726fdc6 34 }
sarlilouis 0:a400d726fdc6 35 else if (_limit_Min > _controller_Output){
sarlilouis 0:a400d726fdc6 36 _controller_Output = _limit_Min;
sarlilouis 0:a400d726fdc6 37 }
sarlilouis 0:a400d726fdc6 38
sarlilouis 0:a400d726fdc6 39 _previous_Error = _current_Error;
sarlilouis 0:a400d726fdc6 40
sarlilouis 0:a400d726fdc6 41 return _controller_Output;
sarlilouis 0:a400d726fdc6 42 }
sarlilouis 0:a400d726fdc6 43