sistem PID
Fork of kontrolPID by
kontrolPID.cpp
- Committer:
- Fathoni17
- Date:
- 2017-11-06
- Revision:
- 2:b37bdc0b8677
- Parent:
- 0:a400d726fdc6
- Child:
- 3:8607359f4813
File content as of revision 2:b37bdc0b8677:
#include "mbed.h" #include "kontrolPID.h" float _kP, _kI, _kD; float _last_output; int _interval; short _limit_Min, _limit_Max; float _current_Error, _sum_Error, _delta_Error, _previous_Error_1, _previous_Error_2; float _controller_Output; kontrolPID::kontrolPID( int interval, short limit_Min, short limit_Max, float kP, float kI, float kD){ _kP = kP; _kI = kI; _kD = kD; _interval = interval; _limit_Min = limit_Min; _limit_Max = limit_Max; _last_output = 0; } void kontrolPID::resetPID(){ _current_Error = 0; _delta_Error = 0; _sum_Error = 0; } float kontrolPID::hitungPID(float _process_Value, float _set_Point){ float a = _kP + _kI*_interval/2 + _kD/_interval; float b = -1*_kP + _kI*_interval/2 - 2*_kD/_interval; float c = _kD/_interval; _current_Error = _set_Point - _process_Value; _controller_Output = _last_output + a * _current_Error + b * _previous_Error_1 + c * _previous_Error_2; if (_limit_Max < _controller_Output){ _controller_Output = _limit_Max; } else if (_limit_Min > _controller_Output){ _controller_Output = _limit_Min; } _last_output = _controller_Output; _previous_Error_2 = _previous_Error_1; _previous_Error_1 = _current_Error; return _controller_Output; }