sistem PID

Fork of kontrolPID by Muhammad Fathoni Nurrohman

Committer:
Fathoni17
Date:
Mon Nov 06 14:52:38 2017 +0000
Revision:
2:b37bdc0b8677
Parent:
0:a400d726fdc6
Child:
3:8607359f4813
ki, kd jadi default = 0

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"
Fathoni17 2:b37bdc0b8677 3 float _kP, _kI, _kD;
Fathoni17 2:b37bdc0b8677 4 float _last_output;
Fathoni17 2:b37bdc0b8677 5 int _interval;
Fathoni17 2:b37bdc0b8677 6 short _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 2:b37bdc0b8677 10 short limit_Min, short 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