|
|
|
@ -45,25 +45,6 @@ float AC_PID::get_i(float error, float dt)
@@ -45,25 +45,6 @@ float AC_PID::get_i(float error, float dt)
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// This is an integrator which tends to decay to zero naturally
|
|
|
|
|
// if the error is zero.
|
|
|
|
|
|
|
|
|
|
float AC_PID::get_leaky_i(float error, float dt, float leak_rate) |
|
|
|
|
{ |
|
|
|
|
if((_ki != 0) && (dt != 0)){ |
|
|
|
|
_integrator -= (float)_integrator * leak_rate; |
|
|
|
|
_integrator += ((float)error * _ki) * dt; |
|
|
|
|
if (_integrator < -_imax) { |
|
|
|
|
_integrator = -_imax; |
|
|
|
|
} else if (_integrator > _imax) { |
|
|
|
|
_integrator = _imax; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return _integrator; |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
float AC_PID::get_d(float input, float dt) |
|
|
|
|
{ |
|
|
|
|
if ((_kd != 0) && (dt != 0)) { |
|
|
|
|