Rate limiter class.
Dependents: BLDC_mainProgram L298N-Breakout-Test HBridgeDCMotor STMF302R8_MotorDrive ... more
RateLimiter.cpp
00001 #include "RateLimiter.h" 00002 00003 RateLimiter::RateLimiter () { 00004 setLimits(1, -1, 0, 10e-3); 00005 } 00006 00007 RateLimiter::RateLimiter (float R, float F, float y0, float T_d) { 00008 setLimits(R, F, y0, T_d); 00009 } 00010 00011 void RateLimiter::reset() { 00012 y0 = 0; 00013 } 00014 00015 void RateLimiter::setLimits(float R, float F) { 00016 if (R < 0) { 00017 R = -R; 00018 } 00019 if (F > 0) { 00020 F = -F; 00021 } 00022 this->R = R; 00023 this->F = F; 00024 } 00025 00026 void RateLimiter::setLimits(float R, float F, float y0, float T_d) { 00027 if (R < 0) { 00028 R = -R; 00029 } 00030 if (F > 0) { 00031 F = -F; 00032 } 00033 if (T_d <= 1e-6) { 00034 T_d = 1e-3; 00035 } 00036 this->T_d = T_d; 00037 this->y0 = y0; 00038 this->R = R; 00039 this->F = F; 00040 } 00041 00042 float RateLimiter::out (float u) { 00043 rate = (u - y0) / T_d; 00044 if (rate > R) { 00045 y = R * T_d + y0; 00046 } else if (rate < F) { 00047 y = F * T_d + y0; 00048 } else { 00049 y = u; 00050 } 00051 y0 = y; 00052 return y; 00053 }
Generated on Tue Jul 19 2022 00:30:43 by 1.7.2