sistem PID
Fork of kontrolPID by
kontrolPID.cpp@3:8607359f4813, 2017-11-29 (annotated)
- Committer:
- Fathoni17
- Date:
- Wed Nov 29 05:02:05 2017 +0000
- Revision:
- 3:8607359f4813
- Parent:
- 2:b37bdc0b8677
PID teta berjalan lancar; KontolPID insyaAllah sudah bisa digunakan
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" |
Fathoni17 | 2:b37bdc0b8677 | 3 | float _kP, _kI, _kD; |
Fathoni17 | 2:b37bdc0b8677 | 4 | float _last_output; |
Fathoni17 | 2:b37bdc0b8677 | 5 | int _interval; |
Fathoni17 | 3:8607359f4813 | 6 | float _limit_Min, _limit_Max; |
Fathoni17 | 2:b37bdc0b8677 | 7 | float _current_Error, _sum_Error, _delta_Error, _previous_Error_1, _previous_Error_2; |
Fathoni17 | 2:b37bdc0b8677 | 8 | float _controller_Output; |
Fathoni17 | 2:b37bdc0b8677 | 9 | kontrolPID::kontrolPID( int interval, |
Fathoni17 | 3:8607359f4813 | 10 | float limit_Min, float limit_Max, |
Fathoni17 | 2:b37bdc0b8677 | 11 | float kP, float kI, float kD){ |
sarlilouis | 0:a400d726fdc6 | 12 | _kP = kP; |
sarlilouis | 0:a400d726fdc6 | 13 | _kI = kI; |
sarlilouis | 0:a400d726fdc6 | 14 | _kD = kD; |
sarlilouis | 0:a400d726fdc6 | 15 | _interval = interval; |
sarlilouis | 0:a400d726fdc6 | 16 | _limit_Min = limit_Min; |
sarlilouis | 0:a400d726fdc6 | 17 | _limit_Max = limit_Max; |
Fathoni17 | 2:b37bdc0b8677 | 18 | _last_output = 0; |
sarlilouis | 0:a400d726fdc6 | 19 | } |
sarlilouis | 0:a400d726fdc6 | 20 | |
sarlilouis | 0:a400d726fdc6 | 21 | void kontrolPID::resetPID(){ |
sarlilouis | 0:a400d726fdc6 | 22 | _current_Error = 0; |
sarlilouis | 0:a400d726fdc6 | 23 | _delta_Error = 0; |
sarlilouis | 0:a400d726fdc6 | 24 | _sum_Error = 0; |
sarlilouis | 0:a400d726fdc6 | 25 | } |
sarlilouis | 0:a400d726fdc6 | 26 | |
sarlilouis | 0:a400d726fdc6 | 27 | float kontrolPID::hitungPID(float _process_Value, float _set_Point){ |
Fathoni17 | 2:b37bdc0b8677 | 28 | float a = _kP + _kI*_interval/2 + _kD/_interval; |
Fathoni17 | 2:b37bdc0b8677 | 29 | float b = -1*_kP + _kI*_interval/2 - 2*_kD/_interval; |
Fathoni17 | 2:b37bdc0b8677 | 30 | float c = _kD/_interval; |
Fathoni17 | 2:b37bdc0b8677 | 31 | |
sarlilouis | 0:a400d726fdc6 | 32 | _current_Error = _set_Point - _process_Value; |
sarlilouis | 0:a400d726fdc6 | 33 | |
Fathoni17 | 2:b37bdc0b8677 | 34 | _controller_Output = _last_output + a * _current_Error + b * _previous_Error_1 + c * _previous_Error_2; |
sarlilouis | 0:a400d726fdc6 | 35 | |
sarlilouis | 0:a400d726fdc6 | 36 | if (_limit_Max < _controller_Output){ |
sarlilouis | 0:a400d726fdc6 | 37 | _controller_Output = _limit_Max; |
sarlilouis | 0:a400d726fdc6 | 38 | } |
sarlilouis | 0:a400d726fdc6 | 39 | else if (_limit_Min > _controller_Output){ |
sarlilouis | 0:a400d726fdc6 | 40 | _controller_Output = _limit_Min; |
sarlilouis | 0:a400d726fdc6 | 41 | } |
sarlilouis | 0:a400d726fdc6 | 42 | |
Fathoni17 | 2:b37bdc0b8677 | 43 | _last_output = _controller_Output; |
Fathoni17 | 2:b37bdc0b8677 | 44 | _previous_Error_2 = _previous_Error_1; |
Fathoni17 | 2:b37bdc0b8677 | 45 | _previous_Error_1 = _current_Error; |
sarlilouis | 0:a400d726fdc6 | 46 | |
sarlilouis | 0:a400d726fdc6 | 47 | return _controller_Output; |
sarlilouis | 0:a400d726fdc6 | 48 | } |
sarlilouis | 0:a400d726fdc6 | 49 |