-
kontrolPID.cpp@0:a400d726fdc6, 2017-10-27 (annotated)
- Committer:
- sarlilouis
- Date:
- Fri Oct 27 15:16:31 2017 +0000
- Revision:
- 0:a400d726fdc6
-
Who changed what in which revision?
User | Revision | Line number | New 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 |