Rate limiter class.
Dependents: BLDC_mainProgram L298N-Breakout-Test HBridgeDCMotor STMF302R8_MotorDrive ... more
RateLimiter.cpp
- Committer:
- tbjazic
- Date:
- 2015-01-14
- Revision:
- 0:d735360f91f9
File content as of revision 0:d735360f91f9:
#include "RateLimiter.h" RateLimiter::RateLimiter () { setLimits(1, -1, 0, 10e-3); } RateLimiter::RateLimiter (float R, float F, float y0, float T_d) { setLimits(R, F, y0, T_d); } void RateLimiter::reset() { y0 = 0; } void RateLimiter::setLimits(float R, float F) { if (R < 0) { R = -R; } if (F > 0) { F = -F; } this->R = R; this->F = F; } void RateLimiter::setLimits(float R, float F, float y0, float T_d) { if (R < 0) { R = -R; } if (F > 0) { F = -F; } if (T_d <= 1e-6) { T_d = 1e-3; } this->T_d = T_d; this->y0 = y0; this->R = R; this->F = F; } float RateLimiter::out (float u) { rate = (u - y0) / T_d; if (rate > R) { y = R * T_d + y0; } else if (rate < F) { y = F * T_d + y0; } else { y = u; } y0 = y; return y; }